大資料入門(14)hadoop+yarn+zookeeper叢集搭建
1、右鍵clone虛擬機器,進入圖形介面,修改虛擬機器ip即可,相關環境變數配置都存在
2、叢集規劃:(必須設定主機名,配置主機名和ip的對映關係,每個檔案都需要配置對映關係)
主機名 IP 安裝的軟體 執行的程序
weekend01 192.168.1.113 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)
weekend02 192.168.1.114 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)
weekend03 192.168.1.115 jdk、hadoop ResourceManager
weekend04 192.168.1.116 jdk、hadoop ResourceManager
weekend05 192.168.1.181 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
weekend06 192.168.1.182 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
weekend07 192.168.1.183 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
3、安裝步驟:
1.安裝配置zooekeeper叢集(在weekend05上)
1.1上傳解壓檔案
tar -zxvf zookeeper-3.4.6.tar.gz -C /app
1.1新增一個zoo.cfg配置檔案(/home/admin/app/zookeeper-3.4.6/conf)
$ZOOKEEPER/conf
修改名字:mv zoo_sample.cfg zoo.cfg
1.2修改配置檔案(zoo.cfg)
dataDir=/home/admin/app/zookeeper-3.4.6/data
server.1=192.168.1.181:2888:3888
server.2=192.168.1.182:2888:3888
server.3=192.168.1.183:2888:3888
1.3(dataDir=/home/admin/app/zookeeper-3.4.6/data)在zookeeper-3.4.6/下建立一個data檔案
mkdir data
cd data
echo 1 > myid
cat myid
裡面內容是server.N中的N(server.2裡面內容為2) echo 1 > myid
1.4將配置好的zk拷貝到其他節點(app下)配置zookeeper叢集
scp -r zookeeper-3.4.6 192.168.1.182:/home/admin/app
scp -r zookeeper-3.4.6 192.168.1.182:/home/admin/app
1.5注意:在其他節點上一定要修改myid的內容
在192.168.1.182應該講myid的內容改為2 (echo 2 > myid)
在192.168.1.183應該講myid的內容改為3 (echo 3 > myid)
2.安裝配置hadoop叢集(在weekend01上操作)
2.1解壓
tar -zxvf hadoop-2.4.1.tar.gz -C /app
2.2配置HDFS(hadoop所有的配置檔案都在$HADOOP_HOME/etc/hadoop目錄下)
#將hadoop新增到環境變數中
vim /etc/profile
export JAVA_HOME=/home/admin/app/java/jdk1.7.0_65
export HADOOP_HOME=/home/admin/app/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
#hadoop2.0的配置檔案全部在$HADOOP_HOME/etc/hadoop下
cd /home/admin/app/hadoop-2.4.1/etc/hadoop
2.2.1修改hadoo-env.sh
export JAVA_HOME=/home/admin/app/java/jdk1.7.0_65
2.2.2修改core-site.xml(配置檔案中不要加註釋,容易亂碼)
<configuration>
<!-- 指定hdfs的nameservice為ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1/</value>
</property>
<!-- 指定hadoop臨時目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/admin/app/hadoop-2.4.1/tmpdata</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>192.168.21.181:2181,192.168.21.182:2181,192.168.21.183:2181</value>
</property>
</configuration>
2.2.3修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice為ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有兩個NameNode,分別是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通訊地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>weekend01:9000</value>
</property>
<!-- nn1的http通訊地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>weekend01:50070</value>
</property>
<!-- nn2的RPC通訊地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>weekend02:9000</value>
</property>
<!-- nn2的http通訊地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>weekend02:50070</value>
</property>
<!-- 指定NameNode的元資料在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://weekend05:8485;weekend06:8485;weekend07:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁碟存放資料的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/admin/app/hadoop-2.4.1/journaldata</value>
</property>
<!-- 開啟NameNode失敗自動切換 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失敗自動切換實現方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔離機制時需要ssh免登陸 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/admin/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔離機制超時時間 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
2.2.4修改mapred-site.xml
<configuration>
<!-- 指定mr框架為yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
2.2.5修改yarn-site.xml
<configuration>
<!-- 開啟RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分別指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>weekend03</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>weekend04</value>
</property>
<!-- 指定zk叢集地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>weekend05:2181,weekend06:2181,weekend07:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2.2.6修改slaves(slaves是指定子節點的位置,因為要在weekend01上啟動HDFS、在weekend03啟動yarn,所以weekend01上的slaves檔案指定的是datanode的位置,
weekend03上的slaves檔案指定的是nodemanager的位置)
weekend05
weekend06
weekend07
2.2.7配置免密碼登陸
2.4將配置好的hadoop拷貝到其他節點(app目錄)
scp -r hadoop2.4.1 weekend02:/app
scp -r hadoop2.4.1 weekend03:/app
scp -r hadoop-2.4.1/ weekend04:/app/
scp -r hadoop-2.4.1/ weekend05:/app/
scp -r hadoop-2.4.1/ weekend06:/app/
scp -r hadoop-2.4.1/ weekend07:/app/
4、啟動(嚴格按照一下步驟)
4.1啟動zookeeper叢集(分別在weekend05、weekend06、tcast07上啟動zk)
cd /app/zookeeper-3.4.5/bin/
./zkServer.sh start
#檢視狀態:一個leader,兩個follower
./zkServer.sh status
4.2啟動journalnode(分別在在weekend05、weekend06、tcast07上執行)
cd /app/hadoop-2.4.1
sbin/hadoop-daemon.sh start journalnode
#執行jps命令檢驗,weekend05、weekend06、weekend07上多了JournalNode程序
4.3格式化HDFS(重啟後不用執行此命令,此處只能格式化一次,否則上傳檔案報錯)
#在weekend01上執行命令:
hdfs namenode -format
#格式化後會在根據core-site.xml中的hadoop.tmp.dir配置生成個檔案,這裡我配置的是/weekend/hadoop-2.4.1/tmp,
#然後將/weekend/hadoop-2.4.1/tmp拷貝到weekend02的/weekend/hadoop-2.4.1/下。
scp -r tmp/ weekend02:/home/hadoop/app/hadoop-2.4.1/
##也可以這樣,建議hdfs namenode -bootstrapStandby
4.4格式化ZKFC(在weekend01上執行即可)(重啟需要執行此命令強制啟動zkfc)
hdfs zkfc -formatZK
4.5啟動HDFS(在weekend01上執行)
sbin/start-dfs.sh
4.6啟動YARN(#####注意#####:是在weekend03上執行start-yarn.sh,把namenode和resourcemanager分開是因為效能問題,
#因為他們都要佔用大量資源,所以把他們分開了,他們分開了就要分別在不同的機器上啟動)
sbin/start-yarn.sh
5、瀏覽器訪問
http://192.168.21.113:50070
NameNode 'weekend01:9000' (active)
http://192.168.21.114:50070
NameNode 'weekend02:9000' (standby)
手動啟動zkfc
hdfs hadoop-daemon.sh start zkfc
6、驗證HDFS HA
首先向hdfs上傳一個檔案
hadoop fs -put a.txt
hadoop fs -ls /
然後再kill掉active的NameNode
kill -9 <pid of NN>
通過瀏覽器訪問:http://192.168.21.114:50070
NameNode 'weekend02:9000' (active)
這個時候weekend02上的NameNode變成了active
在執行命令:
hadoop fs -ls /
-rw-r--r-- 3 root supergroup 1926 2014-02-06 15:36 /profile
剛才上傳的檔案依然存在!!!
手動啟動那個掛掉的NameNode
sbin/hadoop-daemon.sh start namenode
通過瀏覽器訪問:http://192.168.21.113:50070
NameNode 'weekend01:9000' (standby)
7、驗證YARN:(在115上執行)
執行一下hadoop提供的demo中的WordCount程式:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out
檢視上傳的檔案塊:
/home/admin/app/hadoop-2.4.1/tmpdata/dfs/data/current/BP-1107823742-192.168.21.113-1540886411460/current/finalized