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