最近要搭hadoop環(huán)境,不想裝雙系統(tǒng),所以就想在虛擬機上實驗一番 環(huán)境準(zhǔn)備 1、光盤鏡像:CentOS-6.0-i386-bin-DVD.iso 2、VMware10 3、hadoop版本:hahadoop-2.2.0 4、jdk1.8.0 我們要建立一個具有如下配置的集群: host name ip address os 1 master 192.168
最近要搭hadoop環(huán)境,不想裝雙系統(tǒng),所以就想在虛擬機上實驗一番
環(huán)境準(zhǔn)備
1、光盤鏡像:CentOS-6.0-i386-bin-DVD.iso
2、VMware10
3、hadoop版本:hahadoop-2.2.0
4、jdk1.8.0
我們要建立一個具有如下配置的集群:
host name | ip address | os | |
1 | master | 192.168.230.128 | CentOS6.0 |
2 | slave1 | 192.168.230.129 | CentOS6.0 |
安裝和配置步驟具體如下:
如果你對VMWare和網(wǎng)絡(luò)配置比較熟悉,可以忽略這一步,但是后面配置IP地址時具體的參數(shù)可能和我說的不一樣。如果你想通過一步一步操作就能成功的話,就需要這些設(shè)置
通過VMWare -> Edit -> Virtual Network Editor打開如下對話框:
在上面的列表中選中VMnet8 NAT那一行,然后按圖設(shè)置所有內(nèi)容,之后點擊NAT Setting按鈕,打開如下對話框,確保各個參數(shù)如圖中所示設(shè)置。
創(chuàng)建虛擬機比較簡單,注意VMnet配置使用NAT就可以了,創(chuàng)建兩個centOS6虛擬機,當(dāng)然為了方便,最好裝一下VMware Tools,這種資料網(wǎng)上很多,就不贅述了。
關(guān)掉SELINUX:vi /etc/selinux/config ,設(shè)置SELINUX=disabled,保存退出。
關(guān)閉防火墻:/sbin/service iptables stop;chkconfig --level 35 iptables off
修改IP地址為靜態(tài)地址:vi /etc/sysconfig/network-scripts/ifcfg-eth0,將其內(nèi)容改為如下圖所示,注意HWADDR那一行,你所創(chuàng)建的虛擬機的值很可能與之不同,保持原值,不要修改它!
修改主機名稱: vi /etc/sysconfig/network,將其內(nèi)容改為如下圖所示:
修改hosts映射:vi /etc/hosts,將其內(nèi)容改為如下圖所示。我們在這里加入了master和slave1的映射項。(這里我把localhost都給刪了,最好還是保留吧,直接在后面append這些映射項就可以了)
執(zhí)行:service network restart 以重啟網(wǎng)絡(luò)。
下載最新版本的jdk,然后在namenode和datanode節(jié)點上安裝
rpm -ivh jdk-8-linux-i586.rpmroot用戶登陸,命令行中執(zhí)行命令”vi /etc/profile”,配置環(huán)境變量
保存并退出,執(zhí)行以下命令使配置生效
source /etc/profile
在終端輸入java –version 查看java配置情況
(1)所有節(jié)點執(zhí)行以下命令,生成rsa密鑰對:
ssh-keygen -t rsa
這將在/root/.ssh/目錄下生成一個私鑰id_rsa和一個公鑰id_rsa.pub。
(2)將所有datanode節(jié)點的公鑰id_rsa.pub傳送到namenode上:
cp id_rsa.pub datanode01.id_rsa.pub//復(fù)制一份id_rsa.pub
scp datanode01.id_rsa.pub namenode節(jié)點ip地址:/root/.ssh/
//將公鑰文件傳送到namenode
(3)namenode節(jié)點上綜合所有公鑰(包括自身)并傳送到所有節(jié)點上
cp id_rsa.pub authorized_keys //authorized_keys名字不能錯!
cat datanode01.id_rsa.pub >> authorized_keys
然后使用SSH協(xié)議將所有公鑰信息authorized_keys復(fù)制到所有DataNode的.ssh目錄下
scp authorized_keys data節(jié)點ip地址: /root/.ssh/
這樣配置過后,所有節(jié)點之間可以相互SSH無密碼登陸,可以通過命令
“ssh 節(jié)點ip地址”來驗證。
配置完畢,在namenode上執(zhí)行“ssh 本機,所有數(shù)據(jù)節(jié)點”命令,因為ssh執(zhí)行一次之后將不會再詢問。
在namenode和datanode節(jié)點上的/usr/etc/目錄下新建hadoop文件夾,將hadoop-2.2.0解壓到namenode節(jié)點的hadoop文件夾下(對于datanode節(jié)點上的hadoop,將用scp指令直接從namenode節(jié)點拷貝過去,這樣更方便一些),修改namenode節(jié)點的/etc/profile文件,在后面添加環(huán)境變量,如下圖所示:
保存并退出,執(zhí)行以下命令使配置生效
source /etc/profile
1)解壓縮hadoop-2.2.0.tar.gz
tar -zxf hadoop-2.2.0.tar.gz
默認(rèn)解壓縮到當(dāng)前目錄下面,這里解壓縮/usr/etc/hadoop/目錄下面
2) 修改hadoop配置文件
打開hadoop-2.2.0/etc/hadoop,修改里面的配置文件
a) hadoop-env.sh,找到里面的JAVA_HOME,修改為實際地址(java_home不能寫${JAVA_HOME},經(jīng)過測試)
b) yarn-env.sh ,同樣找到里面的JAVA_HOME,修改為實際路徑(java_home不能寫${JAVA_HOME},經(jīng)過測試)
c) slave 這個文件配置所有datanode節(jié)點,以便namenode搜索,本例配置如下
slave1
d) core-site.xml
注意fs.defaultFS為2.2.0新的變量,代替舊的:fs.default.name
e) hdfs-site.xml
新的:dfs.namenode.name.dir,舊:dfs.name.dir,新:dfs.datanode.name.dir,舊:dfs.data.dir
dfs.replication確定 data block的副本數(shù)目,hadoop基于rackawareness(機架感知)默認(rèn)復(fù)制3份分block,(同一個rack下兩個,另一個rack下一 份,按照最短距離確定具體所需block, 一般很少采用跨機架數(shù)據(jù)塊,除非某個機架down了)
f) mapred-site.xml.template(或者mapred-site.xml,這兩個名字都可以,已通過測試)
配置其使用 Yarn 框架執(zhí)行 map-reduce 處理程序
這個地方需要把mapred-site.xml.template復(fù)制重新命名
新的計算框架取消了實體上的jobtracker, 故不需要再指定mapreduce.jobtracker.addres,而是要指定一種框架,這里選擇yarn. 備注2:hadoop2.2.還支持第三方的計算框架,但沒怎么關(guān)注過。
g) yarn-site.xml
3) 將上述文件配置好后,將hadoop-2.2.0文件復(fù)制到其余datanode機器上的相同路徑下。
scp -r /usr/etc/hadoop/hadoop-2.2.0 slave1:/usr/etc/hadoop
切換到root用戶,修改/etc/profile文件 設(shè)置hadoop環(huán)境變量,
增加之后保存,設(shè)置生效:source /etc/profile
最后兩行特殊說明下,有的文章中遺漏掉這部分配置,最后在啟動hadoop2.2時報了下面的錯誤
Hadoop 2.2.0 - warning: You have loaded library /home/hadoop/2.2.0/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard.
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Starting namenodes on [Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /home/hadoop/2.2.0/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now. It's highly recommended that you fix the library with 'execstack -c', or link it with '-z noexecstack'. localhost] sed: -e expression #1, char 6: unknown option to `s' HotSpot(TM): ssh: Could not resolve hostname HotSpot(TM): Name or service not known 64-Bit: ssh: Could not resolve hostname 64-Bit: Name or service not known Java: ssh: Could not resolve hostname Java: Name or service not known Server: ssh: Could not resolve hostname Server: Name or service not known VM: ssh: Could not resolve hostname VM: Name or service not known
配置完成之后需要重啟電腦,所有datanode節(jié)點也需要對環(huán)境變量增加上面配置,配置完成之后重啟電腦
1)hadoop namenode的初始化,只需要第一次的時候初始化,之后就不需要了
cd /usr/etc/hadoop/hadoop-2.2.0/bin
hdfs namenode -format
2)啟動
啟動:在namenode機器上,進入/usr/etc/hadoop/hadoop-2.2.0/sbin
執(zhí)行腳本start-all.sh
3) 關(guān)閉
在namenode節(jié)點上,進入/usr/etc/hadoop/hadoop-2.2.0/sbin
stop-all.sh
啟動hadoop后,在主節(jié)點的瀏覽器中輸入地址查看
http://master:50070
http://master:8088
http://master:19888(訪問有問題,不知道為什么)
至此,hadoop平臺的搭建全部結(jié)束。
=================================================================================
PS:配置文件里面的文件夾如果不存在不需要自己創(chuàng)建,會自動生成,已經(jīng)過測試。
DataNode啟動不了,可能是防火墻沒關(guān),也可能是需要編輯/etc/hosts,改成這樣:
127.0.0.1 localhost
192.168.230.128 master
192.168.230.129 slave1
再重新啟動就可以了。(用jps可能看不到slave1,但是http://master:50070可以看到slave1已經(jīng)啟動成功了)
1 )datanode無法啟動的問題,報錯如下:
2013-06-08 17:57:27,519 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block pool BP-770817654-172.17.50.119-1370685416301 (storage id DS-803461661-172.17.50.119-50010-1370681848198) service to localhost/127.0.0.1:9000 java.io.IOException: Incompatible clusterIDs in /usr/hadoop/tmp/dfs/data: namenode clusterID = CID-cd47cf1e-0f81-41b0-97df-7407db9f1fa5; datanode clusterID = CID-0462092f-2740-40a4-bf96-246be2efc49f at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:390) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:190) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:218) at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:851) at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:822) at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:279) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:218) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:661) at java.lang.Thread.run(Thread.java:619)
通過在網(wǎng)上查找資料得出:每次namenode format會重新創(chuàng)建一個namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的數(shù)據(jù),但是沒有清空datanode下的數(shù)據(jù),導(dǎo)致啟動時失敗,所要做的就是每次fotmat前,清空tmp一下 的所有目錄.
最后,刪除/usr/hadoop/tmp下的所有內(nèi)容即可。
2 )運行腳本的時候報out of memory
解決的方法是:修改配置文件hadoop-env.sh中的export HADOOP_CLIENT_OPTS="-Xmx1024m $HADOOP_CLIENT_OPTS"這個選項,把XMX改大就可以了。
=========================================================================
參考文章:http://blog.itpub.net/7483882/viewspace-1069062/
http://blog.csdn.net/dyllove98/article/details/9228673
http://blog.csdn.net/w13770269691/article/details/16883663
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com