韓 震,孫 紅
(上海理工大學 光電信息與計算機工程學院, 上海 200093)
基于Hadoop的分布式平臺實現
韓 震,孫 紅
(上海理工大學 光電信息與計算機工程學院, 上海 200093)
互聯網的迅速發展產生了各種海量數據,快速有效處理海量數據是云計算的目標。Hadoop作為典型的云計算平臺可高效處理海量數據。介紹了Hadoop相關概念,包括HDFS、MapReduce等眾多子項目;闡述了Hadoop完全分布式平臺搭建,包括環境配置、搭建方法等;通過數據處理實驗驗證了Hadoop分布式平臺的有效性。
Hadoop;云計算;平臺搭建;數據處理;分布式平臺
大數據時代[1],云計算和大數據處理技術得到了快速發展。Hadoop作為流行的大數據處理平臺,涵蓋了整個Hadoop家族項目與架構,以及關鍵技術的設計思想和工作流程,發展潛力巨大。Hadoop包括分布式文件系統(HDFS)和MapReduce編程框架等眾多基礎架構。除此之外,Hadoop使用Java語言編程,具有很強的可移植性[2]。
Hadoop是一個分布式計算平臺,具有龐大的分布式計算基礎架構,由Apache軟件基金會開發,囊括了眾多Apache軟件基金會子項目,每個子項目可以提供配套服務,以保持整個系統的完整性,統稱為Hadoop家族[3]。Hadoop家族分布如圖1所示。
從Hadoop家族架構可看出,整個Hadoop家族包含一系列子項目,下面簡單介紹其中幾個[4]:
Core:一組分布式系統及輸入輸出相關功能接口。
Avro:一種提供高效、跨語言RPC的數據序列系統,持久化數據存儲。
MapReduce:分布式數據計算模型,安裝在大量計算機集群中工作。它繼承于Google的MapReduce,目的是實現多臺計算機集群并行處理數據,縮短數據處理所需要的時間。

圖1 Hadoop家族分布
HDFS:分布式文件系統,與MapReduce相似,在大型計算機集群中工作,繼承于Google的GFS,使用數據流方式訪問數據,具有更高的效率,對硬件配置要求較低。
ZooKeeper:一個分布式的、高可用性的協調服務。能夠安插分布式相關應用,配置一些如分布式鎖的功能。
HBase:一種分布式數據庫,屬于一個列式存儲數據庫,把HDFS當成基礎單元,能夠通過MapReduce操作計算和隨時讀取。繼承于Google的bigtable??梢噪S時讀寫、隨機讀取大規模數據集。
Hadoop平臺分3種運行模式,分別是單機模式、偽分布模式和完全分布模式。其中,單機模式安裝非常簡單,僅做一些基本操作即可,一般僅限于調試,實際中基本不使用。偽分布模式在計算機上完成所有操作,在單一的節點上同時啟動namenode、datanode、jobtracker、tasktracker、secondary namenode等5個進程,并將在此節點上模擬分布式運行各個節點。完全分布模式就是通常所說的Hadoop集群,由若干個節點構成,每個節點在系統中按照自己的定位完成相應的任務[5]。本文需要在完全分布式的Hadoop集群上完成整個實驗。集群中的節點服務器都由虛擬機實現,每個虛擬機裝載了Linux系統,其中,Linux系統版本是Ubuntu 14.04,Java開發版本為JDK-1.8.0_45, Hadoop版本是Hadoop-1.2.1。本實驗中搭建的Hadoop集群由9個節點組成,包括一臺NameNode與Jobtracter節點,8臺DataNode與Tasktracker節點,具體每個節點的名稱、IP地址如表1所示。

