王志力
吉林醫藥學院 132013
2000年,SaaS興起。2004年,MapReduce論文由Google提出并發布。Google提出Hadoop平臺采用集群系統的開源項目,主要研究HDFS和Map/Reduce 。Hadoop隨即成了一款非常優秀的分布式系統基礎架構。2006年,“消費云”計劃[1]Google發布出來。2009年Google公司推出的Google Chrome瀏覽器也依托于云計算平臺建立起來。隨后,虛擬計算環境聯盟由VMware與思科聯合建立起來。VMware也推出云操作系統VMware vSphere 4。Google又升級了Google Chrome瀏覽器推出Chrome OS操作系統。2010年,HP和微軟聯合提供完整的云計算解決方案。
目前有很多開源云計算平臺:AbiCloud、Hadoop、Eucalyptus、MongoDB、Enomalism、Nimbus等。其中Hadoop是完全模仿Google體系架構做的一個開源項目,主要包括Map/Reduce分布式框架和HDFS文件系統。Hadoop平臺作為云計算中一種海量數據處理時最優秀的平臺,能夠減少很多開銷和時間。
Hadoop是由Apache基金會開發的一種分布式系統基礎架構[2],利用分布式集群的威力高速運算和存儲。Hadoop主要有兩個主要部分:Map/Reduce框架和分布式文件系統HDFS(Hadoop Distributed File System)。Hadoop可以在低端硬件上構建云計算環境的基礎服務和接口API(Application Program Interface,應用程序編程接口)。主要特點是:擴容能力(Scalable)、成本低(Economical)、高效率(Efficient)、可靠性(Reliable)。Hadoop采用Java開發可以架設在很多操作系統中。
HDFS具有高容錯性和平臺遷移兩個主要特點[3]。HDFS在處理高維數據時可以一次讀取多次存儲。它是主從(Master/Slave)結構,一個HDFS集群包括2個節點NameNode(管理文件的命名空間和調節客戶端訪問文件的主服務器)和數據節點DataNodes(管理存儲)。NameNode以及DataNode具有內置的Web服務器,能檢測到當前集群的狀態信息。
Map/Reduce是一個用于處理海量數據的分布式計算框架[4]。這個框架解決了諸如數據分布、工作調度、容錯、機器間通信等復雜問題,Map/Reduce采用“分而治之”的思想,將計算任務抽象成Map和Reduce兩個計算過程,“分散運算—合并結果”。 Map/Reduce任務把輸入數據分割成不相關的若干鍵/值對(Key/Value)集,由多個Map任務來并行地處理。Map/Reduce會對Map的輸出進行排序,將一個鍵(Key)的值(Value)組合在一起作為Reduce任務的輸入,由Reduce任務計算出最終結果并輸出。基本流程如下:
(Input) <Key1, Value1> -> map -> < Key2,Value2> -> combine -> < Key2, Value2> -> reduce-> < Key3, Value3> (Output)
準備多臺服務器,安裝5臺虛擬機VMware機。統一將VMware Workstation安裝在D盤,分配磁盤空間時統一分配。一臺作為Master機,另四臺臺作為Slave機。新建虛擬機,加載Linux系統Ubuntu的iso鏡像文件,并在VMware環境下安裝Ubuntu系統。軟件統一安裝在虛擬機系統VMware上,Linux系統采用Ubuntu,jdk使用jdk1.6.0版,Hadoop使用hadoop-0.20.2版本。第一臺服務器作為Master機,主機名:master.hadoop.com,IP:10.0.0.1,第二~五臺的配置是一樣的作為Slave機,主機名分別為Slave01~Slave04:IP地址:10.0.0.2~5。在liunx系統配置yum源便于安裝軟件包,安裝java的軟件包,建立master機和slave機之間的信任關系,添加一個運行hadoop的普通用戶。以超級用戶身份打開environment文件,在其中添加兩個環境變量:CLASSPATH及JAVA_HOME并設置路徑值。在每臺機器上新建一個超級用戶,取名均為Hadoop,并建立SSH Key用來遠程登錄。配置$HADOOP_HOME/conf/路徑下的3個文件hadoop-env.sh(導入JAVA_HOME環境變量值)、core-site.xml(指定默認文件系統名)和mapred-site.xml(tracker默認路徑端口)。SSH建立Master與Slave之間信任關系并安裝工具軟件配置、修改和測試yum源,具體操作如下:
root創建一個目錄/mnt/redhat 用于掛在linux的系統盤,命令如下:
[root@master ~]# mkdir /mnt/redhat
[root@master ~]# mount /dev/hdc /mnt/redhat
[root@master ~]# vim /etc/yum.repos.d/rheldebuginfo.repo
[rhel-debuginfo]
name=Red Hat Enterprise Linux $releasever -$basearch – Debug
baseurl=file:///mnt/redhat/Server enabled=1 gpgcheck=0
[root@master ~]# yum list
安裝java包:[root@master ~]# yum install java
[root@master ~ ]# java –version java version"1.6.0"
OpenJDK Runtime Environment (build 1.6.0-b09)
OpenJDK Client VM (build 1.6.0-b09, mixed mode)
在所有機器上創建用戶:# useradd boys和 #passwd boys。在Master機器上的Boys賬戶下執行命令:$ ssh-Keygen -t rsa。在/home/boys/.ssh目錄下查看密鑰對id_rsa.,id_rsa.pub,其中前者為私鑰,后者為公鑰。然后將id_rsa.pub的內容復制到/home/boys/.ssh/authorized_Keys文件中并執行命令:$cp id_rsa.pub authorized_Keys。若機器中有authorized_Keys這個文件則執行命令:
$cat id_rsa.pub>>authorized_Keys, 就 可 將 id_rsa.pub中內容加在authorized_Keys這個文件末尾。進入到Salve機中用命令$ ssh-Keygen -t rsa產生密鑰,把剛產生的.ssh目錄的權限由775改為711,使用命令:chmod 711 ~/.ssh。把Master機.ssh目錄下的id_rsa.pub 的內容拷貝到Salve 機.ssh目錄下的authorized_Keys文件末尾中。做法類似第二步。然后把Authorized_Keys的訪問權限修改成644。現在由Master機到Slave機的認證關系建立好了,可以在Master機器下用Ssh命令訪問Slave機器進行測試,若訪問成功且不需要密碼,從Master訪問Slave機的信任關系就設置好了。同理可以設置從Slave機訪問Master機的信任關系。
對于Hadoop不同的系統會有不同的節點劃分方式。NameNode和JobTracker部署時根據自己的需要,幾臺都行。Master機(主服務器)主要部署NameNode或JobTracker,其它的是Slave機(從服務器)。我們這里將NameNode和JobTracker部署在一臺機器上,DateNode和TaskTracker的部署在其余的四臺機器上,詳細的配置:boys的用戶下解壓Hadoop安裝包,使用最近的安裝包hadoop-1.0.2.tar.gz,把安裝包解壓到當前的目錄下:$tar –zxvf /home/boys/hadoop-1.0.2.tar.gz –O./hadoop。
編輯/home/boys/hadoop/conf/hadoop-env.sh文件,把JAVA_HOME設置為Java安裝的跟路徑,文件內容如下:
# Set Hadoop-specific environment variables here.
# The only required environment variable is JAVA_HOME. All others are
# Optional. When running a distributed configuration it is best to
# set JAVA_HOME in this file, so that it is correctly defined on
# Remote nodes.
# The java implementation to use. Required.Export JAVA_HOME=/user
# Extra Java CLASSPATH elements. Optional.
# Export HADOOP_CLASSPATH=/..
# The maximum amount of heap to use, in MB.Default is 1000.
# Export HADOOP_HEAPSIZE=2000
配置所有機器的主機名和IP地址之間能正確的解析,用root賬戶修改每臺機器的/etc/hosts文件,修改如下:
[boys@master conf]$ cat /etc/hosts
# Do not remove the following line, or various programs.
# that require network functionality will fail.
127.0.0.1 localhostserver
10.0.0.1 master.hadoop.com
10.0.0.2 ~5 slave01~04.hadoop.com
在所有的機器上配置Hadoop,主要是配置*.xml文件,具體操作如下:
在master.hadoop.com機器上編輯/home/boys/hadoop/conf/ 目 錄 下 的 core-site.xml、hdfs-site.xml、mapred-site.xml、masters、slaves文件。
把Hadoop安裝文件復制到其他機器上:
$ scp –r /home/boys/hadoop slave01 ~ 04.hadoop.com:/home/boys/
編輯所有機器的conf/hadoop-env.sh文件,將JAVA_HOME變量設置成為各自的java安裝的根目錄。
Hadoop運行格式化分布式文件系統,操作的命令代碼:
[boys@master~]$/home/boys/hadoop/bin/hadoop namenode –format
啟動Hadoop的守護進程,在master.hadoop.com上啟動 NameNode、JobTracker,在 slave01~ slave04上啟動DataNode和TaskTracker。
[boys@master~]$/home/boys/hadoop/bin/startall.sh
至此,Hadoop已經在集群上部署完畢。如果要新加入后刪除節點,僅僅修改NameNode的Masters和Slaves。集群的測試:啟動Hadoop的守護進程,查看進程是否啟動:[boys@master ~]$ ps wxf 顯示進程,[boys@master ~]$ /home/boys/hadoop/bin/hadoop dfsadmin –report或在linux上自帶的firfox的瀏覽器查看,訪問:http://master.hadoop.com:50070和http://master.hadoop.com:50030,State狀態正常就說明搭建的hadoop集群成功。
Hadoop云計算平臺,Hadoop平臺安裝、配置和測試,搭建linux系統,為用戶在處理海量數據時算法的測試提供了良好的集成環境。
[1]Barroso LA, Dean J, Holzle U. Web search for a planet: The Google cluster architecture [J]. IEEE Micro, 2003, 23(2):22-28.
[2]Chunru Dong, Patrick P K Chan, Wing WY ng, et al. 2-Stage instance selection algorithm for KNN based on Nearest unlike Neighbors [J]. International Conference on Machine Learning and Cybernetics (ICMLC 2010), 2010, 1: 134-140.
[3]Jeffrey Dean, sanjay Ghemawat. Map Reduce: Simplified Data Processing on Large Clusters Communications of the ACM [J].2008, 9: 107-113.
[4]朱珠.基于Hadoop的海量數據處理模型研究和就用[D].北京:北京郵電大學,2008.