溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Hadoop框架中如何配置HDFS高可用環(huán)境

發(fā)布時(shí)間:2021-12-09 11:18:05 來(lái)源:億速云 閱讀:417 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要為大家展示了“Hadoop框架中如何配置HDFS高可用環(huán)境”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Hadoop框架中如何配置HDFS高可用環(huán)境”這篇文章吧。

一、HDFS高可用

1、基礎(chǔ)描述

在單點(diǎn)或者少數(shù)節(jié)點(diǎn)故障的情況下,集群還可以正常的提供服務(wù),HDFS高可用機(jī)制可以通過(guò)配置Active/Standby兩個(gè)NameNodes節(jié)點(diǎn)實(shí)現(xiàn)在集群中對(duì)NameNode的熱備來(lái)消除單節(jié)點(diǎn)故障問(wèn)題,如果單個(gè)節(jié)點(diǎn)出現(xiàn)故障,可通過(guò)該方式將NameNode快速切換到另外一個(gè)節(jié)點(diǎn)上。

2、機(jī)制詳解

Hadoop框架中如何配置HDFS高可用環(huán)境

  • 基于兩個(gè)NameNode做高可用,依賴(lài)共享Edits文件和Zookeeper集群;

  • 每個(gè)NameNode節(jié)點(diǎn)配置一個(gè)ZKfailover進(jìn)程,負(fù)責(zé)監(jiān)控所在NameNode節(jié)點(diǎn)狀態(tài);

  • NameNode與ZooKeeper集群維護(hù)一個(gè)持久會(huì)話;

  • 如果Active節(jié)點(diǎn)故障停機(jī),ZooKeeper通知Standby狀態(tài)的NameNode節(jié)點(diǎn);

  • 在ZKfailover進(jìn)程檢測(cè)并確認(rèn)故障節(jié)點(diǎn)無(wú)法工作后;

  • ZKfailover通知Standby狀態(tài)的NameNode節(jié)點(diǎn)切換為Active狀態(tài)繼續(xù)服務(wù);

ZooKeeper在大數(shù)據(jù)體系中非常重要,協(xié)調(diào)不同組件的工作,維護(hù)并傳遞數(shù)據(jù),例如上述高可用下自動(dòng)故障轉(zhuǎn)移就依賴(lài)于ZooKeeper組件。

二、HDFS高可用

1、整體配置

服務(wù)列表HDFS文件YARN調(diào)度單服務(wù)共享文件Zk集群
hop01DataNodeNodeManagerNameNodeJournalNodeZK-hop01
hop02DataNodeNodeManagerResourceManagerJournalNodeZK-hop02
hop03DataNodeNodeManagerSecondaryNameNodeJournalNodeZK-hop03

2、配置JournalNode

創(chuàng)建目錄

[root@hop01 opt]# mkdir hopHA

拷貝Hadoop目錄

cp -r /opt/hadoop2.7/ /opt/hopHA/

配置core-site.xml

<configuration>
    <!-- NameNode集群模式 -->
	<property>
		<name>fs.defaultFS</name>
       	<value>hdfs://mycluster</value>
	</property>
	<!-- 指定hadoop運(yùn)行時(shí)產(chǎn)生文件的存儲(chǔ)目錄 -->
	<property>
		<name>hadoop.tmp.dir</name>
	   <value>/opt/hopHA/hadoop2.7/data/tmp</value>
	</property>
</configuration>

配置hdfs-site.xml,添加內(nèi)容如下

<!-- 分布式集群名稱(chēng) -->
<property>
	<name>dfs.nameservices</name>
	<value>mycluster</value>
</property>

<!-- 集群中NameNode節(jié)點(diǎn) -->
<property>
	<name>dfs.ha.namenodes.mycluster</name>
	<value>nn1,nn2</value>
</property>

<!-- NN1 RPC通信地址 -->
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn1</name>
	<value>hop01:9000</value>
</property>

<!-- NN2 RPC通信地址 -->
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn2</name>
	<value>hop02:9000</value>
</property>

<!-- NN1 Http通信地址 -->
<property>
	<name>dfs.namenode.http-address.mycluster.nn1</name>
	<value>hop01:50070</value>
</property>

<!-- NN2 Http通信地址 -->
<property>
	<name>dfs.namenode.http-address.mycluster.nn2</name>
	<value>hop02:50070</value>
</property>

<!-- 指定NameNode元數(shù)據(jù)在JournalNode上的存放位置 -->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hop01:8485;hop02:8485;hop03:8485/mycluster</value>
</property>

<!-- 配置隔離機(jī)制,即同一時(shí)刻只能有一臺(tái)服務(wù)器對(duì)外響應(yīng) -->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
</property>

<!-- 使用隔離機(jī)制時(shí)需要ssh無(wú)秘鑰登錄-->
<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/root/.ssh/id_rsa</value>
</property>

<!-- 聲明journalnode服務(wù)器存儲(chǔ)目錄-->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/opt/hopHA/hadoop2.7/data/jn</value>
</property>

<!-- 關(guān)閉權(quán)限檢查-->
<property>
	<name>dfs.permissions.enable</name>
	<value>false</value>
