黃楠
摘要:本文從節(jié)約成本和簡化搭建過程出發(fā),介紹了通過VMware Workstation和CentOS 6.5在單機(jī)環(huán)境下,搭建分布式Hadoop集群的方法,并給出了詳細(xì)的搭建步驟,最后對搭建好的平臺進(jìn)行了測試,測試結(jié)果表明建立在虛擬機(jī)上的Hadoop集群已經(jīng)可以正常運(yùn)行,可在上面進(jìn)行實(shí)驗和應(yīng)用開發(fā)。
關(guān)鍵詞:Hadoop;VMware;虛擬化
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)25-0175-06
1 概述
目前,大數(shù)據(jù)已經(jīng)成為研究的熱點(diǎn),大數(shù)據(jù)的解決方案種類繁多,其中Hadoop作為 Apache基金會的一個開源項目,已經(jīng)積累了大量用戶,在業(yè)界也得到了廣泛的認(rèn)可,一些知名企業(yè)如百度、阿里巴巴、 谷歌、騰訊和facebook等,紛紛將 Hadoop應(yīng)用于商業(yè)領(lǐng)域。傳統(tǒng)的Hadoop集群是基于物理節(jié)點(diǎn)搭建的,雖然理論上組建一個 Hadoop集群不需要昂貴的高性能計算機(jī),僅需一些廉價的計算機(jī)即可[1,2],但如采用傳統(tǒng)技術(shù)搭建Hadoop集群,就不得不面對一些問題:①構(gòu)建集群需要大量的物理設(shè)備以及足夠的實(shí)驗場地②物理機(jī)的性能得不到充分利用;③基于物理機(jī)的Hadoop集群組建后,如需增加節(jié)點(diǎn),就要增加新的物理機(jī),需要更大的場地,而且集線器、交換機(jī)等物理設(shè)備也要相應(yīng)增加,布置起來比較錯綜復(fù)雜。面對這些問題,如何在?本文對這個問題進(jìn)行探討,介紹一下在單機(jī)環(huán)境中,使用VMware Workstation 10和CentOS 6.5搭建Hadoop分布式集群并進(jìn)行簡單的測試。
2 Hadoop簡介
Hadoop是一種分析和處理大數(shù)據(jù)的軟件平臺,是Apache的一個用Java語言所實(shí)現(xiàn)的開源軟件框架,在大量計算機(jī)組成的集群當(dāng)中實(shí)現(xiàn)了對海量數(shù)據(jù)進(jìn)行分布式計算。Hadoop的框架最核心的設(shè)計就是:HDFS和MapReduce,HDFS為海量的數(shù)據(jù)提供了存儲,而MapReduce為海量的數(shù)據(jù)提供了計算。大數(shù)據(jù)在Hadoop處理的流程可以參照圖1來進(jìn)行理解:數(shù)據(jù)是通過Hadoop的集群處理后得到的結(jié)果。[3]
Hadoop的集群主要由 NameNode,DataNode,Secondary NameNode,JobTracker,TaskTracker組成,如圖2所示:
NameNode:記錄文件是如何被拆分成block以及這些block都存儲到了那些DateNode節(jié)點(diǎn),同時也保存了文件系統(tǒng)運(yùn)行的狀態(tài)信息。
DataNode:存儲被拆分的blocks。
Secondary NameNode:幫助NameNode收集文件系統(tǒng)運(yùn)行的狀態(tài)信息。
JobTracker:當(dāng)有任務(wù)提交到Hadoop集群時,負(fù)責(zé)Job的運(yùn)行,負(fù)責(zé)調(diào)度多個TaskTracker。
TaskTracker:負(fù)責(zé)某一個map或者reduce任務(wù)。
3 搭建Hadoop虛擬實(shí)驗平臺
3.1準(zhǔn)備與安裝環(huán)境
服務(wù)器準(zhǔn)備:安裝虛擬機(jī)和linux,虛擬機(jī)推薦使用vmware;PC可以使用workstation,配置低的話可選擇Cygwin,模擬linux環(huán)境;服務(wù)器可以使用ESXi,在管理上比較方便。ESXi還可以通過拷貝鏡像文件復(fù)制虛擬機(jī),復(fù)制后自動修改網(wǎng)卡號和ip非常快捷。 如果只是實(shí)驗用途,硬盤大約預(yù)留20-30G空間。
操作系統(tǒng):CentOS 6.5 ,分區(qū)可以選擇默認(rèn),安裝選項默認(rèn)即可,注意選項里應(yīng)包括ssh , vi (用于編輯配置文件) , perl等(有些腳本里包含perl代碼需要解析)。
JAVA環(huán)境:到Oracle官網(wǎng)下載java jdk安裝包,并且進(jìn)行安裝。
3.2實(shí)驗環(huán)境
硬件環(huán)境:Vmware 10 ,三臺Linux虛擬機(jī):CentOS 6.5, 安裝介質(zhì):cdh5.4.0。
三臺虛擬機(jī)配置如表1:
3.3安裝與配置三臺虛擬機(jī)
3.3.1準(zhǔn)備三臺虛擬機(jī)
打開虛擬軟件VMware WorkStation。
點(diǎn)擊“文件”->“打開”,找到虛擬機(jī)所在目錄,打開裝有CentOS6.5的虛擬機(jī)。
通過克隆生成新的虛擬機(jī),如圖3。
3.3.2操作系統(tǒng)網(wǎng)絡(luò)配置
確認(rèn)三臺虛擬機(jī)為不同MAC地址,選擇“NAT模式”的網(wǎng)絡(luò)連接方式,如圖4。
打開虛擬機(jī),按照表1設(shè)置IP地址,然后通過“ifconfig”命令查看網(wǎng)絡(luò)地址,如圖5。
設(shè)置完后,root用戶用“service network restart”命令重啟網(wǎng)絡(luò)。
根據(jù)表1修改三臺主機(jī)的主機(jī)名,修改后系統(tǒng)需重新啟動,編輯/etc/sysconfig/network,HOSTNAME=master或slave。
修改/etc/hosts,所有主機(jī)添加如下內(nèi)容:
192.168.xx.101 master
192.168.xx.102 slave1
192.168.xx.103 slave2
3.3.3 ssh無密碼登錄配置
三臺主機(jī)確保關(guān)閉防火墻,#chkconfig iptables,#services iptables stop。
關(guān)閉SElINUX,修改/etc/selinux/config中的SELINUX=””為disable。
在所有主機(jī)生成密鑰并配置SSH無密碼登錄主機(jī)
#ssh-keygen -t rsa
在master生成認(rèn)證文件,然后授權(quán)并將文件拷貝到slave1
#cat ~/.ssh/id_rsa.pub >>~ /.ssh/authorized_ keys
# chmod 600 authorized_keys
#scp ~/.ssh/authorized_ keys slave 1:~/.ssh/
在slave1上添加公鑰信息,然后授權(quán)并將文件拷貝到slave2
#cat ~/.ssh/id_rsa.pub >>~ /.ssh/authorized_ keys
# chmod 600 authorized_keys
#scp ~/.ssh/authorized_ keys slave 2:~/.ssh/
在slave2上添加公鑰信息,然后授權(quán)并將文件拷貝到master和slave1
#cat ~/.ssh/id_rsa.pub >>~ /.ssh/authorized_ keys
# chmod 600 authorized_keys
#scp ~/.ssh/authorized_ keys master:~/.ssh/
#scp ~/.ssh/authorized_ keys slave 1:~/.ssh/
測試是否實(shí)現(xiàn)三臺主機(jī)間的無密碼登錄
#ssh master
#ssh slave1
3.3.4 配置JAVA環(huán)境
三臺主機(jī)分別上傳jdk文件到桌面并執(zhí)行配置
mkdir /usr/java
mv ~/Desktop/jdk-7u71-linux-x64.gz /usr/java/
cd /usr/java
tar -xvf jdk-7u71-linux-x64.gz
在master配置環(huán)境變量,在/root/.bashrc文件添加如下內(nèi)容
export JAVA_HOME=/usr/java/jdk1.7.0_71
export PATH=$PATH:$JAVA_HOME/bin
生效并發(fā)送到另外兩臺主機(jī)
#source .bashrc
#scp .bashrc slave1: ~
#scp .bashrc slave2: ~
驗證
#java -version
3.3.5配置集群時間同步
選擇master作為時間同步服務(wù)器,修改master的/etc/ntp.conf,添加
restrict 192.168.x.O mask 255.255.255.0 notrap nomodify
server 127.127.1.0 #local clock
啟動服務(wù)
#service ntpd start
#chkconfig ntpd on
在slave1和slave2上添加定時任務(wù),執(zhí)行#crontab -e命令,添加如下內(nèi)容
0 1 * * * root /usr/sbin/ntpdate master >> /root/ntpdate.log 2>&1
3.3.6 配置yum源
設(shè)置虛擬機(jī)master,使用ISO鏡像文件,如圖6。
在master上掛載光驅(qū)
#mkdir /media/cdh5
#mount -o loop -t iso9660 /dev/cdrom /media/cdh5
在master上創(chuàng)建文件/etc/yum.repos.d/cloudera-cdh5.repo,添加
[cloudera-cdh5]
name=Clouderas Distribution for Hadoop, Version 5
baseurl=file:///media/cdh5/cdh/5.4.0/
gpgcheck=O
enabled= 1
在slave1和slave2上創(chuàng)建文件/etc/yum.repos.d/cloudera-cdh5.repo,添加
[cloudera-cdh5]
name=Clouderas Distribution for Hadoop, Version 5
baseurl=http://master/media_cdh5/cdh/5.4.0/
gpgcheck=O
enabled= 1
在master上啟動web服務(wù)
#service httpd start
#chkconfig httpd on
在master上創(chuàng)建相應(yīng)軟連接并測試
#ln -s /media/cdh5 /var/www/html/media_cdh5
#yum clean all
#yum list |grep hadoop-hdfs
3.3.7安裝HDFS
在master上安裝
yum install -y hadoop hadoop-hdfs hadoop-client hadoop-doc \
hadoop-debuginfo hadoop-hdfs-namenode \
hadoop-hdfs-secondarynamenode
在slave1和slave2節(jié)點(diǎn)上安裝
yum install -y hadoop hadoop-hdfs hadoop-client hadoop-doc \
hadoop-debuginfo hadoop-hdfs-datanode
3.3.8安裝YARN
在master上安裝
yum install -y hadoop-yarn hadoop-yarn-resourcemanager
在slave1和slave2節(jié)點(diǎn)上安裝
yum install hadoop-yarn hadoop-yarn-nodemanager hadoop-mapreduce -y
3.3.9配置HAdoop環(huán)境變量
在master配置環(huán)境變量,在/root/.bashrc文件添加如下內(nèi)容
#HADOOP
export HADOOP_HOME=/usr/lib/hadoop
export HADOOP_HDFS_HOME=/usr/lib/hadoop-hdfs
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=/usr/lib/hadoop-yarn
export HADOOP_LIBEXEC_DIR=${HADOOP_HOME}/libexec
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
執(zhí)行如下命令使配置生效,并發(fā)送到slave1和slave2
#source .bashrc
#scp .bashrc slave1: ~
#scp .bashrc slave2: ~
Hadoop有兩類重要的配置文件:
只讀默認(rèn)的配置文件:core-default.xml, hdfs-default.xml, yarn-default.xml,mapred-default.xml。
手工配置文件($HADOOP_HOME/etc/hadoop/目錄下): core-site.xml,hdfs-site.xml,yarn-site.xml, mapred-site.xml。
另外,還有幾個重要的Hadoop環(huán)境配置文件:yarn-env.sh,slaves。
在master上修改yarn-env.sh和slave文件,配置yarn的運(yùn)行環(huán)境
#vi $HADOOP_HOME/etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_71/
#vi $HADOOP_HOME/etc/hadoop/slaves
slave1
slave2
修改core-site.xml文件
#vi $HADOOP_HOME/etc/hadoop/core-site.xml
修改hdfs-site.xml文件
#vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
在master節(jié)點(diǎn)手動創(chuàng)建dfs.namenode.name.dir的本地目錄
#mkdir -p /data/dfs/nn
在slave1和slave2節(jié)點(diǎn)手動配置創(chuàng)建dfs.datanode.data.dir的本地目錄
#mkdir -p /data/dfs/dn
在所有主機(jī)上修改所有者權(quán)限
#chown -R hdfs:hdfs /data/dfs
下面列出一些需要關(guān)注的資源分配參數(shù),如表2。
配置yarn-site.xml文件
增加
修改
配置mapred-site.xml
復(fù)制配置到其他節(jié)點(diǎn),復(fù)制.bashrc和hadoop配置文件到slave1和slave2
#scp .bashrc slave1: ~
#scp .bashrc slave2: ~
#scp -r /etc/hadoop/conf slave1:/etc/hadoop/
#scp -r /etc/hadoop/conf slave2:/etc/hadoop/
在master節(jié)點(diǎn)上進(jìn)行格式化
#sudo -u hdfs hadoop namenode –format
3.3.10啟動HDFS集群
在master上啟動
#service hadoop-hdfs-namenode start
#service hadoop-hdfs-secondarynamenode start
在slave1和slave2上啟動
#service hadoop-hdfs-datanode start
通過jsp命令查看進(jìn)程,確認(rèn)HDFS集群是否成功啟動
登錄web控制臺,查看HDFS集群狀態(tài),http://192.168.6.101:50070,如圖7
3.3.11創(chuàng)建HDFS目錄
創(chuàng)建/temp臨時目錄,并設(shè)置權(quán)限為1777
#sudo –u hdfs hadoop fs –mkdir –p /tmp/hadoop-yarn
#sudo –u hdfs hadoop fs –chmod –R 1777 /tmp
創(chuàng)建/user用戶目錄,并設(shè)置權(quán)限為777
#sudo –u hdfs hadoop fs –mkdir /user
#sudo –u hdfs hadoop fs –chmod 777 /user
創(chuàng)建yarn.nodemanager.remote-app-log-dir目錄
#sudo –u hdfs hadoop fs –mkdir –p /var/log/hadoop-yarn/apps
#sudo –u hdfs hadoop fs –chown yarn:mapred /var/log/hadoop-yarn/apps
#sudo –u hdfs hadoop fs –chmod 1777 /var/log/hadoop-yarn/apps
#sudo –u hdfs hadoop fs –chmod 1777 /tmp/hadoop-yarn
3.3.12啟動YARN集群
在master上啟動
#service hadoop-yarn-resourcemanager start
在slave1和slave2上啟動
#service hadoop-yarn-nodemanager start
通過jsp命令查看進(jìn)程,確認(rèn)YARN集群是否成功啟動
通過Web控制臺,查看ResourceManager狀態(tài),http://192.168.6.101:8088,如圖8。
通過Web控制臺,查看NodeManager狀態(tài),http://192.168.6.102:8042,如圖9。
4 測試Hadoop集群
在master上執(zhí)行
#sudo –u hdfs hadoop fs –mkdir –p /input/wordcount
#mkdir /tmp/input
#echo “hello hadoop hello word xiaonan” > /tmp/input/test1.txt
#sudo –u hdfs hadoop fs –put /tmp/input/*.txt /input/wordcount
#sudo –u hdfs hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount /input/wordcount /output/wc01
執(zhí)行結(jié)果如圖10所示。
5 總結(jié)
測試結(jié)果顯示,建立在虛擬機(jī)上的Hadoop集群已經(jīng)可以正常運(yùn)行,可在上面進(jìn)行實(shí)驗和應(yīng)用開發(fā)。本文從簡化搭建過程和充分利用機(jī)器性能出發(fā),在單機(jī)上通過虛擬化軟件,虛擬出三臺Linux主機(jī),搭建了分布式Hadoop集群。在搭建過程中,有幾點(diǎn)需要注意:虛擬機(jī)安裝時,就要配置好主機(jī)的靜態(tài)IP和主機(jī)名,這樣可以方便后面的操作;當(dāng)安裝或運(yùn)行時發(fā)生錯誤,可以查看相應(yīng)的log文件,這會對找出問題很有幫助。
參考文獻(xiàn):
[1] 付偉,嚴(yán)博,吳曉平.云計算實(shí)驗平臺建設(shè)關(guān)鍵技術(shù)研究[J].實(shí)驗室研究與探索,2013(11):78-81.
[2] 張興旺,李晨暉,秦曉珠.構(gòu)建于廉價計算機(jī)集群上的云存儲的研究與初步實(shí)現(xiàn)[J].情報雜志,2011(11):166-171,182.
[3](美)Tom White.Hadoop權(quán)威指南[M].2版.周敏奇,王曉玲,金澈清,等.譯.北京:清華大學(xué)出版社,2011:9-12.