王志力
吉林醫(yī)藥學(xué)院 132013
2000年,SaaS興起。2004年,MapReduce論文由Google提出并發(fā)布。Google提出Hadoop平臺采用集群系統(tǒng)的開源項目,主要研究HDFS和Map/Reduce 。Hadoop隨即成了一款非常優(yōu)秀的分布式系統(tǒng)基礎(chǔ)架構(gòu)。2006年,“消費云”計劃[1]Google發(fā)布出來。2009年Google公司推出的Google Chrome瀏覽器也依托于云計算平臺建立起來。隨后,虛擬計算環(huán)境聯(lián)盟由VMware與思科聯(lián)合建立起來。VMware也推出云操作系統(tǒng)VMware vSphere 4。Google又升級了Google Chrome瀏覽器推出Chrome OS操作系統(tǒng)。2010年,HP和微軟聯(lián)合提供完整的云計算解決方案。
目前有很多開源云計算平臺:AbiCloud、Hadoop、Eucalyptus、MongoDB、Enomalism、Nimbus等。其中Hadoop是完全模仿Google體系架構(gòu)做的一個開源項目,主要包括Map/Reduce分布式框架和HDFS文件系統(tǒng)。Hadoop平臺作為云計算中一種海量數(shù)據(jù)處理時最優(yōu)秀的平臺,能夠減少很多開銷和時間。
Hadoop是由Apache基金會開發(fā)的一種分布式系統(tǒng)基礎(chǔ)架構(gòu)[2],利用分布式集群的威力高速運算和存儲。Hadoop主要有兩個主要部分:Map/Reduce框架和分布式文件系統(tǒng)HDFS(Hadoop Distributed File System)。Hadoop可以在低端硬件上構(gòu)建云計算環(huán)境的基礎(chǔ)服務(wù)和接口API(Application Program Interface,應(yīng)用程序編程接口)。主要特點是:擴容能力(Scalable)、成本低(Economical)、高效率(Efficient)、可靠性(Reliable)。Hadoop采用Java開發(fā)可以架設(shè)在很多操作系統(tǒng)中。
HDFS具有高容錯性和平臺遷移兩個主要特點[3]。HDFS在處理高維數(shù)據(jù)時可以一次讀取多次存儲。它是主從(Master/Slave)結(jié)構(gòu),一個HDFS集群包括2個節(jié)點NameNode(管理文件的命名空間和調(diào)節(jié)客戶端訪問文件的主服務(wù)器)和數(shù)據(jù)節(jié)點DataNodes(管理存儲)。NameNode以及DataNode具有內(nèi)置的Web服務(wù)器,能檢測到當(dāng)前集群的狀態(tài)信息。
Map/Reduce是一個用于處理海量數(shù)據(jù)的分布式計算框架[4]。這個框架解決了諸如數(shù)據(jù)分布、工作調(diào)度、容錯、機器間通信等復(fù)雜問題,Map/Reduce采用“分而治之”的思想,將計算任務(wù)抽象成Map和Reduce兩個計算過程,“分散運算—合并結(jié)果”。 Map/Reduce任務(wù)把輸入數(shù)據(jù)分割成不相關(guān)的若干鍵/值對(Key/Value)集,由多個Map任務(wù)來并行地處理。Map/Reduce會對Map的輸出進行排序,將一個鍵(Key)的值(Value)組合在一起作為Reduce任務(wù)的輸入,由Reduce任務(wù)計算出最終結(jié)果并輸出?;玖鞒倘缦拢?/p>
(Input) <Key1, Value1> -> map -> < Key2,Value2> -> combine -> < Key2, Value2> -> reduce-> < Key3, Value3> (Output)
準(zhǔn)備多臺服務(wù)器,安裝5臺虛擬機VMware機。統(tǒng)一將VMware Workstation安裝在D盤,分配磁盤空間時統(tǒng)一分配。一臺作為Master機,另四臺臺作為Slave機。新建虛擬機,加載Linux系統(tǒng)Ubuntu的iso鏡像文件,并在VMware環(huán)境下安裝Ubuntu系統(tǒng)。軟件統(tǒng)一安裝在虛擬機系統(tǒng)VMware上,Linux系統(tǒng)采用Ubuntu,jdk使用jdk1.6.0版,Hadoop使用hadoop-0.20.2版本。第一臺服務(wù)器作為Master機,主機名:master.hadoop.com,IP:10.0.0.1,第二~五臺的配置是一樣的作為Slave機,主機名分別為Slave01~Slave04:IP地址:10.0.0.2~5。在liunx系統(tǒng)配置yum源便于安裝軟件包,安裝java的軟件包,建立master機和slave機之間的信任關(guān)系,添加一個運行hadoop的普通用戶。以超級用戶身份打開environment文件,在其中添加兩個環(huán)境變量:CLASSPATH及JAVA_HOME并設(shè)置路徑值。在每臺機器上新建一個超級用戶,取名均為Hadoop,并建立SSH Key用來遠(yuǎn)程登錄。配置$HADOOP_HOME/conf/路徑下的3個文件hadoop-env.sh(導(dǎo)入JAVA_HOME環(huán)境變量值)、core-site.xml(指定默認(rèn)文件系統(tǒng)名)和mapred-site.xml(tracker默認(rèn)路徑端口)。SSH建立Master與Slave之間信任關(guān)系并安裝工具軟件配置、修改和測試yum源,具體操作如下:
root創(chuàng)建一個目錄/mnt/redhat 用于掛在linux的系統(tǒng)盤,命令如下:
[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)
在所有機器上創(chuàng)建用戶:# useradd boys和 #passwd boys。在Master機器上的Boys賬戶下執(zhí)行命令:$ ssh-Keygen -t rsa。在/home/boys/.ssh目錄下查看密鑰對id_rsa.,id_rsa.pub,其中前者為私鑰,后者為公鑰。然后將id_rsa.pub的內(nèi)容復(fù)制到/home/boys/.ssh/authorized_Keys文件中并執(zhí)行命令:$cp id_rsa.pub authorized_Keys。若機器中有authorized_Keys這個文件則執(zhí)行命令:
$cat id_rsa.pub>>authorized_Keys, 就 可 將 id_rsa.pub中內(nèi)容加在authorized_Keys這個文件末尾。進入到Salve機中用命令$ ssh-Keygen -t rsa產(chǎn)生密鑰,把剛產(chǎn)生的.ssh目錄的權(quán)限由775改為711,使用命令:chmod 711 ~/.ssh。把Master機.ssh目錄下的id_rsa.pub 的內(nèi)容拷貝到Salve 機.ssh目錄下的authorized_Keys文件末尾中。做法類似第二步。然后把Authorized_Keys的訪問權(quán)限修改成644?,F(xiàn)在由Master機到Slave機的認(rèn)證關(guān)系建立好了,可以在Master機器下用Ssh命令訪問Slave機器進行測試,若訪問成功且不需要密碼,從Master訪問Slave機的信任關(guān)系就設(shè)置好了。同理可以設(shè)置從Slave機訪問Master機的信任關(guān)系。
對于Hadoop不同的系統(tǒng)會有不同的節(jié)點劃分方式。NameNode和JobTracker部署時根據(jù)自己的需要,幾臺都行。Master機(主服務(wù)器)主要部署NameNode或JobTracker,其它的是Slave機(從服務(wù)器)。我們這里將NameNode和JobTracker部署在一臺機器上,DateNode和TaskTracker的部署在其余的四臺機器上,詳細(xì)的配置:boys的用戶下解壓Hadoop安裝包,使用最近的安裝包hadoop-1.0.2.tar.gz,把安裝包解壓到當(dāng)前的目錄下:$tar –zxvf /home/boys/hadoop-1.0.2.tar.gz –O./hadoop。
編輯/home/boys/hadoop/conf/hadoop-env.sh文件,把JAVA_HOME設(shè)置為Java安裝的跟路徑,文件內(nèi)容如下:
# 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安裝文件復(fù)制到其他機器上:
$ scp –r /home/boys/hadoop slave01 ~ 04.hadoop.com:/home/boys/
編輯所有機器的conf/hadoop-env.sh文件,將JAVA_HOME變量設(shè)置成為各自的java安裝的根目錄。
Hadoop運行格式化分布式文件系統(tǒng),操作的命令代碼:
[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已經(jīng)在集群上部署完畢。如果要新加入后刪除節(jié)點,僅僅修改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狀態(tài)正常就說明搭建的hadoop集群成功。
Hadoop云計算平臺,Hadoop平臺安裝、配置和測試,搭建linux系統(tǒng),為用戶在處理海量數(shù)據(jù)時算法的測試提供了良好的集成環(huán)境。
[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的海量數(shù)據(jù)處理模型研究和就用[D].北京:北京郵電大學(xué),2008.