
如何讓Hadoop結(jié)合R語言做統(tǒng)計(jì)和大數(shù)據(jù)分析
R是GNU的一個(gè)開源工具,具有S語言血統(tǒng),擅長統(tǒng)計(jì)計(jì)算和統(tǒng)計(jì)制圖。由Revolution Analytics發(fā)起的一個(gè)開源項(xiàng)目RHadoop將R語言與Hadoop結(jié)合在一起,很好發(fā)揮了R語言特長。廣大R語言愛好者借助強(qiáng)大工具RHadoop,可以在大數(shù)據(jù)領(lǐng)域大展拳腳,這對(duì)R語言程序員來說無疑是個(gè)喜訊。作者從一個(gè)程序員的角度對(duì)R語言和Hadoop做了一次詳細(xì)的講解。
以下為原文:
前言
寫過幾篇關(guān)于RHadoop的技術(shù)性文章,都是從統(tǒng)計(jì)的角度,介紹如何讓R語言利用Hadoop處理大數(shù)據(jù)。今天決定反過來,從計(jì)算機(jī)開發(fā)人員的角度,介紹如何讓Hadoop結(jié)合R語言,能做統(tǒng)計(jì)分析的事情。
目錄
R語言介紹
Hadoop介紹
R和Hadoop在實(shí)際中的案例
1. R語言介紹
起源
R語言,一種自由軟件編程語言與操作環(huán)境,主要用于統(tǒng)計(jì)分析、繪圖、數(shù)據(jù)挖掘。R本來是由來自新西蘭奧克蘭大學(xué)的Ross Ihaka和Robert Gentleman開發(fā)(也因此稱為R),現(xiàn)在由“R開發(fā)核心團(tuán)隊(duì)”負(fù)責(zé)開發(fā)。R是基于S語言的一個(gè)GNU計(jì)劃項(xiàng)目,所以也可以當(dāng)作S語言的一種實(shí)現(xiàn)。R的語法是來自Scheme。
跨平臺(tái),許可證
R的源代碼可自由下載使用,GNU通用公共許可證,可在多種平臺(tái)下運(yùn)行,包括UNIX,Linux,Windows和MacOS。R主要是以命令行操作為主,同時(shí)支持GUI的圖形用戶界面。
R的數(shù)字基因
R內(nèi)建多種統(tǒng)計(jì)學(xué)及數(shù)字分析功能。因?yàn)镾的血緣,R比其他統(tǒng)計(jì)學(xué)或數(shù)學(xué)專用的編程語言有更強(qiáng)的物件導(dǎo)向功能。
R的另一強(qiáng)項(xiàng)是繪圖功能,制圖具有印刷的素質(zhì),也可加入數(shù)學(xué)符號(hào)。
雖然R主要用于統(tǒng)計(jì)分析或者開發(fā)統(tǒng)計(jì)相關(guān)的軟體,但也有人用作矩陣計(jì)算。其分析速度可媲美GNU Octave甚至商業(yè)軟件MATLAB。
代碼庫
CRAN為Comprehensive R Archive Network的簡(jiǎn)稱。它除了收藏了R的執(zhí)行檔下載版、源代碼和說明文件,也收錄了各種用戶撰寫的軟件包。全球有超過一百個(gè)CRAN鏡像站,上萬個(gè)第三方的軟件包。
R的行業(yè)應(yīng)用
統(tǒng)計(jì)分析,應(yīng)用數(shù)學(xué),計(jì)量經(jīng)濟(jì),金融分析,財(cái)經(jīng)分析,人文科學(xué),數(shù)據(jù)挖掘,人工智能,生物信息學(xué),生物制藥,全球地理科學(xué),數(shù)據(jù)可視化。
商業(yè)競(jìng)爭(zhēng)對(duì)手
SAS:(Statistical Analysis System)是SAS公司推出的一款用于數(shù)據(jù)分析和和決策支持的大型集成式模塊化軟件系統(tǒng)。
SPSS:(Statistical Product and Service Solutions)是IBM公司推出的一系列用于統(tǒng)計(jì)學(xué)分析運(yùn)算、數(shù)據(jù)挖掘、預(yù)測(cè)分析和決策支持任務(wù)的軟件產(chǎn)品及相關(guān)服務(wù)的總稱。
Matlab:(MATrix LABoratory),是MathWorks公司出品的一款商業(yè)數(shù)學(xué)軟件。MATLAB是一種用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級(jí)技術(shù)計(jì)算語言和交互式環(huán)境。
2. Hadoop介紹
Hadoop對(duì)于計(jì)算機(jī)的人,都是耳熟能說的技術(shù)了。
Hadoop是一個(gè)分布式系統(tǒng)基礎(chǔ)架構(gòu),由Apache基金會(huì)開發(fā)。用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序。充分利用集群的威力高速運(yùn)算和存儲(chǔ)。Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)(Hadoop Distributed File System),簡(jiǎn)稱HDFS。HDFS有著高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來部署在低廉的(low-cost)硬件上。而且它提供高傳輸率(high throughput)來訪問應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序。HDFS放寬了(relax)POSIX的要求(requirements)這樣可以流的形式訪問(streaming access)文件系統(tǒng)中的數(shù)據(jù)。
Hadoop的家族成員:Hive, HBase, Zookeeper, Avro, Pig, Ambari, Sqoop, Mahout, Chukwa
Hive: 是基于Hadoop的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,通過類SQL語句快速實(shí)現(xiàn)簡(jiǎn)單的MapReduce統(tǒng)計(jì),不必開發(fā)專門的MapReduce應(yīng)用,十分適合數(shù)據(jù)倉庫的統(tǒng)計(jì)分析。
Pig: 是一個(gè)基于Hadoop的大規(guī)模數(shù)據(jù)分析工具,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會(huì)把類SQL的數(shù)據(jù)分析請(qǐng)求轉(zhuǎn)換為一系列經(jīng)過優(yōu)化處理的MapReduce運(yùn)算。
HBase: 是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群。
Sqoop: 是一個(gè)用來將Hadoop和關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)相互轉(zhuǎn)移的工具,可以將一個(gè)關(guān)系型數(shù)據(jù)庫(MySQL ,Oracle ,Postgres等)中的數(shù)據(jù)導(dǎo)進(jìn)到Hadoop的HDFS中,也可以將HDFS的數(shù)據(jù)導(dǎo)進(jìn)到關(guān)系型數(shù)據(jù)庫中。
Zookeeper:是一個(gè)為分布式應(yīng)用所設(shè)計(jì)的分布的、開源的協(xié)調(diào)服務(wù),它主要是用來解決分布式應(yīng)用中經(jīng)常遇到的一些數(shù)據(jù)管理問題,簡(jiǎn)化分布式應(yīng)用協(xié)調(diào)及其管理的難度,提供高性能的分布式服務(wù)
Mahout:是基于Hadoop的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的一個(gè)分布式框架。Mahout用MapReduce實(shí)現(xiàn)了部分數(shù)據(jù)挖掘算法,解決了并行挖掘的問題。
Avro: 是一個(gè)數(shù)據(jù)序列化系統(tǒng),設(shè)計(jì)用于支持?jǐn)?shù)據(jù)密集型,大批量數(shù)據(jù)交換的應(yīng)用。Avro是新的數(shù)據(jù)序列化格式與傳輸工具,將逐步取代Hadoop原有的IPC機(jī)制
Ambari: 是一種基于Web的工具,支持Hadoop集群的供應(yīng)、管理和監(jiān)控。
Chukwa: 是一個(gè)開源的用于監(jiān)控大型分布式系統(tǒng)的數(shù)據(jù)收集系統(tǒng),它可以將各種各樣類型的數(shù)據(jù)收集成適合 Hadoop 處理的文件保存在 HDFS 中供 Hadoop 進(jìn)行各種 MapReduce 操作。
自2006年,Hadoop以MapReduce和HDFS獨(dú)立發(fā)展開始,到今年2013年不過7年時(shí)間,Hadoop的家族已經(jīng)孵化出多個(gè)Apache的頂級(jí)項(xiàng)目。特別是最近1-2年,發(fā)展速度越來越快,又融入了很多新技術(shù)(YARN, Hcatalog, Oozie, Cassandra),都有點(diǎn)讓我們都學(xué)不過來了。
前面兩章,R語言介紹和Hadoop介紹,讓我們體會(huì)到了,兩種技術(shù)在各自領(lǐng)域的強(qiáng)大。很多開發(fā)人員在計(jì)算機(jī)的角度,都會(huì)提出下面2個(gè)問題。
問題1: Hadoop的家族如此之強(qiáng)大,為什么還要結(jié)合R語言?
問題2: Mahout同樣可以做數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí),和R語言的區(qū)別是什么?
下面我嘗試著做一個(gè)解答:
問題1: Hadoop的家族如此之強(qiáng)大,為什么還要結(jié)合R語言?
a. Hadoop家族的強(qiáng)大之處,在于對(duì)大數(shù)據(jù)的處理,讓原來的不可能(TB,PB數(shù)據(jù)量計(jì)算),成為了可能。
b. R語言的強(qiáng)大之處,在于統(tǒng)計(jì)分析,在沒有Hadoop之前,我們對(duì)于大數(shù)據(jù)的處理,要取樣本,假設(shè)檢驗(yàn),做回歸,長久以來R語言都是統(tǒng)計(jì)學(xué)家專屬的工具。
c. 從a和b兩點(diǎn),我們可以看出,hadoop重點(diǎn)是全量數(shù)據(jù)分析,而R語言重點(diǎn)是樣本數(shù)據(jù)分析。 兩種技術(shù)放在一起,剛好是最長補(bǔ)短!
d. 模擬場(chǎng)景:對(duì)1PB的新聞網(wǎng)站訪問日志做分析,預(yù)測(cè)未來流量變化
d1:用R語言,通過分析少量數(shù)據(jù),對(duì)業(yè)務(wù)目標(biāo)建回歸建模,并定義指標(biāo)
d2:用Hadoop從海量日志數(shù)據(jù)中,提取指標(biāo)數(shù)據(jù)
d3:用R語言模型,對(duì)指標(biāo)數(shù)據(jù)進(jìn)行測(cè)試和調(diào)優(yōu)
這個(gè)場(chǎng)景中,R和Hadoop分別都起著非常重要的作用。以計(jì)算機(jī)開發(fā)人員的思路,所有有事情都用Hadoop去做,沒有數(shù)據(jù)建模和證明,”預(yù)測(cè)的結(jié)果”一定是有問題的。以統(tǒng)計(jì)人員的思路,所有的事情都用R去做,以抽樣方式,得到的“預(yù)測(cè)的結(jié)果”也一定是有問題的。
所以讓二者結(jié)合,是產(chǎn)界業(yè)的必然的導(dǎo)向,也是產(chǎn)界業(yè)和學(xué)術(shù)界的交集,同時(shí)也為交叉學(xué)科的人才提供了無限廣闊的想象空間。
問題2: Mahout同樣可以做數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí),和R語言的區(qū)別是什么?
a. Mahout是基于Hadoop的數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)的算法框架,Mahout的重點(diǎn)同樣是解決大數(shù)據(jù)的計(jì)算的問題。
b. Mahout目前已支持的算法包括,協(xié)同過濾,推薦算法,聚類算法,分類算法,LDA, 樸素bayes,隨機(jī)森林。上面的算法中,大部分都是距離的算法,可以通過矩陣分解后,充分利用MapReduce的并行計(jì)算框架,高效地完成計(jì)算任務(wù)。
c. Mahout的空白點(diǎn),還有很多的數(shù)據(jù)挖掘算法,很難實(shí)現(xiàn)MapReduce并行化。Mahout的現(xiàn)有模型,都是通用模型,直接用到的項(xiàng)目中,計(jì)算結(jié)果只會(huì)比隨機(jī)結(jié)果好一點(diǎn)點(diǎn)。Mahout二次開發(fā),要求有深厚的JAVA和Hadoop的技術(shù)基礎(chǔ),最好兼有 “線性代數(shù)”,“概率統(tǒng)計(jì)”,“算法導(dǎo)論” 等的基礎(chǔ)知識(shí)。所以想玩轉(zhuǎn)Mahout真的不是一件容易的事情。
d. R語言同樣提供了Mahout支持的約大多數(shù)算法(除專有算法),并且還支持大量的Mahout不支持的算法,算法的增長速度比mahout快N倍。并且開發(fā)簡(jiǎn)單,參數(shù)配置靈活,對(duì)小型數(shù)據(jù)集運(yùn)算速度非??臁?/span>
雖然,Mahout同樣可以做數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí),但是和R語言的擅長領(lǐng)域并不重合。集百家之長,在適合的領(lǐng)域選擇合適的技術(shù),才能真正地“保質(zhì)保量”做軟件。
從上一節(jié)我們看到,Hadoop和R語言是可以互補(bǔ)的,但所介紹的場(chǎng)景都是Hadoop和R語言的分別處理各自的數(shù)據(jù)。
一旦市場(chǎng)有需求,自然會(huì)有商家填補(bǔ)這個(gè)空白。
1). RHadoop
RHadoop是一款Hadoop和R語言的結(jié)合的產(chǎn)品,由RevolutionAnalytics公司開發(fā),并將代碼開源到github社區(qū)上面。RHadoop包含三個(gè)R包 (rmr,rhdfs,rhbase),分別是對(duì)應(yīng)Hadoop系統(tǒng)架構(gòu)中的,MapReduce, HDFS, HBase 三個(gè)部分。
2). RHive
RHive是一款通過R語言直接訪問Hive的工具包,是由NexR一個(gè)韓國公司研發(fā)的。
3). 重寫Mahout
用R語言重寫Mahout的實(shí)現(xiàn)也是一種結(jié)合的思路,我也做過相關(guān)的嘗試。
4).Hadoop調(diào)用R
上面說的都是R如何調(diào)用Hadoop,當(dāng)然我們也可以反相操作,打通JAVA和R的連接通道,讓Hadoop調(diào)用R的函數(shù)。但是,這部分還沒有商家做出成形的產(chǎn)品。
5. R和Hadoop在實(shí)際中的案例
R和Hadoop的結(jié)合,技術(shù)門檻還是有點(diǎn)高的。對(duì)于一個(gè)人來說,不僅要掌握Linux, Java, Hadoop, R的技術(shù),還要具備 軟件開發(fā),算法,概率統(tǒng)計(jì),線性代數(shù),數(shù)據(jù)可視化,行業(yè)背景 的一些基本素質(zhì)。
在公司部署這套環(huán)境,同樣需要多個(gè)部門,多種人才的的配合。Hadoop運(yùn)維,Hadoop算法研發(fā),R語言建模,R語言MapReduce化,軟件開發(fā),測(cè)試等等。。。
所以,這樣的案例并不太多。
展位未來
對(duì)于R和Hadoop的結(jié)合,在近幾年,肯定會(huì)生成爆發(fā)式的增長的。但由于跨學(xué)科會(huì)造成技術(shù)壁壘,人才會(huì)遠(yuǎn)遠(yuǎn)跟不上市場(chǎng)的需求。
所以,肯定會(huì)有更多的大數(shù)據(jù)工具,被發(fā)明!機(jī)會(huì)就在我們的手中,也許明天你的創(chuàng)新,就是我們追逐的方向!加油!!
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10