韓 震,孫 紅
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院, 上海 200093)
基于Hadoop的分布式平臺(tái)實(shí)現(xiàn)
韓 震,孫 紅
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院, 上海 200093)
互聯(lián)網(wǎng)的迅速發(fā)展產(chǎn)生了各種海量數(shù)據(jù),快速有效處理海量數(shù)據(jù)是云計(jì)算的目標(biāo)。Hadoop作為典型的云計(jì)算平臺(tái)可高效處理海量數(shù)據(jù)。介紹了Hadoop相關(guān)概念,包括HDFS、MapReduce等眾多子項(xiàng)目;闡述了Hadoop完全分布式平臺(tái)搭建,包括環(huán)境配置、搭建方法等;通過(guò)數(shù)據(jù)處理實(shí)驗(yàn)驗(yàn)證了Hadoop分布式平臺(tái)的有效性。
Hadoop;云計(jì)算;平臺(tái)搭建;數(shù)據(jù)處理;分布式平臺(tái)
大數(shù)據(jù)時(shí)代[1],云計(jì)算和大數(shù)據(jù)處理技術(shù)得到了快速發(fā)展。Hadoop作為流行的大數(shù)據(jù)處理平臺(tái),涵蓋了整個(gè)Hadoop家族項(xiàng)目與架構(gòu),以及關(guān)鍵技術(shù)的設(shè)計(jì)思想和工作流程,發(fā)展?jié)摿薮?。Hadoop包括分布式文件系統(tǒng)(HDFS)和MapReduce編程框架等眾多基礎(chǔ)架構(gòu)。除此之外,Hadoop使用Java語(yǔ)言編程,具有很強(qiáng)的可移植性[2]。
Hadoop是一個(gè)分布式計(jì)算平臺(tái),具有龐大的分布式計(jì)算基礎(chǔ)架構(gòu),由Apache軟件基金會(huì)開(kāi)發(fā),囊括了眾多Apache軟件基金會(huì)子項(xiàng)目,每個(gè)子項(xiàng)目可以提供配套服務(wù),以保持整個(gè)系統(tǒng)的完整性,統(tǒng)稱為Hadoop家族[3]。Hadoop家族分布如圖1所示。
從Hadoop家族架構(gòu)可看出,整個(gè)Hadoop家族包含一系列子項(xiàng)目,下面簡(jiǎn)單介紹其中幾個(gè)[4]:
Core:一組分布式系統(tǒng)及輸入輸出相關(guān)功能接口。
Avro:一種提供高效、跨語(yǔ)言RPC的數(shù)據(jù)序列系統(tǒng),持久化數(shù)據(jù)存儲(chǔ)。
MapReduce:分布式數(shù)據(jù)計(jì)算模型,安裝在大量計(jì)算機(jī)集群中工作。它繼承于Google的MapReduce,目的是實(shí)現(xiàn)多臺(tái)計(jì)算機(jī)集群并行處理數(shù)據(jù),縮短數(shù)據(jù)處理所需要的時(shí)間。
圖1 Hadoop家族分布
HDFS:分布式文件系統(tǒng),與MapReduce相似,在大型計(jì)算機(jī)集群中工作,繼承于Google的GFS,使用數(shù)據(jù)流方式訪問(wèn)數(shù)據(jù),具有更高的效率,對(duì)硬件配置要求較低。
ZooKeeper:一個(gè)分布式的、高可用性的協(xié)調(diào)服務(wù)。能夠安插分布式相關(guān)應(yīng)用,配置一些如分布式鎖的功能。
HBase:一種分布式數(shù)據(jù)庫(kù),屬于一個(gè)列式存儲(chǔ)數(shù)據(jù)庫(kù),把HDFS當(dāng)成基礎(chǔ)單元,能夠通過(guò)MapReduce操作計(jì)算和隨時(shí)讀取。繼承于Google的bigtable??梢噪S時(shí)讀寫(xiě)、隨機(jī)讀取大規(guī)模數(shù)據(jù)集。
Hadoop平臺(tái)分3種運(yùn)行模式,分別是單機(jī)模式、偽分布模式和完全分布模式。其中,單機(jī)模式安裝非常簡(jiǎn)單,僅做一些基本操作即可,一般僅限于調(diào)試,實(shí)際中基本不使用。偽分布模式在計(jì)算機(jī)上完成所有操作,在單一的節(jié)點(diǎn)上同時(shí)啟動(dòng)namenode、datanode、jobtracker、tasktracker、secondary namenode等5個(gè)進(jìn)程,并將在此節(jié)點(diǎn)上模擬分布式運(yùn)行各個(gè)節(jié)點(diǎn)。完全分布模式就是通常所說(shuō)的Hadoop集群,由若干個(gè)節(jié)點(diǎn)構(gòu)成,每個(gè)節(jié)點(diǎn)在系統(tǒng)中按照自己的定位完成相應(yīng)的任務(wù)[5]。本文需要在完全分布式的Hadoop集群上完成整個(gè)實(shí)驗(yàn)。集群中的節(jié)點(diǎn)服務(wù)器都由虛擬機(jī)實(shí)現(xiàn),每個(gè)虛擬機(jī)裝載了Linux系統(tǒng),其中,Linux系統(tǒng)版本是Ubuntu 14.04,Java開(kāi)發(fā)版本為JDK-1.8.0_45, Hadoop版本是Hadoop-1.2.1。本實(shí)驗(yàn)中搭建的Hadoop集群由9個(gè)節(jié)點(diǎn)組成,包括一臺(tái)NameNode與Jobtracter節(jié)點(diǎn),8臺(tái)DataNode與Tasktracker節(jié)點(diǎn),具體每個(gè)節(jié)點(diǎn)的名稱、IP地址如表1所示。
表1 集群節(jié)點(diǎn)配置
Hadoop平臺(tái)搭建分為L(zhǎng)inux環(huán)境配置、Hadoop節(jié)點(diǎn)配置兩個(gè)部分,下面分別說(shuō)明。
2.1 Linux環(huán)境配置
一般而言,Ubuntu的Linux系統(tǒng)自帶JDK。在本實(shí)驗(yàn)中,將重新安裝最新版本的JDK-1.8.0_45。將Java環(huán)境變量全部配置完成以后,在命令終端里輸入java -version命令查看是否安裝成功及版本信息。
修改每個(gè)節(jié)點(diǎn)的主機(jī)名和IP地址,把主節(jié)點(diǎn)命名為master,從節(jié)點(diǎn)命名為slave01、slave02等,一直到slave08。其中,每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的IP地址依次為192.168.1.101-192.168.1.109,機(jī)器名稱和IP的配置映射關(guān)系在Linux系統(tǒng)中etc路徑下的hosts文件中增加。
2.2 Hadoop節(jié)點(diǎn)配置
2.2.1 安裝Hadoop
Hadoop安裝包本質(zhì)上是一個(gè)壓縮文件,它的安裝十分方便,只需將它解壓并且配置相關(guān)的文件信息即可直接使用[6]。Hadoop壓縮包可從Apache的官方網(wǎng)站上獲得,該網(wǎng)包括了目前發(fā)布的所有版本,下載網(wǎng)址為http://hadoop.apache.org/releases.html。Hadoop發(fā)行的版本種類很多,本文選用的版本為Hadoop-1.2.1。下載完成后,把壓縮包解壓到/home/Hadoop目錄下,之后在etc目錄下的profile中進(jìn)行相關(guān)環(huán)境變量修改。
2.2.2 配置各節(jié)點(diǎn)文件
配置core-site.xml文件:將core-site.xml的相關(guān)參數(shù)進(jìn)行修改,相關(guān)代碼如下:
其中,參數(shù)hadoop.tmp.dir表示Hadoop運(yùn)行時(shí)臨時(shí)文件的存放目錄,fs.default.name表示HDFS的namenode通信地址,即namenode的主機(jī)名或IP地址及端口。
配置mapred-site.xml文件:將mapred-site.xml的相關(guān)參數(shù)進(jìn)行修改,相關(guān)代碼如下:
在該文件中主要修改mapred.job.tracker屬性,它所表示的是Jobtracker所在的主機(jī)名稱或者IP地址及端口。
配置hdfs-site.xml文件:將hdfs-site.xml的相關(guān)參數(shù)進(jìn)行修改,代碼如下所示:
在該文件中主要修改dfs.replication這一屬性,它表示HDFS創(chuàng)建的副本量。在這里,本文設(shè)置副本數(shù)量為3。
配置master和slaves文件:在master文件中,添加master節(jié)點(diǎn)的IP地址;在slaves文件中,添加所有slave節(jié)點(diǎn)的IP地址。
2.2.3 將配置好的Hadoop復(fù)制到其它節(jié)點(diǎn)
本實(shí)驗(yàn)共有9個(gè)節(jié)點(diǎn),所以可以通過(guò)命令操作,將配置好的文件復(fù)制到其它節(jié)點(diǎn)。下面列舉復(fù)制到其中兩個(gè)節(jié)點(diǎn)的命令:
scp -r /root/slave01:/my/hadoop
scp -r /root/slave02:/my/hadoop
2.2.4 配置SSH
為了提高效率,避免每次使用和停止Hadoop時(shí)都要輸入密碼,需要設(shè)置節(jié)點(diǎn)之間SSH免密碼連接,即從Master與Slave之間和Slave節(jié)點(diǎn)之間是免密碼連入的[7]。
在每個(gè)節(jié)點(diǎn)的終端上輸入以下指令來(lái)生成公私密鑰:
ssh -keygen - t rsa - P ‘’ -f ~/.ssh/id_rsa
并將公鑰文件id_rsa.pub通過(guò)以下命令追加到authorized_keys文件中:
cat id_rsa.pub >> authorized_keys
對(duì)每個(gè)節(jié)點(diǎn)進(jìn)行以上操作,實(shí)現(xiàn)當(dāng)前用戶不用密碼登陸本機(jī)。同時(shí),本文將所有節(jié)點(diǎn)的公鑰與私鑰放置在一個(gè)文件內(nèi),并將這個(gè)文件發(fā)送到各個(gè)節(jié)點(diǎn),從而實(shí)現(xiàn)每個(gè)節(jié)點(diǎn)之間的SSH免密碼互連。
2.2.5 格式化并啟動(dòng)Hadoop
完成了上述所有配置操作后,在命令終端敲打cd命令將路徑切換到hadoop/bin路徑下,輸入如下指令來(lái)格式化HDFS[8]:
hadoop namenode -format
格式化完畢輸入指令啟動(dòng)Hadoop。
Start-all.sh
此時(shí),可使用jps命令查看運(yùn)行進(jìn)程來(lái)確認(rèn)Hadoop啟動(dòng)成功,在master節(jié)點(diǎn)和slave01-slave08節(jié)點(diǎn)執(zhí)行jps命令,可得到如表2所示的運(yùn)行進(jìn)程。
表2 master與slave運(yùn)行進(jìn)程
通過(guò)50070和50030端口,可以查看NameNode節(jié)點(diǎn)正在運(yùn)行的任務(wù)狀態(tài),如圖2所示。根據(jù)顯示的各個(gè)節(jié)點(diǎn)進(jìn)程運(yùn)行情況,可以看出整個(gè)集群節(jié)點(diǎn)運(yùn)行已經(jīng)成功,實(shí)現(xiàn)了Hadoop分布式平臺(tái)。
圖2 NameNode運(yùn)轉(zhuǎn)狀態(tài)
Hadoop安裝目錄下都會(huì)自帶eclipse插件。在Hadoop-1.2.1版本中,插件需要經(jīng)過(guò)編譯重新生成。編譯涉及一些與系統(tǒng)有關(guān)的變量改寫(xiě),例如jdk版本、系統(tǒng)版本等,本文不再作詳細(xì)贅述。
將編譯好的jar包插件放到eclipse目錄下的目錄中,并在eclipse完成調(diào)試。應(yīng)用程序選用Hadoop源碼中的
WordCount實(shí)例,這是Hadoop自帶的一個(gè)統(tǒng)計(jì)詞頻的實(shí)例程序。新建myMapReduce工程,與之前建立好的Hadoop工程關(guān)聯(lián),并將WordCount.Java復(fù)制至剛剛建立的myMapReduce項(xiàng)目。然后上傳測(cè)試文檔至HDFS中,開(kāi)始運(yùn)行程序,運(yùn)行結(jié)果如圖3所示。
從圖3可以看到任務(wù)執(zhí)行成功情況、輸入輸出行數(shù)、開(kāi)始及結(jié)束時(shí)間等信息??梢则?yàn)證本文搭建的Hadoop集群可以正常工作并執(zhí)行MapReduce程序。
大數(shù)據(jù)時(shí)代已經(jīng)到來(lái),并行計(jì)算與分布式計(jì)算技術(shù)成為新興的、應(yīng)用廣泛的數(shù)據(jù)處理技術(shù)。Hadoop作為典型的云計(jì)算平臺(tái),擁有巨大的發(fā)展?jié)摿εc良好的應(yīng)用前景。本文詳細(xì)描述了Hadoop完全分布式集群的搭建流程,實(shí)現(xiàn)了Hadoop集群并將統(tǒng)計(jì)詞頻程序應(yīng)用在集群上,實(shí)驗(yàn)表明本文系統(tǒng)可以進(jìn)行大數(shù)據(jù)處理。下一步工作是利用yarn資源管理器來(lái)實(shí)現(xiàn)Hadoop集群資源的合理分配,并進(jìn)行相關(guān)算法應(yīng)用。
[1] CHAIKEN R, JENKINS B. Easy and efficient parallel processing of massive data sets [J]. Proceedings of the VLDB Endowment,2008(2):1265-1276.
[2] DEAN J, GHEMAWATS. MapReduce:simplified data processing on large clusters [J]. Communication of the ACM, 2008,51(1):107-113.
[3] 楊浩彬,吳文鋒.使用VMware Esxi和Hadoop進(jìn)行大數(shù)據(jù)平臺(tái)的搭建研究[J].信息技術(shù)與信息化,2015,10(7):185-187.
[4] 孟小峰, 杜治娟. 大數(shù)據(jù)融合研究:?jiǎn)栴}與挑戰(zhàn)[J].計(jì)算機(jī)研究與發(fā)展, 2016, 53(2):231-246.
[5] 李筱.面向異構(gòu)多核系統(tǒng)的并行計(jì)算模型和調(diào)度算法研究[D].長(zhǎng)沙:湖南大學(xué),2012.
[6] 徐煥良,翟璐,薛衛(wèi),等. Hadoop平臺(tái)中MapReduce調(diào)度算法研究[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2015, 32(5):1-6.
[7] 嚴(yán)霄鳳,張德馨. 大數(shù)據(jù)研究[J].計(jì)算機(jī)技術(shù)與發(fā)展, 2013,23(4):168 -172.
[8] 范素娟,田軍峰. 基于Hadoop的云計(jì)算平臺(tái)研究與實(shí)現(xiàn)[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2016,26(7):127-132.
(責(zé)任編輯:杜能鋼)
國(guó)家自然科學(xué)基金項(xiàng)目(61472256,61170277);上海市教委科研創(chuàng)新重點(diǎn)項(xiàng)目(12zz137);滬江基金項(xiàng)目(C14002)
韓震(1993-),男,安徽滁州人,上海理工大學(xué)光電信息與計(jì)算機(jī)工程學(xué)院碩士研究生,研究方向?yàn)榇髷?shù)據(jù)與云計(jì)算;孫紅(1964-),女,上海人,博士,上海理工大學(xué)光電信息與計(jì)算機(jī)工程學(xué)院副教授、碩士生導(dǎo)師,研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)通信與云計(jì)算、控制科學(xué)與工程、模式識(shí)別與智能系統(tǒng)。
10.11907/rjdk.162889
TP319
A
1672-7800(2017)003-0056-03