Hadoop 2.4.1 HA集群搭建

一:注意事項和準備工作

? 1.1 ?準備3臺Linux,可以ubuntu或者centOS ,本機設備性能不高,建議用設置開機進入命令行,然后用遠程操作

? 1.2 ?a .linux 必須關掉防火墻 ?b.設置ip和主機名并且配置ip和主機映射關系(不懂百度一下)

? ? ? ? ?b.用root用戶進行操作,后面可以遇到最大limit文件數的問題,root可以直接操作,比較方便!

?1.3 群集規劃


二:操作步驟

?2.1 安裝jdk并設置環境變量(不懂可以看上一篇Hadoop偽分布搭建)

?2.2?配置免密碼登陸

? ?a.?#首先要配置sunshine02到sunshine02、sunshine03、sunshine04的免密碼

? ?b.?#在sunshine02上生產一對鑰匙?

? ? ? ? ? ? ? ? ? ssh-keygen -t rsa

? ?c .#將公鑰拷貝到其他節點,包括自己

? ? ? ? ? ? ? ? ? ssh-copy-id sunshine02

? ? ? ? ? ? ? ? ? ssh-copy-id sunshine03

? ? ? ? ? ? ? ? ? ssh-copy-id sunshine04

? d.?sunshine03到sunshine02、sunshine03、sunshine04的免密碼同上操作

? e.?sunshine04到sunshine02、sunshine03、sunshine04的免密碼同上操作

? f. 注意:兩個namenode之間要配置ssh免密碼登陸

?2.3?安裝配置zooekeeper集群(在sunshine02上)

? a.?解壓tar -zxvf zookeeper-3.4.5.tar.gz -C /home/linwentao/desktop/app ? (后面自己路徑可以自己定義)

? b.?修改配置

? ? ? ? ? ? cd /home/linwentao/desktop/app/zookeeper-3.4.5/conf/

? ? ? ? ? ? cp zoo_sample.cfg zoo.cfg

? ? ? ? ? ? vim zoo.cfg ?修改:dataDir=/home/linwentao/desktop/app/zookeeper-3.4.5/tmp

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dataLogDir=/home/zookeeper/logs

? ? ? ? ? ? 在最后添加:

? ? ? ? ? ?server.1=sunshine02:2888:3888

? ? ? ? ? ?server.2=sunshine03:2888:3888

? ? ? ? ? ?server.3=sunshine04:2888:3888

? ? ? ? ? 保存退出

? ? ? ? ?創建一個tmp和logs文件夾

? ? ? ? ? mkdir /home/linwentao/desktop/app/zookeeper-3.4.5/tmp

? ? ? ? ? mkdir /home/linwentao/desktop/app/zookeeper-3.4.5/logs

? ? ? ? ? ?創建一個空文件

? ? ? ? ? ?touch /home/linwentao/desktop/app/zookeeper-3.4.5/tmp/myid

? ? ? ? ? ?向該文件寫入ID?

? ? ? ? ? ? echo 1 > /home/linwentao/desktop/app/zookeeper-3.4.5/tmp/myid

?c.?將配置好的zookeeper拷貝到其他節點(sunshine03,sunshine04)

? ? scp -r /home/linwentao/desktop/app/zookeeper-3.4.5/ ?sunshine03:/home/linwentao/desktop/app/

? ? scp -r /home/linwentao/desktop/app/zookeeper-3.4.5/ ?sunshine04:/home/linwentao/desktop/app/

? ? 注意:必須修改sunshine03、sunshine04 里面的myid的值(對應值為前面配置zoo.cfg最后server后面的數值)

? ? sunshine03-----2 ? ? ? ?sunshine04----3

2.4 安裝hadoop群集

? a. 先對一臺進行安裝,然后進行復制或傳輸即可

? b .修改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/linwentao/desktop/app/hadoop-2.4.1/tmp</value>

? ? ? ? ? ? </property>

