天天看點

hadoop namenode啟動不了_Hadoop架構:HDFS高可用環境配置

hadoop namenode啟動不了_Hadoop架構:HDFS高可用環境配置

一、HDFS高可用

1、基礎描述

在單點或者少數節點故障的情況下,叢集還可以正常的提供服務,HDFS高可用機制可以通過配置Active/Standby兩個NameNodes節點實作在叢集中對NameNode的熱備來消除單節點故障問題,如果單個節點出現故障,可通過該方式将NameNode快速切換到另外一個節點上。

2、機制詳解

hadoop namenode啟動不了_Hadoop架構:HDFS高可用環境配置
  • 基于兩個NameNode做高可用,依賴共享Edits檔案和Zookeeper叢集;
  • 每個NameNode節點配置一個ZKfailover程序,負責監控所在NameNode節點狀态;
  • NameNode與ZooKeeper叢集維護一個持久會話;
  • 如果Active節點故障停機,ZooKeeper通知Standby狀态的NameNode節點;
  • 在ZKfailover程序檢測并确認故障節點無法工作後;
  • ZKfailover通知Standby狀态的NameNode節點切換為Active狀态繼續服務;

ZooKeeper在大資料體系中非常重要,協調不同元件的工作,維護并傳遞資料,例如上述高可用下自動故障轉移就依賴于ZooKeeper元件。

二、HDFS高可用

1、整體配置

hadoop namenode啟動不了_Hadoop架構:HDFS高可用環境配置

2、配置JournalNode

建立目錄
[[email protected] 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運作時産生檔案的存儲目錄 -->
	<property>
		<name>hadoop.tmp.dir</name>
	   <value>/opt/hopHA/hadoop2.7/data/tmp</value>
	</property>
</configuration>
           
配置hdfs-site.xml

,添加内容如下

<!-- 分布式叢集名稱 -->
<property>
	<name>dfs.nameservices</name>
	<value>mycluster</value>
</property>

<!-- 叢集中NameNode節點 -->
<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中繼資料在JournalNode上的存放位置 -->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hop01:8485;hop02:8485;hop03:8485/mycluster</value>
</property>

<!-- 配置隔離機制,即同一時刻隻能有一台伺服器對外響應 -->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
</property>

<!-- 使用隔離機制時需要ssh無秘鑰登入-->
<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/root/.ssh/id_rsa</value>
</property>

<!-- 聲明journalnode伺服器存儲目錄-->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/opt/hopHA/hadoop2.7/data/jn</value>
</property>

<!-- 關閉權限檢查-->
<property>
	<name>dfs.permissions.enable</name>
	<value>false</value>
</property>

<!-- 通路代理類失敗自動切換實作方式-->
<property>
	<name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
           
依次啟動journalnode服務
[[email protected] hadoop2.7]# pwd
/opt/hopHA/hadoop2.7
[[email protected] hadoop2.7]# sbin/hadoop-daemon.sh start journalnode
           
删除hopHA下資料
[[email protected] hadoop2.7]# rm -rf data/ logs/
           
NN1格式化并啟動NameNode
[[email protected] hadoop2.7]# pwd
/opt/hopHA/hadoop2.7
bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode
           
NN2同步NN1資料
[[email protected] hadoop2.7]# bin/hdfs namenode -bootstrapStandby
           
NN2啟動NameNode
[[email protected] hadoop2.7]# sbin/hadoop-daemon.sh start namenode
           
檢視目前狀态
hadoop namenode啟動不了_Hadoop架構:HDFS高可用環境配置
在NN1上啟動全部DataNode
[[email protected] hadoop2.7]# sbin/hadoop-daemons.sh start datanode
           
NN1切換為Active狀态
[[email protected] hadoop2.7]# bin/hdfs haadmin -transitionToActive nn1
[[email protected] hadoop2.7]# bin/hdfs haadmin -getServiceState nn1
active
           
hadoop namenode啟動不了_Hadoop架構:HDFS高可用環境配置

3、故障轉移配置

配置hdfs-site.xml,新增内容如下,同步叢集

<property>
	<name>dfs.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>
           
配置core-site.xml

,新增内容如下,同步叢集

<property>
	<name>ha.zookeeper.quorum</name>
	<value>hop01:2181,hop02:2181,hop03:2181</value>
</property>
           
關閉全部HDFS服務
[[email protected] hadoop2.7]# sbin/stop-dfs.sh
           
啟動Zookeeper叢集
/opt/zookeeper3.4/bin/zkServer.sh start
           
hop01初始化HA在Zookeeper中狀态
[[email protected] hadoop2.7]# bin/hdfs zkfc -formatZK
           
hop01啟動HDFS服務
[[email protected] hadoop2.7]# sbin/start-dfs.sh
           
NameNode節點啟動ZKFailover

這裡hop01和hop02先啟動的服務狀态就是Active,這裡先啟動hop02。

[hadoop2.7]# sbin/hadoop-daemon.sh start zkfc
           
hadoop namenode啟動不了_Hadoop架構:HDFS高可用環境配置
結束hop02的NameNode程序
kill -9 14422
           
等待一下檢視hop01狀态
[[email protected] hadoop2.7]# bin/hdfs haadmin -getServiceState nn1
active
           

三、YARN高可用

1、基礎描述

hadoop namenode啟動不了_Hadoop架構:HDFS高可用環境配置

基本流程和思路與HDFS機制類似,依賴Zookeeper叢集,當Active節點故障時,Standby節點會切換為Active狀态持續服務。

2、配置詳解

環境同樣基于hop01和hop02來示範。

配置yarn-site.xml

,同步叢集下服務

<configuration>

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

    <!--啟用HA機制-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
 
    <!--聲明Resourcemanager服務-->
    <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>

    <!--啟用自動恢複機制--> 
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
 
    <!--指定狀态存儲Zookeeper叢集--> 
    <property>
        <name>yarn.resourcemanager.store.class</name>     <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>

</configuration>
           
重新開機journalnode節點
sbin/hadoop-daemon.sh start journalnode
           
在NN1服務格式化并啟動
[[email protected] hadoop2.7]# bin/hdfs namenode -format
[[email protected] hadoop2.7]# sbin/hadoop-daemon.sh start namenode
           
NN2上同步NN1中繼資料
[[email protected] hadoop2.7]# bin/hdfs namenode -bootstrapStandby
           
啟動叢集下DataNode
[[email protected] hadoop2.7]# sbin/hadoop-daemons.sh start datanode
           
NN1設定為Active狀态

先啟動hop01即可,然後啟動hop02。

[[email protected] hadoop2.7]# sbin/hadoop-daemon.sh start zkfc
           
hop01啟動yarn
[[email protected] hadoop2.7]# sbin/start-yarn.sh
           
hop02啟動ResourceManager
[[email protected] hadoop2.7]# sbin/yarn-daemon.sh start resourcemanager
           
檢視狀态
[[email protected] hadoop2.7]# bin/yarn rmadmin -getServiceState rm1
           
hadoop namenode啟動不了_Hadoop架構:HDFS高可用環境配置

繼續閱讀