</property>

<!-- 訪問(wèn)代理類(lèi)失敗自動(dòng)切換實(shí)現(xiàn)方式-->
<property>
	<name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

依次啟動(dòng)journalnode服務(wù)

[root@hop01 hadoop2.7]# pwd
/opt/hopHA/hadoop2.7
[root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start journalnode

刪除hopHA下數(shù)據(jù)

[root@hop01 hadoop2.7]# rm -rf data/ logs/

NN1格式化并啟動(dòng)NameNode

[root@hop01 hadoop2.7]# pwd
/opt/hopHA/hadoop2.7
bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode

NN2同步NN1數(shù)據(jù)

[root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandby

NN2啟動(dòng)NameNode

[root@hop02 hadoop2.7]# sbin/hadoop-daemon.sh start namenode

查看當(dāng)前狀態(tài)

Hadoop框架中如何配置HDFS高可用環(huán)境

在NN1上啟動(dòng)全部DataNode

[root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanode

NN1切換為Active狀態(tài)

[root@hop01 hadoop2.7]# bin/hdfs haadmin -transitionToActive nn1
[root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1
active

Hadoop框架中如何配置HDFS高可用環(huán)境

3、故障轉(zhuǎn)移配置

配置hdfs-site.xml,新增內(nèi)容如下,同步集群

<property>
	<name>dfs.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>

配置core-site.xml,新增內(nèi)容如下,同步集群

<property>
	<name>ha.zookeeper.quorum</name>
	<value>hop01:2181,hop02:2181,hop03:2181</value>
</property>

關(guān)閉全部HDFS服務(wù)

[root@hop01 hadoop2.7]# sbin/stop-dfs.sh

啟動(dòng)Zookeeper集群

/opt/zookeeper3.4/bin/zkServer.sh start

hop01初始化HA在Zookeeper中狀態(tài)

[root@hop01 hadoop2.7]# bin/hdfs zkfc -formatZK

hop01啟動(dòng)HDFS服務(wù)

[root@hop01 hadoop2.7]# sbin/start-dfs.sh

NameNode節(jié)點(diǎn)啟動(dòng)ZKFailover

這里hop01和hop02先啟動(dòng)的服務(wù)狀態(tài)就是Active,這里先啟動(dòng)hop02。

[hadoop2.7]# sbin/hadoop-daemon.sh start zkfc

Hadoop框架中如何配置HDFS高可用環(huán)境

結(jié)束hop02的NameNode進(jìn)程

kill -9 14422

等待一下查看hop01狀態(tài)

[root@hop01 hadoop2.7]# bin/hdfs haadmin -getServiceState nn1
active

三、YARN高可用

1、基礎(chǔ)描述

Hadoop框架中如何配置HDFS高可用環(huán)境

基本流程和思路與HDFS機(jī)制類(lèi)似,依賴(lài)Zookeeper集群,當(dāng)Active節(jié)點(diǎn)故障時(shí),Standby節(jié)點(diǎn)會(huì)切換為Active狀態(tài)持續(xù)服務(wù)。

2、配置詳解

環(huán)境同樣基于hop01和hop02來(lái)演示。

配置yarn-site.xml,同步集群下服務(wù)

<configuration>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!--啟用HA機(jī)制-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
 
    <!--聲明Resourcemanager服務(wù)-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn01</value>
    </property>

    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hop01</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hop02</value>
    </property>
 
    <!--Zookeeper集群的地址--> 
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hop01:2181,hop02:2181,hop03:2181</value>
    </property>

    <!--啟用自動(dòng)恢復(fù)機(jī)制--> 
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
 
    <!--指定狀態(tài)存儲(chǔ)Zookeeper集群--> 
    <property>
        <name>yarn.resourcemanager.store.class</name>     <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>

</configuration>

重啟journalnode節(jié)點(diǎn)

sbin/hadoop-daemon.sh start journalnode

在NN1服務(wù)格式化并啟動(dòng)

[root@hop01 hadoop2.7]# bin/hdfs namenode -format
[root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start namenode

NN2上同步NN1元數(shù)據(jù)

[root@hop02 hadoop2.7]# bin/hdfs namenode -bootstrapStandby

啟動(dòng)集群下DataNode

[root@hop01 hadoop2.7]# sbin/hadoop-daemons.sh start datanode

NN1設(shè)置為Active狀態(tài)

先啟動(dòng)hop01即可,然后啟動(dòng)hop02。

[root@hop01 hadoop2.7]# sbin/hadoop-daemon.sh start zkfc

hop01啟動(dòng)yarn

[root@hop01 hadoop2.7]# sbin/start-yarn.sh

hop02啟動(dòng)ResourceManager

[root@hop02 hadoop2.7]# sbin/yarn-daemon.sh start resourcemanager

查看狀態(tài)

[root@hop01 hadoop2.7]# bin/yarn rmadmin -getServiceState rm1

Hadoop框架中如何配置HDFS高可用環(huán)境

以上是“Hadoop框架中如何配置HDFS高可用環(huán)境”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI