1. 程式人生 > >部署HDFS HA的環境

部署HDFS HA的環境

shared tom tro source 多個 erp .config host error


===> 環境架構部署規劃:

bigdata1 NameNode ResourceManager Zookeeper JournalNode failOverController

bigdata2 NameNode ResourceManager Zookeeper JournalNode failOverController

bigdata3 DataNode NodeManager Zookeeper

bigdata4 DataNode NodeManager



===> 準備環境:

(*)清除之前的配置

(*)安裝JDK、修改/etc/hosts文件、關閉防火墻、免密碼登錄

###############################################################################

hdfs-site.xml

<!--nameservice 名子

此處必須與core-site文件中fs.defaultFS的值一致-->

<property>

<name>dfs.nameservices</name>

<value>mycluster</value>

</property>

<!--ns1 下面有兩個 namenode, nn1,nn2-->

<property>

<name>dfs.ha.namenodes.mycluster</name>

<value>nn1,nn2</value>

</property>

<!-- nn1,nn2 的rpc 通信地址-->

<property>

<name>dfs.namenode.rpc-address.mycluster.nn1</name>

<value>bigdata1:8020</value>

</property>

<property>

<name>dfs.namenode.rpc-address.mycluster.nn2</name>

<value>bigdata2:8020</value>

</property>

<!-- nn1, nn2 的 http 通信地址-->

<property>

<name>dfs.namenode.http-address.mycluster.nn1</name>

<value>bigdata1:50070</value>

</property>

<property>

<name>dfs.namenode.http-address.mycluster.nn2</name>

<value>bigdata2:50070</value>

</property>

<!--指定 JournalNode 的日誌在 JournalNode 上的存放位置,ns1 表示保存ns1的日誌-->

<property>

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

<value>qjournal://bigdata1:8485;bigdata2:8485/mycluster</value>

</property>


<!-- 配置失敗自動切換實現方式 -->

<property>

<name>dfs.client.failover.proxy.provider.mycluster</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>


<!-- 配置隔離機制需要ssh免密碼登陸 -->

<property>

<name>dfs.ha.fencing.ssh.private-key-files</name>

<value>/root/.ssh/id_rsa</value>

</property>


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

<property>

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

<value>30000</value>

</property>

<property>

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

<value>/data/journal</value>

</property>


<!--開啟 NameNode 失敗自動切換

這指定應將群集設置為自動故障轉移。在你的core-site.xml文件中,添加:

<property>

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

<value> bigdata1:2181,bigdata2:2181,bigdata3:2181 </value>

</property>-->

<property>

<name> dfs.ha.automatic-failover.enabled </name>

<value>true</value>

</property>

###############################################################################

core-site.xml

<!--HDFS數據保存的目錄,默認是Linux的tmp目錄-->

<property>

<name>hadoop.tmp.dir</name>

<value>/data/app/hadoop-2.7.1/tmp/</value>

</property>


<!--指定hdfs 的nameservice 為 ns1-->

<property>

<name>fs.defaultFS</name>

<value>hdfs://mycluster</value>

</property>


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

<property>

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

<value>bigdata1,bigdata2,bigdata3</value>

</property>


###############################################################################

mapred-site.xml

<!--MR程序運行的容器是Yarn-->

<property>

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

<value>yarn</value>

</property>

###############################################################################

yarn-site.xml

<!--開啟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>bigdata1</value>

</property>

<property>

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

<value>bigdata2</value>

</property>


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

<property>

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

<value>bigdata1:2181,bigdata2:2181,bigdata3:2181</value>

</property>

<!--NodeManager運行MR任務的方式-->

<property>

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

<value>mapreduce_shuffle</value>

</property>


###############################################################################

slaves

bigdata3

bigdata4

###############################################################################

===> 將配置好的安裝文件拷貝到其它幾臺主機上

scp -r hadoop-2.7.1 bigdata2:/data/app

scp -r hadoop-2.7.1 bigdata3:/data/app

scp -r hadoop-2.7.1 bigdata4:/data/app


===> 啟動journalnode:

hadoop-daemon.sh start journalnode


===> 格式化NameNode

註意,這裏需要創建core-site.xml 文件中 hadoop.tmp.dir 所指定的目錄,否則會報錯,

此配置文件指定的目錄為/data/app/hadoop-2.7.1/tmp/,因此需要先創建目錄

mkdir /data/app/hadoop-2.7.1/tmp/


格式化NameNode

hdfs namenode -format

===> 將 tmp 目錄下的 dfs 目錄拷貝到 bigdata2 中相同的目錄下

scp -r /data/app/hadoop-2.7.1/tmp/dfs bigdata2:/data/app/hadoop-2.7.1/tmp

===> 格式化 zookeeper(bigdata1):

需啟動 zookeeper 才能執行成功,否則會提示:WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect

java.net.ConnectException: 拒絕連接

zkServer.sh start (在 bigdata1,bigdata2,bigdata3上啟動,即,zookeeper 集群所在的機器)

hdfs zkfc -formatZK

===> 至此,環境部署完畢,啟動整個集群環境:

1. 啟動 zookeeper(bigdata1,bigdata2,bigdata3):

(若不先啟動zookeeper,namenode會全部為standby 狀態)

zkServer.sh start

2. 啟動 hdfs 集群:

start-all.sh (在bigdata1上啟動)

yarn-daemon.sh start resourcemanager (在 bigdata2 上啟動)

===> 各主機執行 jps 狀態:

##############################################################

[root@bigdata1 app]# jps

22224 JournalNode

22400 DFSZKFailoverController

22786 Jps

22019 NameNode

21405 QuorumPeerMain

22493 ResourceManager

##############################################################

[root@bigdata2 app]# jps

9408 QuorumPeerMain

9747 DFSZKFailoverController

9637 JournalNode

9929 Jps

9850 ResourceManager

9565 NameNode

##############################################################

[root@bigdata3 app]# jps

7664 DataNode

7531 QuorumPeerMain

7900 Jps

7775 NodeManager

##############################################################

[root@bigdata4 ~]# jps

7698 NodeManager

7587 DataNode

7823 Jps

##############################################################

測試:訪問 50070 端口網頁,其中有顯示namenode 的狀態信息(active/ standby)

可以kill 掉 activ 機器的 NameNode 進程,然後查看另一臺 NameNode 的狀態信息



部署HDFS HA的環境