如何讓Hadoop結合R語言做大數據分析?
為什么要讓Hadoop結合R語言?
R語言和Hadoop讓我們體會到了,兩種技術在各自領域的強大。很多開發人員在計算機的角度,都會提出下面2個問題。問題1: Hadoop的家族如此之強大,為什么還要結合R語言?
問題2: Mahout同樣可以做數據挖掘和機器學習,和R語言的區別是什么?下面我嘗試著做一個解答:問題1: Hadoop的家族如此之強大,為什么還要結合R語言?
- a. Hadoop家族的強大之處,在于對大數據的處理,讓原來的不可能(TB,PB數據量計算),成為了可能。
- b. R語言的強大之處,在于統計分析,在沒有Hadoop之前,我們對于大數據的處理,要取樣本,假設檢驗,做回歸,長久以來R語言都是統計學家專屬的工具。
- c. 從a和b兩點,我們可以看出,hadoop重點是全量數據分析,而R語言重點是樣本數據分析。 兩種技術放在一起,剛好是最長補短!
- d. 模擬場景:對1PB的新聞網站訪問日志做分析,預測未來流量變化
d1:用R語言,通過分析少量數據,對業務目標建回歸建模,并定義指標d2:用Hadoop從海量日志數據中,提取指標數據d3:用R語言模型,對指標數據進行測試和調優d4:用Hadoop分步式算法,重寫R語言的模型,部署上線這個場景中,R和Hadoop分別都起著非常重要的作用。以計算機開發人員的思路,所有有事情都用Hadoop去做,沒有數據建模和證明,”預測的結果”一定是有問題的。以統計人員的思路,所有的事情都用R去做,以抽樣方式,得到的“預測的結果”也一定是有問題的。所以讓二者結合,是產界業的必然的導向,也是產界業和學術界的交集,同時也為交叉學科的人才提供了無限廣闊的想象空間。問題2: Mahout同樣可以做數據挖掘和機器學習,和R語言的區別是什么?
- a. Mahout是基于Hadoop的數據挖掘和機器學習的算法框架,Mahout的重點同樣是解決大數據的計算的問題。
- b. Mahout目前已支持的算法包括,協同過濾,推薦算法,聚類算法,分類算法,LDA, 樸素bayes,隨機森林。上面的算法中,大部分都是距離的算法,可以通過矩陣分解后,充分利用MapReduce的并行計算框架,高效地完成計算任務。
- c. Mahout的空白點,還有很多的數據挖掘算法,很難實現MapReduce并行化。Mahout的現有模型,都是通用模型,直接用到的項目中,計算結果只會比隨機結果好一點點。Mahout二次開發,要求有深厚的JAVA和Hadoop的技術基礎,***兼有 “線性代數”,“概率統計”,“算法導論” 等的基礎知識。所以想玩轉Mahout真的不是一件容易的事情。
- d. R語言同樣提供了Mahout支持的約大多數算法(除專有算法),并且還支持大量的Mahout不支持的算法,算法的增長速度比mahout快N倍。并且開發簡單,參數配置靈活,對小型數據集運算速度非常快。
雖然,Mahout同樣可以做數據挖掘和機器學習,但是和R語言的擅長領域并不重合。集百家之長,在適合的領域選擇合適的技術,才能真正地“保質保量”做軟件。
如何讓Hadoop結合R語言?
從上一節我們看到,Hadoop和R語言是可以互補的,但所介紹的場景都是Hadoop和R語言的分別處理各自的數據。一旦市場有需求,自然會有商家填補這個空白。
1). RHadoop
RHadoop是一款Hadoop和R語言的結合的產品,由RevolutionAnalytics公司開發,并將代碼開源到github社區上面。RHadoop包含三個R包 (rmr,rhdfs,rhbase),分別是對應Hadoop系統架構中的,MapReduce, HDFS, HBase 三個部分。
2). RHiveRHive是一款通過R語言直接訪問Hive的工具包,是由NexR一個韓國公司研發的。
3). 重寫Mahout用R語言重寫Mahout的實現也是一種結合的思路,我也做過相關的嘗試。
4).Hadoop調用R
上面說的都是R如何調用Hadoop,當然我們也可以反相操作,打通JAVA和R的連接通道,讓Hadoop調用R的函數。但是,這部分還沒有商家做出成形的產品。
5. R和Hadoop在實際中的案例
R和Hadoop的結合,技術門檻還是有點高的。對于一個人來說,不僅要掌握Linux, Java, Hadoop, R的技術,還要具備 軟件開發,算法,概率統計,線性代數,數據可視化,行業背景 的一些基本素質。在公司部署這套環境,同樣需要多個部門,多種人才的的配合。Hadoop運維,Hadoop算法研發,R語言建模,R語言MapReduce化,軟件開發,測試等等。所以,這樣的案例并不太多。
原文鏈接:http://www.36dsj.com/archives/6468