表1 集群節點配置
Hadoop平臺搭建分為Linux環境配置、Hadoop節點配置兩個部分,下面分別說明。
2.1 Linux環境配置
一般而言,Ubuntu的Linux系統自帶JDK。在本實驗中,將重新安裝最新版本的JDK-1.8.0_45。將Java環境變量全部配置完成以后,在命令終端里輸入java -version命令查看是否安裝成功及版本信息。
修改每個節點的主機名和IP地址,把主節點命名為master,從節點命名為slave01、slave02等,一直到slave08。其中,每個節點對應的IP地址依次為192.168.1.101-192.168.1.109,機器名稱和IP的配置映射關系在Linux系統中etc路徑下的hosts文件中增加。
2.2 Hadoop節點配置
2.2.1 安裝Hadoop
Hadoop安裝包本質上是一個壓縮文件,它的安裝十分方便,只需將它解壓并且配置相關的文件信息即可直接使用[6]。Hadoop壓縮包可從Apache的官方網站上獲得,該網包括了目前發布的所有版本,下載網址為http://hadoop.apache.org/releases.html。Hadoop發行的版本種類很多,本文選用的版本為Hadoop-1.2.1。下載完成后,把壓縮包解壓到/home/Hadoop目錄下,之后在etc目錄下的profile中進行相關環境變量修改。
2.2.2 配置各節點文件
配置core-site.xml文件:將core-site.xml的相關參數進行修改,相關代碼如下:
其中,參數hadoop.tmp.dir表示Hadoop運行時臨時文件的存放目錄,fs.default.name表示HDFS的namenode通信地址,即namenode的主機名或IP地址及端口。
配置mapred-site.xml文件:將mapred-site.xml的相關參數進行修改,相關代碼如下:
在該文件中主要修改mapred.job.tracker屬性,它所表示的是Jobtracker所在的主機名稱或者IP地址及端口。
配置hdfs-site.xml文件:將hdfs-site.xml的相關參數進行修改,代碼如下所示:
在該文件中主要修改dfs.replication這一屬性,它表示HDFS創建的副本量。在這里,本文設置副本數量為3。
配置master和slaves文件:在master文件中,添加master節點的IP地址;在slaves文件中,添加所有slave節點的IP地址。
2.2.3 將配置好的Hadoop復制到其它節點
本實驗共有9個節點,所以可以通過命令操作,將配置好的文件復制到其它節點。下面列舉復制到其中兩個節點的命令:
scp -r /root/slave01:/my/hadoop
scp -r /root/slave02:/my/hadoop
2.2.4 配置SSH
為了提高效率,避免每次使用和停止Hadoop時都要輸入密碼,需要設置節點之間SSH免密碼連接,即從Master與Slave之間和Slave節點之間是免密碼連入的[7]。
在每個節點的終端上輸入以下指令來生成公私密鑰:
ssh -keygen - t rsa - P ‘’ -f ~/.ssh/id_rsa
并將公鑰文件id_rsa.pub通過以下命令追加到authorized_keys文件中:
cat id_rsa.pub >> authorized_keys
對每個節點進行以上操作,實現當前用戶不用密碼登陸本機。同時,本文將所有節點的公鑰與私鑰放置在一個文件內,并將這個文件發送到各個節點,從而實現每個節點之間的SSH免密碼互連。
2.2.5 格式化并啟動Hadoop
完成了上述所有配置操作后,在命令終端敲打cd命令將路徑切換到hadoop/bin路徑下,輸入如下指令來格式化HDFS[8]:
hadoop namenode -format
格式化完畢輸入指令啟動Hadoop。
Start-all.sh
此時,可使用jps命令查看運行進程來確認Hadoop啟動成功,在master節點和slave01-slave08節點執行jps命令,可得到如表2所示的運行進程。

表2 master與slave運行進程
通過50070和50030端口,可以查看NameNode節點正在運行的任務狀態,如圖2所示。根據顯示的各個節點進程運行情況,可以看出整個集群節點運行已經成功,實現了Hadoop分布式平臺。

圖2 NameNode運轉狀態
Hadoop安裝目錄下都會自帶eclipse插件。在Hadoop-1.2.1版本中,插件需要經過編譯重新生成。編譯涉及一些與系統有關的變量改寫,例如jdk版本、系統版本等,本文不再作詳細贅述。
將編譯好的jar包插件放到eclipse目錄下的目錄中,并在eclipse完成調試。應用程序選用Hadoop源碼中的
WordCount實例,這是Hadoop自帶的一個統計詞頻的實例程序。新建myMapReduce工程,與之前建立好的Hadoop工程關聯,并將WordCount.Java復制至剛剛建立的myMapReduce項目。然后上傳測試文檔至HDFS中,開始運行程序,運行結果如圖3所示。
從圖3可以看到任務執行成功情況、輸入輸出行數、開始及結束時間等信息??梢则炞C本文搭建的Hadoop集群可以正常工作并執行MapReduce程序。
大數據時代已經到來,并行計算與分布式計算技術成為新興的、應用廣泛的數據處理技術。Hadoop作為典型的云計算平臺,擁有巨大的發展潛力與良好的應用前景。本文詳細描述了Hadoop完全分布式集群的搭建流程,實現了Hadoop集群并將統計詞頻程序應用在集群上,實驗表明本文系統可以進行大數據處理。下一步工作是利用yarn資源管理器來實現Hadoop集群資源的合理分配,并進行相關算法應用。
[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].信息技術與信息化,2015,10(7):185-187.
[4] 孟小峰, 杜治娟. 大數據融合研究:問題與挑戰[J].計算機研究與發展, 2016, 53(2):231-246.
[5] 李筱.面向異構多核系統的并行計算模型和調度算法研究[D].長沙:湖南大學,2012.
[6] 徐煥良,翟璐,薛衛,等. Hadoop平臺中MapReduce調度算法研究[J]. 計算機應用與軟件, 2015, 32(5):1-6.
[7] 嚴霄鳳,張德馨. 大數據研究[J].計算機技術與發展, 2013,23(4):168 -172.
[8] 范素娟,田軍峰. 基于Hadoop的云計算平臺研究與實現[J]. 計算機技術與發展, 2016,26(7):127-132.
(責任編輯:杜能鋼)
國家自然科學基金項目(61472256,61170277);上海市教委科研創新重點項目(12zz137);滬江基金項目(C14002)
韓震(1993-),男,安徽滁州人,上海理工大學光電信息與計算機工程學院碩士研究生,研究方向為大數據與云計算;孫紅(1964-),女,上海人,博士,上海理工大學光電信息與計算機工程學院副教授、碩士生導師,研究方向為計算機網絡通信與云計算、控制科學與工程、模式識別與智能系統。
10.11907/rjdk.162889
TP319
A
1672-7800(2017)003-0056-03