范素娟,田軍鋒
(1.河南大學 信息化管理辦公室,河南 開封 475004;2.河南大學 計算機與信息工程學院,河南 開封 475004)
基于Hadoop的云計算平臺研究與實現
范素娟1,田軍鋒2
(1.河南大學 信息化管理辦公室,河南 開封 475004;2.河南大學 計算機與信息工程學院,河南 開封 475004)
隨著網絡技術的發展,網絡數據量正以指數級增長且規模日漸龐大。面對正在增長的海量數據,傳統的數據處理方法存在效率低下等諸多缺點。人們需要一種新的技術思想來解決這些問題。因此,云計算的思想被提出。云計算是一種新興的計算模型,是分布式計算技術的一種。而Hadoop作為一個開源的分布式平臺是當前最為流行的云計算平臺實現之一,被用于高效地處理海量數據。為了提高對海量數據處理的效率,文中首先簡要分析了云計算的概念和Hadoop主要組件的工作流程,然后詳細介紹了基于Hadoop的云計算平臺配置方法和實現過程,并對云平臺的搭建過程中遇到的典型問題進行了總結闡述。最后通過實驗證明,該平臺可以有效地完成分布式數據處理任務。
Hadoop;HDFS;MapReduce;云計算
云計算[1]是一種新興的計算模型,它是分布式計算、并行計算、虛擬化等傳統計算機和網絡技術發展融合的產物。其最基本的概念,是通過網絡將龐大的計算處理程序自動分拆成無數個較小的子程序,再交由多部服務器所組成的龐大系統,經搜尋、計算分析之后將處理結果回傳給用戶。通過這項技術,網絡服務提供者可以在數秒之內處理數以千萬計甚至億計的信息,達到和“超級計算機”同樣強大效能的網絡服務。目前有眾多的云計算模型[2-3],但大部分屬于商業模型,而Hadoop作為Apache基金會下的開源云計算模型,實現了包括分布式文件系統(HDFS)和MapReduce框架在內的云計算軟件平臺的基礎架構,并且使用Java語言編寫,可移植性強,在很多大型網站上都得到了應用。其已成為企業和個人進行云計算應用和研究[4]的標準平臺。
Hadoop[5]是Apache開源組織的一個分布式計算開源框架,其最核心的設計是MapReduce和HDFS(Hadoop Distributed File System)。簡言之MapReduce就是任務的分解與結果的匯總,HDFS為分布式計算存儲提供了底層支持。
Hadoop的優勢不但在于它的開源,而且還具有如下一些特點:
(1)高可靠性:HDFS的備份恢復機制及MapReduce的任務監控保證了分布式處理的可靠性。
(2)高擴展性:Hadoop是在可用的計算機集簇間分配數據并完成計算任務的,這些集簇可以方便地擴展到數以千計的節點中。
(3)高效性:通過分發數據,Hadoop可以在數據所在的節點上并行處理,因此處理速度非常快。
(4)高容錯性:Hadoop能夠自動維護數據的多個副本,并且可自動將失敗的任務重新分配。
(5)低成本:Hadoop依賴于社區服務器,在任何普通的PC上安裝配置Hadoop集群,都可以對海量的數據進行高效處理[6]。
1.1 分布式文件系統
HDFS[7]是Hadoop中數據存儲管理的基礎。它具有高吞吐率、高容錯性、高擴展性和高可靠性等特點,為海量數據存儲提供了良好的保障和便利,非常適合大規模數據集上的應用[8]。其體系結構如圖1所示。

