范素娟,田軍鋒
(1.河南大學(xué) 信息化管理辦公室,河南 開封 475004;2.河南大學(xué) 計算機與信息工程學(xué)院,河南 開封 475004)
基于Hadoop的云計算平臺研究與實現(xiàn)
范素娟1,田軍鋒2
(1.河南大學(xué) 信息化管理辦公室,河南 開封 475004;2.河南大學(xué) 計算機與信息工程學(xué)院,河南 開封 475004)
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)量正以指數(shù)級增長且規(guī)模日漸龐大。面對正在增長的海量數(shù)據(jù),傳統(tǒng)的數(shù)據(jù)處理方法存在效率低下等諸多缺點。人們需要一種新的技術(shù)思想來解決這些問題。因此,云計算的思想被提出。云計算是一種新興的計算模型,是分布式計算技術(shù)的一種。而Hadoop作為一個開源的分布式平臺是當(dāng)前最為流行的云計算平臺實現(xiàn)之一,被用于高效地處理海量數(shù)據(jù)。為了提高對海量數(shù)據(jù)處理的效率,文中首先簡要分析了云計算的概念和Hadoop主要組件的工作流程,然后詳細(xì)介紹了基于Hadoop的云計算平臺配置方法和實現(xiàn)過程,并對云平臺的搭建過程中遇到的典型問題進行了總結(jié)闡述。最后通過實驗證明,該平臺可以有效地完成分布式數(shù)據(jù)處理任務(wù)。
Hadoop;HDFS;MapReduce;云計算
云計算[1]是一種新興的計算模型,它是分布式計算、并行計算、虛擬化等傳統(tǒng)計算機和網(wǎng)絡(luò)技術(shù)發(fā)展融合的產(chǎn)物。其最基本的概念,是通過網(wǎng)絡(luò)將龐大的計算處理程序自動分拆成無數(shù)個較小的子程序,再交由多部服務(wù)器所組成的龐大系統(tǒng),經(jīng)搜尋、計算分析之后將處理結(jié)果回傳給用戶。通過這項技術(shù),網(wǎng)絡(luò)服務(wù)提供者可以在數(shù)秒之內(nèi)處理數(shù)以千萬計甚至億計的信息,達到和“超級計算機”同樣強大效能的網(wǎng)絡(luò)服務(wù)。目前有眾多的云計算模型[2-3],但大部分屬于商業(yè)模型,而Hadoop作為Apache基金會下的開源云計算模型,實現(xiàn)了包括分布式文件系統(tǒng)(HDFS)和MapReduce框架在內(nèi)的云計算軟件平臺的基礎(chǔ)架構(gòu),并且使用Java語言編寫,可移植性強,在很多大型網(wǎng)站上都得到了應(yīng)用。其已成為企業(yè)和個人進行云計算應(yīng)用和研究[4]的標(biāo)準(zhǔn)平臺。
Hadoop[5]是Apache開源組織的一個分布式計算開源框架,其最核心的設(shè)計是MapReduce和HDFS(Hadoop Distributed File System)。簡言之MapReduce就是任務(wù)的分解與結(jié)果的匯總,HDFS為分布式計算存儲提供了底層支持。
Hadoop的優(yōu)勢不但在于它的開源,而且還具有如下一些特點:
(1)高可靠性:HDFS的備份恢復(fù)機制及MapReduce的任務(wù)監(jiān)控保證了分布式處理的可靠性。
(2)高擴展性:Hadoop是在可用的計算機集簇間分配數(shù)據(jù)并完成計算任務(wù)的,這些集簇可以方便地擴展到數(shù)以千計的節(jié)點中。
(3)高效性:通過分發(fā)數(shù)據(jù),Hadoop可以在數(shù)據(jù)所在的節(jié)點上并行處理,因此處理速度非???。
(4)高容錯性:Hadoop能夠自動維護數(shù)據(jù)的多個副本,并且可自動將失敗的任務(wù)重新分配。
(5)低成本:Hadoop依賴于社區(qū)服務(wù)器,在任何普通的PC上安裝配置Hadoop集群,都可以對海量的數(shù)據(jù)進行高效處理[6]。
1.1 分布式文件系統(tǒng)
HDFS[7]是Hadoop中數(shù)據(jù)存儲管理的基礎(chǔ)。它具有高吞吐率、高容錯性、高擴展性和高可靠性等特點,為海量數(shù)據(jù)存儲提供了良好的保障和便利,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用[8]。其體系結(jié)構(gòu)如圖1所示。
圖1 HDFS體系結(jié)構(gòu)
HDFS采用master/slave架構(gòu)。一個HDFS集群由一個NameNode和多個DataNode組成。其中NameNode作為主服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的命名空間和客戶端對文件的訪問。集群中的DataNode管理它所在節(jié)點上的數(shù)據(jù)存儲。HDFS對外公開文件系統(tǒng)的命名空間,用戶能夠以文件的形式在上面存儲數(shù)據(jù)。從內(nèi)部看,一個文件其實被分成若干個數(shù)據(jù)塊(Block),這些Block存儲在一組DataNode上。NameNode執(zhí)行文件系統(tǒng)的命名空間操作并負(fù)責(zé)確定Block到具體DataNode節(jié)點的映射。DataNode負(fù)責(zé)處理文件系統(tǒng)的讀寫請求,在NameNode的統(tǒng)一調(diào)度下進行Block的創(chuàng)建、復(fù)制和刪除。
1.2 MapReduce編程模型
MapReduce[9]是一種用于處理大規(guī)模數(shù)據(jù)集并行運算的編程模型[10-11]。其處理數(shù)據(jù)的過程主要分成兩個階段:Map階段和Reduce階段。先執(zhí)行Map階段,再執(zhí)行Reduce階段。用戶在使用該模型時,可根據(jù)一定的編程規(guī)則來分別實現(xiàn)Map和Reduce函數(shù),之后MapReduce會自動地對任務(wù)進行分割從而實現(xiàn)并行執(zhí)行。MapReduce模型如圖2所示。
圖2 MapReduce模型
MapReduce過程在正式執(zhí)行Map函數(shù)前,首先把輸入文件數(shù)據(jù)分成M份數(shù)據(jù)塊文件;然后Master服務(wù)器調(diào)度不同的Worker服務(wù)器進行Map過程,不同的Map之間是互相獨立且高度并行的,它以
文中云平臺搭建所用的服務(wù)器均為生產(chǎn)環(huán)境里的虛擬機,基本配置:CPU(Intel(R) Xeon(R) CPU E5-2660 v2 @ 2.20 GHz 2.20 GHz)、內(nèi)存(4 GB)、硬盤(30 GB,容量可根據(jù)需要增加)。這里主要介紹在Linux操作系統(tǒng)下安裝配置Hadoop的方法,所用操作系統(tǒng)版本為Red Hat Enterprise Linux Server release 6.1(32位),Java版本為1.7.0_79,Hadoop[12]版本為2.4.0。安裝的主要步驟如下所述。
2.1 網(wǎng)絡(luò)配置
集群中包括4個節(jié)點:1個master和3個slave。所有節(jié)點處于同一VLAN內(nèi),可以相互ping通,并且四個節(jié)點有一個相同的用戶Hadoop。master節(jié)點主要配置NameNode和JobTracker的角色,負(fù)責(zé)總管分布式數(shù)據(jù)和分解任務(wù)的執(zhí)行;3個salve節(jié)點配置DataNode和TaskTracker的角色,負(fù)責(zé)分布式數(shù)據(jù)存儲以及任務(wù)的執(zhí)行。
在Linux系統(tǒng)的安裝過程中配置好各節(jié)點的主機名、IP及Hadoop用戶的創(chuàng)建。然后是配置各節(jié)點的hosts文件?!?etc/hosts”文件是用來配置主機將用的DNS服務(wù)器信息,為了方便節(jié)點間通過節(jié)點名稱來訪問,分別在每個節(jié)點的“/etc/hosts”文件中添加各節(jié)點的IP地址和主機名的對應(yīng)信息,格式如下所示:
172.31.0.250 master
172.31.0.251 slave1
172.31.0.252 slave2
172.31.0.253 slave3
2.2 SSH無密碼驗證配置
Hadoop集群的各個節(jié)點之間需要進行數(shù)據(jù)的訪問,如果Hadoop對每個節(jié)點的訪問均需要進行驗證,其效率將會大大降低,所以需要配置SSH免密碼的方法直接遠程連入被訪問節(jié)點,這樣將大大提高訪問效率。所有節(jié)點都用Hadoop用戶登陸進行配置。
(1)公私密鑰的生成。
每個節(jié)點分別產(chǎn)生公私密鑰[13],并將公鑰文件復(fù)制成authorized_keys文件:
[hadoop@master ~]$ ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_dsa
[hadoop@master .ssh]$ cat id_dsa.pub >> authorized_keys
(2)單機回環(huán)SSH免密碼登錄測試。
首先將“~/.ssh”目錄下的所有文件權(quán)限設(shè)置為600,然后在單機節(jié)點上用ssh進行登錄。如當(dāng)前目錄變?yōu)椤?,則表示操作成功。輸入命令exit注銷退出,當(dāng)前目錄重新回到“~/.ssh”。單機回環(huán)SSH登錄及注銷成功,將為后續(xù)跨子節(jié)點SSH遠程免密碼登錄作好準(zhǔn)備。
[hadoop@master .ssh]$ ssh localhost
(3)讓主節(jié)點能通過SSH免密碼登錄三個子節(jié)點。
為實現(xiàn)這個功能,三個slave節(jié)點的公鑰文件中必須要包含主節(jié)點的公鑰信息:
[hadoop@slave1 .ssh]$ scp hadoop@master:~/.ssh/id_dsa.pub ./master_dsa.pub
[hadoop@slave1 .ssh]$ cat master_dsa.pub >> authorized_keys
首先slave1節(jié)點通過scp命令遠程登錄master節(jié)點,并復(fù)制master的公鑰文件到當(dāng)前的目錄下,這一過程需要密碼驗證。接著,將master節(jié)點的公鑰文件追加至authorized_keys文件中,通過這步操作,master節(jié)點就可以通過ssh遠程免密碼連接slave1節(jié)點了。在master節(jié)點中操作如下:
[hadoop@master ~]$ ssh slave1
子節(jié)點首次連接時需要輸入yes確認(rèn)連接,連接后注銷退出至master節(jié)點。
下次再執(zhí)行連接命令時,master就可以免密碼直接登錄至子節(jié)點了。
(4)讓子節(jié)點能通過SSH免密碼登錄主節(jié)點。
[hadoop@master .ssh]$ scp hadoop@slave1:~/.ssh/id_dsa.pub ./slave1_dsa.pub
[hadoop@master .ssh]$ cat slave1_dsa.pub >> authorized_keys
[hadoop@master .ssh]$ rm ./slave1_dsa.pub
用同樣的方法配置另外兩個子節(jié)點。至此,master和每個slave能夠相互無密碼驗證登錄。
2.3 Java環(huán)境配置
所有節(jié)點上都要安裝JDK,現(xiàn)在就先在master節(jié)點安裝,然后其他節(jié)點按照步驟重復(fù)進行即可。安裝JDK以及配置環(huán)境變量,需要以root的身份進行。
(1)先卸載服務(wù)器自帶的JDK軟件包。
[root@master ~] # java -version
[root@master ~] # rpm -qa | grep jdk
[root@master ~] # rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.39.1.9.7.e16.i686
首先查看服務(wù)器當(dāng)前的JDK軟件版本,然后執(zhí)行卸載命令卸載服務(wù)器自帶的版本。
(2)上傳JDK安裝文件并執(zhí)行安裝。
創(chuàng)建JDK安裝目錄“/usr/java”,將JDK安裝文件上傳到該目錄并安裝。如果“/usr/java”下面出現(xiàn)一個名為“jdk1.7.0_79”的文件夾,說明JDK安裝結(jié)束,刪除JDK安裝文件。
[root@master ~] # mkdir /usr/java
[root@master ~] # rpm -ivh /usr/java/jdk-7u79-linux-i586.rpm
[root@master ~] # rm -f /usr/java/jdk-7u79-linux-i586.rpm
(3)配置環(huán)境變量。
編輯“/etc/profile”文件,在末尾添加如下內(nèi)容:
export JAVA_HOME=/usr/java/jdk1.7.0_79
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
然后執(zhí)行source命令使配置生效并查看當(dāng)前的Java版本,確認(rèn)是所安裝的版本。
[root@master ~] # source /etc/profile
[root@master ~] # java -version
2.4 Hadoop集群配置
所有節(jié)點都要安裝Hadoop,先在master節(jié)點上安裝,然后其他節(jié)點按照相同步驟進行安裝配置。下面以root的身份進行安裝和配置Hadoop。
(1)上傳并解壓Hadoop安裝包。
上傳并解壓Hadoop安裝包到“/usr”目錄下,安裝完成后刪除,然后把“/usr/hadoop-2.4.0”的讀權(quán)限分配給Hadoop用戶:
[root@master usr] # tar -zxvf hadoop-2.4.0.tar.gz
[root@master usr] # rm -rf hadoop-2.4.0.tar.gz
[root@master usr] # chown -R hadoop:hadoop hadoop-2.4.0/
在“/usr/hadoop-2.4.0”目錄下面分別創(chuàng)建tmp,dfs/name,dfs/data文件夾,用于存放命名空間以及數(shù)據(jù)信息,并將所建文件夾權(quán)限分配給Hadoop用戶。
[root@master hadoop-2.4.0] # mkdir /usr/hadoop-2.4.0/tmp
[root@master ~] # mkdir -p /usr/hadoop-2.4.0/dfs/name
[root@master ~] # mkdir -p /usr/hadoop-2.4.0/dfs/data
[root@master ~] # chown -R hadoop:hadoop /usr/hadoop-2.4.0/tmp
[root@master ~] # chown -R hadoop:hadoop /usr/hadoop-2.4.0/dfs
(2)配置文件“/etc/profile”。
在文件末尾添加如下信息,并執(zhí)行source命令使配置生效。
export HADOOP_HOME=/usr/hadoop-2.4.0
export PATH=$PATH:$HADOOP_HOME/bin
(3)配置文件hadoop-env.sh和yarn-env.sh。
分別添加Java路徑信息。注意:步驟(3)~(8)所配置文件均在“/usr/hadoop-2.4.0/etc/hadoop/”目錄下。
export JAVA_HOME=/usr/java/jdk1.7.0_79
(4)配置文件slaves,添加三個子節(jié)點的主機名:
slave1、slave2、slave3。
(5)配置文件core-site.xml。
在文件末尾的configuration節(jié)點添加如下屬性:
(6)配置文件hdfs-site.xml,格式同步驟(5)。注意:步驟(6)~(8)省略了
(7)配置文件yarn-site.xml,格式同步驟(5)。
(8)配置文件mapred-site.xml。
文件mapred-site.xml從mapred-site.xml.template復(fù)制而來,格式同步驟(5)。
(9)在剩余節(jié)點上安裝配置Hadoop。
拷貝Hadoop安裝目錄到其他節(jié)點,并分別配置各節(jié)點的“/etc/profile”文件。注意:“/usr/hadoop-2.4.0/”目錄下所有文件權(quán)限均為hadoop:hadoop。
[root@master ~] # scp -r /usr/hadoop-2.4.0 slave1:/usr/
[root@slave1 ~] $chown -R hadoop:hadoop /usr/hadoop-2.4.0/
2.5 啟動及驗證
(1)格式化HDFS文件系統(tǒng)。
在master上使用用戶Hadoop進行操作。只要出現(xiàn)類似“Storage directory /usr/hadoop-2.4.0/dfs/name has been successfully formatted”的信息,就表示格式化成功。注意:只需格式化一次,下次啟動時不需要,僅執(zhí)行啟動命令start-all.sh即可。
[hadoop@master ~] $ hdfs namenode -format
(2)啟動Hadoop。
[hadoop@master hadoop-2.4.0] $ ./sbin/start-all.sh
(3)驗證Hadoop。
用jps命令查看進程,如master上出現(xiàn)NameNode、SecondaryNameNode、ResourceManager和Jps,slave上出現(xiàn)DataNode、NodeManager和Jps等進程,則表示集群配置成功。經(jīng)驗證,文中集群配置成功。
HDFS中的文件與目錄用Linux命令是無法直接訪問,必須使用Hadoop自身提供的命令且所有操作都需在NameNode上進行。下面通過運行WordCount程序來對所建的云計算平臺進行測試。WordCount是最簡單也是最能體現(xiàn)MapReduce思想程序之一,其主要功能是統(tǒng)計一系列文本文件中每個單詞出現(xiàn)的次數(shù)。
3.1 在本地創(chuàng)建示例文件
首先在“/home/Hadoop”目錄下創(chuàng)建文件夾file。接著在file文件夾下創(chuàng)建兩個文本文件file1.txt和file2.txt,并輸入相應(yīng)內(nèi)容。
[hadoop@master ~] $ mkdir ./file
[hadoop@master file] $ echo “Hello World Hello everyone” > file1.txt
[hadoop@master file] $ echo “Hello Hadoop and everyone” > file2.txt
3.2 將本地file中的文件上傳到Hadoop文件系統(tǒng)
[hadoop@master ~] $ hadoop fs -mkdir /input
[hadoop@master ~] $ hadoop fs -put ./file/file*.txt /input
3.3 在集群上運行WordCount程序
圖3是Hadoop Job運行記錄的部分截圖。
圖3 Hadoop運行任務(wù)過程
從圖中可以看到,這個Job的ID號為job_1441765482318_0004,輸入文件有兩個,另外從Job運行記錄中還可以了解到map和reduce的輸入輸出記錄等信息。在本例中,map的task數(shù)量是2個,reduce的task數(shù)量是1個。map的輸入record數(shù)是2個,輸出record數(shù)是8個。
3.4 查看結(jié)果輸出文件內(nèi)容
實驗?zāi)M結(jié)果如圖4所示。
圖4 實驗?zāi)M結(jié)果
實驗結(jié)果證明,所建云平臺可以有效地完成分布式數(shù)據(jù)處理任務(wù)。
在云平臺的搭建過程中也遇到了一些問題,下面列出比較典型的幾個,以便在以后的平臺搭建過程中引起注意和提供參考。
(1)權(quán)限問題。
ssh免密碼配置后各節(jié)點間數(shù)據(jù)訪問還是需要輸入密碼,將防火墻關(guān)閉也不行。最后將.ssh目錄下的所有文件權(quán)限設(shè)置為600(chmod 600 ~/.ssh/*),問題就解決了。
(2)防火墻的問題。
Hadoop配置完成后,用jps命令查看發(fā)現(xiàn)slave節(jié)點中沒有nodemanager進程,禁用防火墻后slave節(jié)點中出現(xiàn)nodemanager進程。
(3)格式化HDFS的問題。
重新格式化HDFS文件系統(tǒng)之后,發(fā)現(xiàn)DataNode無法啟動。原因是每次格式化HDFS文件系統(tǒng)會重新創(chuàng)建一個namenodeId,而目錄“tmp/dfs/data”下包含了上次格式化后的id,格式化HDFS文件系統(tǒng)清空了NameNode下的數(shù)據(jù),但沒有清空DataNode下的數(shù)據(jù),所以導(dǎo)致啟動時失敗。所要做的就是每次格式化HDFS文件系統(tǒng)前,先清空tmp文件夾下的所有目錄。
值得注意的是,在處理問題的過程中要善于通過查看運行日志找到問題的產(chǎn)生原因,并通過借助互聯(lián)網(wǎng)尋求問題的處理辦法來解決問題。
綜合采用并行計算、分布式計算和虛擬化等技術(shù)的云計算將海量數(shù)據(jù)處理推進到一個新時代。而Hadoop的開源、跨平臺、高容錯等特點使其成為構(gòu)建云計算平臺的首選技術(shù)。文中詳細(xì)介紹了Hadoop集群的搭建方法,成功地搭建了Hadoop云計算平臺并進行了測試,有助于以后對大數(shù)據(jù)[14]的研究。最后將云平臺搭建過程中遇到的問題進行了總結(jié),以便引起注意并提供參考。下一步的工作主要是在Hadoop云計算平臺下進行相關(guān)算法的研究和應(yīng)用。
[1] 柯棟梁,鄭 嘯,李 喬.云計算:實例研究與關(guān)鍵技術(shù)[J].小型微型計算機系統(tǒng),2012,33(11):2321-2329.
[2] 林 利,石文昌.構(gòu)建云計算平臺的開源軟件綜述[J].計算機科學(xué),2012,39(11):1-7.
[3] Armbrust M,Fox A,Griffith R,et al.A view of cloud computing[J].Communication of the ACM,2010,53(4):50-58.
[4] 張良將.基于Hadoop云平臺的海量數(shù)字圖像數(shù)據(jù)挖掘的研究[D].上海:上海交通大學(xué),2013.
[5] 王彥明,奉國和,薛 云.近年來Hadoop國外研究綜述[J].計算機系統(tǒng)應(yīng)用,2013,22(6):1-5.
[6] Chaudhary A,Singh P.Big data-importance of Hadoop distributed filesystem[J].International Journal of Scientific & Engineering Research,2013,4(11):234-237.
[7] 童 明.基于HDFS的分布式存儲研究與應(yīng)用[D].武漢:華中科技大學(xué),2012.
[8] 郝增勇.基于Hadoop用戶行為分析系統(tǒng)設(shè)計與實現(xiàn)[D].北京:北京交通大學(xué),2014.
[9] Dean J,Ghemawat S.MapReduce:simplifier date processing on large clusters[J].Communications of the ACM,2008,51(1):107-113.
[10] Berlinska J,Drozdowskib M.Scheduling divisible MapReduce computations[J].Parallel and Distributed Computing,2011,71(3):450-459.
[11] 徐煥良,翟 璐,薛 衛(wèi),等.Hadoop平臺中MapReduce調(diào)度算法研究[J].計算機應(yīng)用與軟件,2015,32(5):1-6.
[12] Apache Hadoop[EB/OL].2015-08-07.http://hadoop.apache.org/.
[13] 王婷娟,管會生,尹 暉.DSA與RSA相結(jié)合的數(shù)字簽名技術(shù)[C]//全國第19屆(CACIS)學(xué)術(shù)會議論文集(下冊).出版地不詳:出版者不詳,2008:1129-1133.
[14] 嚴(yán)霄鳳,張德馨.大數(shù)據(jù)研究[J].計算機技術(shù)與發(fā)展,2013,23(4):168-172.
Research and Implementation of Cloud Computing Platform Based on Hadoop
FAN Su-juan1,TIAN Jun-feng2
With the development of network technology,the number of online information is increasing in exponential and becoming larger and larger.With the growing amount of data,the traditional methods for processing massive data have many shortcomings like low efficiency.A novel technology is needed to solve these problems,so the cloud computing has been brought.It is an emerging computational model,as a kind of distributed computing technology.Hadoop is one of the most popular cloud computing platforms as a kind of open sources distributed platform,which is always applied on the area that needs to handle massive data efficiently.In order to improve the efficiency of processing massive data,it briefly analyzes the concept of cloud computing and the work flow of the main components of Hadoop in this paper,then introduction of the implementation method of the cloud computing platform based on Hadoop in detail,discussion of the typical problems encountered in the process of building cloud computing platform.Finally,the experiments show that the platform can effectively complete the processing tasks of distributed data.
Hadoop;HDFS;MapReduce;cloud computing
2015-10-20
2016-01-27
時間:2016-06-22
國家自然科學(xué)基金資助項目(61202098)
范素娟(1983-),女,助理工程師,碩士,研究方向為云計算技術(shù)。
http://www.cnki.net/kcms/detail/61.1450.TP.20160622.0842.014.html
TP39
A
1673-629X(2016)07-0127-04
10.3969/j.issn.1673-629X.2016.07.027
(1.Information Management Office,Henan University,Kaifeng 475004,China;2.School of Computer and Information Engineering,Henan University,Kaifeng 475004,China)