? ? ? ? ? ? <!-- 指定zookeeper地址 -->

? ? ? ? ? ? ?<property>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <name>ha.zookeeper.quorum</name>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<value>sunshine02:2181,sunshine03:2181,sunshine04:2181</value>?

? ? ? ? ? ? ? ? </property>

? </configuration>

? ?c. 修改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>sunshine02:9000</value>

? ? ? ? ? ? ? ? ? </property>

? ? ? ? ? ? ? ? ?<!-- nn1的http通信地址 -->

? ? ? ? ? ? ? ? ?<property>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <name>dfs.namenode.http-address.ns1.nn1</name>

? ? ? ? ? ? ? ? ? ? ? ? ? ? <value>sunshine02:50070</value>

? ? ? ? ? ? ? ? ?</property>

? ? ? ? ? ? ? ? ? <!-- nn2的RPC通信地址 -->

? ? ? ? ? ? ? ? ? <property>

? ? ? ? ? ? ? ? ? ? ? ? ? ?<name>dfs.namenode.rpc-address.ns1.nn2</name>

? ? ? ? ? ? ? ? ? ? ? ? ? <value>sunshine03:9000</value>

? ? ? ? ? ? ? ? ? ? </property>

? ? ? ? ? ? ? ? ?<!-- nn2的http通信地址 -->

? ? ? ? ? ? ? ? <property>

? ? ? ? ? ? ? ? ? ? ? ? ? ?<name>dfs.namenode.http-address.ns1.nn2</name>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<value>sunshine03:50070</value>

? ? ? ? ? ? ? ? </property>

? ? ? ? ? ? ? <!-- 指定NameNode的元數據在JournalNode上的存放位置 -->

? ? ? ? ? ? ? <property>

? ? ? ? ? ? ? ? ? ? ? <name>dfs.namenode.shared.edits.dir</name>


? ? ? ? ? ? ? ? ? ? ?<value>qjournal://sunshine02:8485;sunshine03:8485;sunshine04:8485/ns1</value> ?

? ? ? ? ? ? ? </property>

? ? ? ? ? ? ?<!-- 指定JournalNode在本地磁盤存放數據的位置 -->

? ? ? ? ? ? ?<property>

? ? ? ? ? ? ? ? ? ? ? ? <name>dfs.journalnode.edits.dir</name>

? ? ? ? ? ? ? ? ? ? ? ? ?<value>/home/linwentao/desktop/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/root/.ssh/id_rsa</value>

? ? ? ? ? ? ? ? ? ? </property>

? ? ? ? ? ? ? ? ? ?<!-- 配置sshfence隔離機制超時時間 -->

? ? ? ? ? ? ? ? ? ?<property>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<name>dfs.ha.fencing.ssh.connect-timeout</name>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <value>30000</value>

? ? ? ? ? ? ? ? ? ? ?</property>

? ? ? ?</configuration>

?d.修改mapred-site.xml

? ? ? ? ? ? ?<configuration>

????????????????????????????<!-- 指定mr框架為yarn方式 -->

????????????????????????????<property>

????????????????????????????????????????<name>mapreduce.framework.name</name>

????????????????????????????????????????<value>yarn</value>

????????????????????????????????</property>

????????????</configuration>

e.修改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>sunshine02</value>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?</property>

????????????????????????????????????????????<property>

? ????????????????????????????????????????????????????<name>yarn.resourcemanager.hostname.rm2</name>

????????????????????????????????????????????????????? <value>sunshine03</value>

????????????????????????????????????????????</property>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<!-- 指定zk集群地址 -->

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<property>

? ????????????????????????????????????????????<name>yarn.resourcemanager.zk-address</name>

? ?????????????????????????????????????????????<value>sunshine02:2181,sunshine03:2181,sunshine04:2181</value>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </property>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <property>

????????????????????????????????????????????????? <name>yarn.nodemanager.aux-services</name>