圖1 HDFS體系結構
HDFS采用master/slave架構。一個HDFS集群由一個NameNode和多個DataNode組成。其中NameNode作為主服務器,負責管理文件系統的命名空間和客戶端對文件的訪問。集群中的DataNode管理它所在節點上的數據存儲。HDFS對外公開文件系統的命名空間,用戶能夠以文件的形式在上面存儲數據。從內部看,一個文件其實被分成若干個數據塊(Block),這些Block存儲在一組DataNode上。NameNode執行文件系統的命名空間操作并負責確定Block到具體DataNode節點的映射。DataNode負責處理文件系統的讀寫請求,在NameNode的統一調度下進行Block的創建、復制和刪除。
1.2 MapReduce編程模型
MapReduce[9]是一種用于處理大規模數據集并行運算的編程模型[10-11]。其處理數據的過程主要分成兩個階段:Map階段和Reduce階段。先執行Map階段,再執行Reduce階段。用戶在使用該模型時,可根據一定的編程規則來分別實現Map和Reduce函數,之后MapReduce會自動地對任務進行分割從而實現并行執行。MapReduce模型如圖2所示。

圖2 MapReduce模型
MapReduce過程在正式執行Map函數前,首先把輸入文件數據分成M份數據塊文件;然后Master服務器調度不同的Worker服務器進行Map過程,不同的Map之間是互相獨立且高度并行的,它以
文中云平臺搭建所用的服務器均為生產環境里的虛擬機,基本配置:CPU(Intel(R) Xeon(R) CPU E5-2660 v2 @ 2.20 GHz 2.20 GHz)、內存(4 GB)、硬盤(30 GB,容量可根據需要增加)。這里主要介紹在Linux操作系統下安裝配置Hadoop的方法,所用操作系統版本為Red Hat Enterprise Linux Server release 6.1(32位),Java版本為1.7.0_79,Hadoop[12]版本為2.4.0。安裝的主要步驟如下所述。
2.1 網絡配置
集群中包括4個節點:1個master和3個slave。所有節點處于同一VLAN內,可以相互ping通,并且四個節點有一個相同的用戶Hadoop。master節點主要配置NameNode和JobTracker的角色,負責總管分布式數據和分解任務的執行;3個salve節點配置DataNode和TaskTracker的角色,負責分布式數據存儲以及任務的執行。
在Linux系統的安裝過程中配置好各節點的主機名、IP及Hadoop用戶的創建。然后是配置各節點的hosts文件?!?etc/hosts”文件是用來配置主機將用的DNS服務器信息,為了方便節點間通過節點名稱來訪問,分別在每個節點的“/etc/hosts”文件中添加各節點的IP地址和主機名的對應信息,格式如下所示:
172.31.0.250 master
172.31.0.251 slave1
172.31.0.252 slave2
172.31.0.253 slave3
2.2 SSH無密碼驗證配置
Hadoop集群的各個節點之間需要進行數據的訪問,如果Hadoop對每個節點的訪問均需要進行驗證,其效率將會大大降低,所以需要配置SSH免密碼的方法直接遠程連入被訪問節點,這樣將大大提高訪問效率。所有節點都用Hadoop用戶登陸進行配置。
(1)公私密鑰的生成。
每個節點分別產生公私密鑰[13],并將公鑰文件復制成authorized_keys文件:
[hadoop@master ~]$ ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_dsa
[hadoop@master .ssh]$ cat id_dsa.pub >> authorized_keys
(2)單機回環SSH免密碼登錄測試。
首先將“~/.ssh”目錄下的所有文件權限設置為600,然后在單機節點上用ssh進行登錄。如當前目錄變為~,則表示操作成功。輸入命令exit注銷退出,當前目錄重新回到“~/.ssh”。單機回環SSH登錄及注銷成功,將為后續跨子節點SSH遠程免密碼登錄作好準備。
[hadoop@master .ssh]$ ssh localhost
(3)讓主節點能通過SSH免密碼登錄三個子節點。
為實現這個功能,三個slave節點的公鑰文件中必須要包含主節點的公鑰信息:
[hadoop@slave1 .ssh]$ scp hadoop@master:~/.ssh/id_dsa.pub ./master_dsa.pub
[hadoop@slave1 .ssh]$ cat master_dsa.pub >> authorized_keys
首先slave1節點通過scp命令遠程登錄master節點,并復制master的公鑰文件到當前的目錄下,這一過程需要密碼驗證。接著,將master節點的公鑰文件追加至authorized_keys文件中,通過這步操作,master節點就可以通過ssh遠程免密碼連接slave1節點了。在master節點中操作如下:
[hadoop@master ~]$ ssh slave1
子節點首次連接時需要輸入yes確認連接,連接后注銷退出至master節點。
下次再執行連接命令時,master就可以免密碼直接登錄至子節點了。
(4)讓子節點能通過SSH免密碼登錄主節點。
[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
用同樣的方法配置另外兩個子節點。至此,master和每個slave能夠相互無密碼驗證登錄。
2.3 Java環境配置
所有節點上都要安裝JDK,現在就先在master節點安裝,然后其他節點按照步驟重復進行即可。安裝JDK以及配置環境變量,需要以root的身份進行。
(1)先卸載服務器自帶的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
首先查看服務器當前的JDK軟件版本,然后執行卸載命令卸載服務器自帶的版本。
(2)上傳JDK安裝文件并執行安裝。
創建JDK安裝目錄“/usr/java”,將JDK安裝文件上傳到該目錄并安裝。如果“/usr/java”下面出現一個名為“jdk1.7.0_79”的文件夾,說明JDK安裝結束,刪除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)配置環境變量。
編輯“/etc/profile”文件,在末尾添加如下內容:
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
然后執行source命令使配置生效并查看當前的Java版本,確認是所安裝的版本。
[root@master ~] # source /etc/profile
[root@master ~] # java -version
2.4 Hadoop集群配置
所有節點都要安裝Hadoop,先在master節點上安裝,然后其他節點按照相同步驟進行安裝配置。下面以root的身份進行安裝和配置Hadoop。
(1)上傳并解壓Hadoop安裝包。
上傳并解壓Hadoop安裝包到“/usr”目錄下,安裝完成后刪除,然后把“/usr/hadoop-2.4.0”的讀權限分配給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”目錄下面分別創建tmp,dfs/name,dfs/data文件夾,用于存放命名空間以及數據信息,并將所建文件夾權限分配給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”。
在文件末尾添加如下信息,并執行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,添加三個子節點的主機名:
slave1、slave2、slave3。
(5)配置文件core-site.xml。
在文件末尾的configuration節點添加如下屬性:
(6)配置文件hdfs-site.xml,格式同步驟(5)。注意:步驟(6)~(8)省略了
(7)配置文件yarn-site.xml,格式同步驟(5)。
(8)配置文件mapred-site.xml。
文件mapred-site.xml從mapred-site.xml.template復制而來,格式同步驟(5)。
(9)在剩余節點上安裝配置Hadoop。
拷貝Hadoop安裝目錄到其他節點,并分別配置各節點的“/etc/profile”文件。注意:“/usr/hadoop-2.4.0/”目錄下所有文件權限均為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文件系統。
在master上使用用戶Hadoop進行操作。只要出現類似“Storage directory /usr/hadoop-2.4.0/dfs/name has been successfully formatted”的信息,就表示格式化成功。注意:只需格式化一次,下次啟動時不需要,僅執行啟動命令start-all.sh即可。
[hadoop@master ~] $ hdfs namenode -format
(2)啟動Hadoop。
[hadoop@master hadoop-2.4.0] $ ./sbin/start-all.sh
(3)驗證Hadoop。
用jps命令查看進程,如master上出現NameNode、SecondaryNameNode、ResourceManager和Jps,slave上出現DataNode、NodeManager和Jps等進程,則表示集群配置成功。經驗證,文中集群配置成功。
HDFS中的文件與目錄用Linux命令是無法直接訪問,必須使用Hadoop自身提供的命令且所有操作都需在NameNode上進行。下面通過運行WordCount程序來對所建的云計算平臺進行測試。WordCount是最簡單也是最能體現MapReduce思想程序之一,其主要功能是統計一系列文本文件中每個單詞出現的次數。
3.1 在本地創建示例文件
首先在“/home/Hadoop”目錄下創建文件夾file。接著在file文件夾下創建兩個文本文件file1.txt和file2.txt,并輸入相應內容。
[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文件系統
[hadoop@master ~] $ hadoop fs -mkdir /input
[hadoop@master ~] $ hadoop fs -put ./file/file*.txt /input
3.3 在集群上運行WordCount程序
圖3是Hadoop Job運行記錄的部分截圖。

圖3 Hadoop運行任務過程
從圖中可以看到,這個Job的ID號為job_1441765482318_0004,輸入文件有兩個,另外從Job運行記錄中還可以了解到map和reduce的輸入輸出記錄等信息。在本例中,map的task數量是2個,reduce的task數量是1個。map的輸入record數是2個,輸出record數是8個。
3.4 查看結果輸出文件內容
實驗模擬結果如圖4所示。

圖4 實驗模擬結果
實驗結果證明,所建云平臺可以有效地完成分布式數據處理任務。
在云平臺的搭建過程中也遇到了一些問題,下面列出比較典型的幾個,以便在以后的平臺搭建過程中引起注意和提供參考。
(1)權限問題。
ssh免密碼配置后各節點間數據訪問還是需要輸入密碼,將防火墻關閉也不行。最后將.ssh目錄下的所有文件權限設置為600(chmod 600 ~/.ssh/*),問題就解決了。
(2)防火墻的問題。
Hadoop配置完成后,用jps命令查看發現slave節點中沒有nodemanager進程,禁用防火墻后slave節點中出現nodemanager進程。
(3)格式化HDFS的問題。
重新格式化HDFS文件系統之后,發現DataNode無法啟動。原因是每次格式化HDFS文件系統會重新創建一個namenodeId,而目錄“tmp/dfs/data”下包含了上次格式化后的id,格式化HDFS文件系統清空了NameNode下的數據,但沒有清空DataNode下的數據,所以導致啟動時失敗。所要做的就是每次格式化HDFS文件系統前,先清空tmp文件夾下的所有目錄。
值得注意的是,在處理問題的過程中要善于通過查看運行日志找到問題的產生原因,并通過借助互聯網尋求問題的處理辦法來解決問題。
綜合采用并行計算、分布式計算和虛擬化等技術的云計算將海量數據處理推進到一個新時代。而Hadoop的開源、跨平臺、高容錯等特點使其成為構建云計算平臺的首選技術。文中詳細介紹了Hadoop集群的搭建方法,成功地搭建了Hadoop云計算平臺并進行了測試,有助于以后對大數據[14]的研究。最后將云平臺搭建過程中遇到的問題進行了總結,以便引起注意并提供參考。下一步的工作主要是在Hadoop云計算平臺下進行相關算法的研究和應用。
[1] 柯棟梁,鄭 嘯,李 喬.云計算:實例研究與關鍵技術[J].小型微型計算機系統,2012,33(11):2321-2329.
[2] 林 利,石文昌.構建云計算平臺的開源軟件綜述[J].計算機科學,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云平臺的海量數字圖像數據挖掘的研究[D].上海:上海交通大學,2013.
[5] 王彥明,奉國和,薛 云.近年來Hadoop國外研究綜述[J].計算機系統應用,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的分布式存儲研究與應用[D].武漢:華中科技大學,2012.
[8] 郝增勇.基于Hadoop用戶行為分析系統設計與實現[D].北京:北京交通大學,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] 徐煥良,翟 璐,薛 衛,等.Hadoop平臺中MapReduce調度算法研究[J].計算機應用與軟件,2015,32(5):1-6.
[12] Apache Hadoop[EB/OL].2015-08-07.http://hadoop.apache.org/.
[13] 王婷娟,管會生,尹 暉.DSA與RSA相結合的數字簽名技術[C]//全國第19屆(CACIS)學術會議論文集(下冊).出版地不詳:出版者不詳,2008:1129-1133.
[14] 嚴霄鳳,張德馨.大數據研究[J].計算機技術與發展,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
國家自然科學基金資助項目(61202098)
范素娟(1983-),女,助理工程師,碩士,研究方向為云計算技術。
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)