R 語言怎樣進行分散式計算?

想用R做全量數據的分析。嘗試安裝了rhive, snow包,但是發現最終的瓶頸還是在單機的內存大小。怎樣突存這個瓶頸,把全量數據分布到R不同的節點進行分析呢?


首先注意使用稀疏矩陣。

R+Hadoop可以參考:Home · RevolutionAnalytics/RHadoop Wiki · GitHub

另外也有SparkR:SparkR by amplab-extras

MPI的話,個人覺得pbdMPI包比Rmpi更人性化


分散式計算就不要用R了。R里所有的數貌似都是按double存在內存里,很佔資源。可能用c甚至用python(numpy)改寫,內存瓶頸就沒了。

分散式平台上,R的支持一般都不太好。


2016年了這個問題可以拿出來重新討論一下…

現在商業化R的兩大陣營:Rstudio陣營和Microsoft(原來Revolution R)陣營都有了比較好的解決方案...微軟這套我還沒搞特別清楚先講Rstudio的吧:

sparklyr — R interface for Apache Spark

  • Connect to Spark from R — the sparklyr package provides a complete dplyr backend.
  • Filter and aggregate Spark datasets then bring them into R for analysis and visualization.
  • Use Spark』s distributed machine learning library from R.
  • Create extensions that call the full Spark API and provide interfaces to Spark packages.

簡單說就是R語言和Spark的一個介面,可以通過R語言調用Spark的計算能力,把計算任務分配到Spark的節點上來做。

亮點:

1、近乎完整的dplyr語法!用過dplyr的同學一定知道這套語法是多麼的人性化…

2、可以直接調用Spark的機器學習能力!再也不用糾結pull到R裡面的數據不夠...

3、不要錢……

弱點:

1、如果不是Spark包自帶的演算法的話還是要自己Call Spark API寫…要懂一點分散式開發

2、仔細一想這就是給Spark做了個殼...不能說是用R在做分散式運算orz

至於Microsoft...現在有Microsoft R Server, 提供了很多R原生函數的High Performance Analysis版本,可以實現並行運算...

不過要錢的2333


這個可能比較麻煩,需要對R程序的底層API和package都要進行重構以適應分散式運算和分散式文件存儲,現在好像沒有什麼好辦法,因為現在很多包如果放到分散式上面可能都不能運行。有程序方面的原因,也有可能很多統計演算法並不適合分散式計算


R商業版似乎可以突破內存限制.


目前我有一個想法,通過在分散式系統上建立R運算集群,每個本機進行運算一個子集合,然後將子集合返回給client。代碼還是原來的代碼,只是數據進行一定的劃分,先留個草稿,以後再搞事情


推薦閱讀:

分散式計算和並行計算到底有啥區別 能讓我知道什麼時候是哪種就好了?
請教mesos、k8s、spark、馬拉松、swarm、zookeeper、map-reduce?
如何理解深度學習分散式訓練中的large batch size與learning rate的關係?
UC Berkeley提出新型分散式執行框架Ray:有望取代Spark
深入淺出Spark(二) 什麼是RDD

TAG:分散式計算 | R編程語言 |