开源 shell centos java mysql 程序员 Firefox Python Android php Ubuntu linux apache google Windows 云计算 微软 nginx wordpress 编程

如何讓Hadoop結合R語言做統計和大數據分析?

R是GNU的一個開源工具,具有S語言血統,擅長 統計 計算和 統計 制圖。由Revolution Analytics發起的一個開源項目RHadoop將R語言與Hadoop結合在一起,很好發揮了R語言特長。廣大R語言愛好者借助強大工具RHadoop,可以在 大數據 領域大展拳腳,這對R語言程序員來說無疑是個喜訊。作者從一個程序員的角度對R語言和Hadoop做了一次詳細的講解。

以下為原文:

前言

寫過幾篇關於RHadoop的技術性文章,都是從統計的角度,介紹如何讓R語言利用Hadoop處理大數據。今天決定反過來,從計算機開發人員的角度,介紹如何讓Hadoop結合R語言,能做統計分析的事情。

目錄

R語言介紹

Hadoop介紹

為什麽要讓Hadoop結合R語言?

如何讓Hadoop結合R語言?

R和Hadoop在實際中的案例

1. R語言介紹
起源

R語言,一種自由軟件編程語言與操作環境,主要用於統計分析、繪圖、數據挖掘。R本來是由來自新西蘭奧克蘭大學的Ross Ihaka和Robert Gentleman開發(也因此稱為R),現在由“R開發核心團隊”負責開發。R是基於S語言的一個GNU計劃項目,所以也可以當作S語言的一種實現。R 的語法是來自Scheme。

跨平臺,許可證

R的源代碼可自由下載使用,GNU通用公共許可證,可在多種平臺下運行,包括UNIX,Linux,Windows和MacOS。R主要是以命令行操作為主,同時支持GUI的圖形用戶界面。

R的數字基因

R內建多種統計學及數字分析功能。因為S的血緣,R比其他統計學或數學專用的編程語言有更強的物件導向功能。

R的另一強項是繪圖功能,制圖具有印刷的素質,也可加入數學符號。

雖然R主要用於統計分析或者開發統計相關的軟體,但也有人用作矩陣計算。其分析速度可媲美GNU Octave甚至商業軟件MATLAB。

代碼庫

CRAN為Comprehensive R Archive Network的簡稱。它除了收藏了R的執行檔下載版、源代碼和說明文件,也收錄了各種用戶撰寫的軟件包。全球有超過一百個CRAN鏡像站,上萬個第三方的軟件包。

R的行業應用

統計分析,應用數學,計量經濟,金融分析,財經分析,人文科學,數據挖掘,人工智能,生物信息學,生物制藥,全球地理科學,數據可視化。

商業競爭對手

SAS :(Statistical Analysis System)是 SAS 公司推出的一款用於 數據分析 和和決策支持的大型集成式模塊化軟件系統。

SPSS :(Statistical Product and service Solutions)是IBM公司推出的一系列用於統計學分析運算、數據挖掘、預測分析和決策支持任務的軟件產品及相關服務的總稱。

Matlab:(MATrix LABoratory),是MathWorks公司出品的一款商業數學軟件。MATLAB是一種用於算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境。

2. Hadoop介紹
Hadoop對於計算機的人,都是耳熟能說的技術了。

Hadoop是一個分布式系統基礎架構,由Apache基金會開發。用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威 力高速運算和存儲。Hadoop實現了一個分布式文件系統(Hadoop Distributed file System),簡稱HDFS。HDFS有著高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬件上。而且它提供高傳輸率(high throughput)來訪問應用程序的數據,適合那些有著超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求(requirements)這樣可以流的形式訪問(streaming access)文件系統中的數據。

如何讓Hadoop結合R語言做統計和大數據分析?
Hadoop的家族成員:Hive, HBase, Zookeeper, Avro, Pig, Ambari, Sqoop, Mahout, Chukwa

Hive: 是基於Hadoop的一個 數據倉庫 工具,可以將結構化的數據文件映射為一張數據庫表,通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合 數據倉庫 的統計分析。

Pig: 是一個基於Hadoop的大規模數據分析工具,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的數據分析請求轉換為一系列經過優化處理的MapReduce運算。

HBase: 是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。

Sqoop: 是一個用來將Hadoop和關系型數據庫中的數據相互轉移的工具,可以將一個關系型數據庫(mysql ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關系型數據庫中。

Zookeeper:是一個為分布式應用所設計的分布的、開源的協調服務,它主要是用來解決分布式應用中經常遇到的一些數據管理問題,簡化分布式應用協調及其管理的難度,提供高性能的分布式服務

Mahout:是基於Hadoop的機器學習和數據挖掘的一個分布式框架。Mahout用MapReduce實現了部分數據挖掘算法,解決了並行挖掘的問題。

Avro: 是一個數據序列化系統,設計用於支持數據密集型,大批量數據交換的應用。Avro是新的數據序列化格式與傳輸工具,將逐步取代Hadoop原有的IPC機制

Ambari: 是一種基於Web的工具,支持Hadoop集群的供應、管理和監控。

Chukwa: 是一個開源的用於監控大型分布式系統的數據收集系統,它可以將各種各樣類型的數據收集成適合 Hadoop 處理的文件保存在 HDFS 中供 Hadoop 進行各種 MapReduce 操作。

自2006年,Hadoop以MapReduce和HDFS獨立發展開始,到今年2013年不過7年時間,Hadoop的家族已經孵化出多個 Apache的頂級項目。特別是最近1-2年,發展速度越來越快,又融入了很多新技術(YARN, Hcatalog, Oozie, Cassandra),都有點讓我們都學不過來了。

3. 為什麽要讓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語言的擅長領域並不重合。集百家之長,在適合的領域選擇合適的技術,才能真正地“保質保量”做軟件。

4. 如何讓Hadoop結合R語言?
從上一節我們看到,Hadoop和R語言是可以互補的,但所介紹的場景都是Hadoop和R語言的分別處理各自的數據。

一旦市場有需求,自然會有商家填補這個空白。

1). RHadoop

RHadoop是一款Hadoop和R語言的結合的產品,由RevolutionAnalytics公司開發,並將代碼開源到github社區上 面。RHadoop包含三個R包 (rmr,rhdfs,rhbase),分別是對應Hadoop系統架構中的,MapReduce, HDFS, HBase 三個部分。

2). RHive

RHive是一款通過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化,軟件開發,測試等等。。。

所以,這樣的案例並不太多。

展位未來
對於R和Hadoop的結合,在近幾年,肯定會生成爆發式的增長的。但由於跨學科會造成技術壁壘,人才會遠遠跟不上市場的需求。

所以,肯定會有更多的大數據工具,被發明!機會就在我們的手中,也許明天你的創新,就是我們追逐的方向!!

延伸阅读

评论