????????????????????????????????????????????????? <value>mapreduce_shuffle</value>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?</property>

? ? ? ? ? ? ?</configuration>

? f .修改slaves(slaves是指定子節點的位置,因為要在sunshine02上啟動HDFS、在sunshine03啟動yarn,所以sunshine02上的slaves文件指定的是 ? ? ?datanode的位置,sunshine03上的slaves文件指定的是nodemanager的位置)

? ? ? sunshine02 ? : sunshine02、sunshine03、sunshine04

? ? ? sunshine03 ? : sunshine02、sunshine03、sunshine04

三:啟動操作(嚴格按照下面的步驟)

? ?3.1?啟動zookeeper集群(分別在sunshine02、sunshine03、sunshine04上啟動zk)

? ? ? ? ? ? ?cd /home/linwentao/desktop/app/zookeeper-3.4.5/bin/

? ? ? ? ? ? ?./zkServer.sh start

? ? ? ? ? ?#查看狀態:一個leader,兩個follower

? ? ? ? ? ?./zkServer.sh status

?3.2?啟動journalnode(分別在在sunshine02、sunshine03、sunshine04上執行)

? ? ? ? ? ? ? ? ? ?cd /home/linwentao/desktop/app/hadoop-2.4.1

? ? ? ? ? ? ? ? ? sbin/hadoop-daemon.sh start journalnode

? ? ?#運行jps命令檢驗,sunshine02、sunshine03、sunshine04上多了JournalNode進程

3.3?格式化HDFS

? ? ? #在weekend01上執行命令:?hdfs namenode -format

? ? ? #格式化后會在根據core-site.xml中的hadoop.tmp.dir配置生成個文件,這里我配??置的是/home/linwentao/desktop/app/hadoop- ? ? ? ? ? ? ? ? ? ? ? ? 2.4.1/?tmp,然后將/home/linwentao/desktop/app/hadoop-2.4.1/ tmp拷貝到sunshine03的/weekend/hadoop-2.4.1/下。

? ? ? ? ? ? ? scp -r tmp/ ?sunshine03:/home/linwentao/desktop/app/hadoop-2.4.1/

3.4?格式化ZKFC(在sunshine02上執行即可)

? ? ? ? ? ? hdfs zkfc -formatZK

3.5?啟動HDFS(在sunshine02上執行)

? ? ? ? ? start-dfs.sh

3.6?啟動YARN(可以在sunshine02、sunshine03、sunshine04其中一臺開,建議在sunshine04,?為把namenode和resourcemanager分開是因為性能問題,因為他們都要占用大量資源,所以把他們分開了,他們分開了就要分別在不同的機器上啟動)

四:驗證

?http://192.168.157.140:50070

NameNode 'sunshine02:9000' (active)

http://1192.168.157.141:50070

NameNode 'sunshine03:9000' (standby)

驗證HDFS HA

首先向hdfs上傳一個文件

hadoop fs -put /etc/profile /profile

hadoop fs -ls /

然后再kill掉active的NameNode

kill -9 <pid of NN>

通過瀏覽器訪問:http://192.168.157.141:50070

NameNode 'sunshine03:9000' (active)

這個時候weekend02上的NameNode變成了active

在執行命令:

hadoop fs -ls /

剛才上傳的文件依然存在!!!

手動啟動那個掛掉的NameNode

sbin/hadoop-daemon.sh start namenode

通過瀏覽器訪問:http://192.168.157.140:50070

NameNode 'sunshine02:9000' (standby)

OK,大功告成!!!

測試集群工作狀態的一些指令 :

bin/hdfs dfsadmin -report 查看hdfs的各節點狀態信息

bin/hdfs haadmin -getServiceState nn1 獲取一個namenode節點的HA狀態

sbin/hadoop-daemon.sh start namenode ?單獨啟動一個namenode進程

./hadoop-daemon.sh start zkfc ? 單獨啟動一個zkfc進程

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容