R 語言怎樣進行分散式計算?
01-28
想用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