hadoop2.0生產環境高可用集羣原理和搭建


非高可用集羣搭建可以參看我寫的博客

http://blog.csdn.net/wyl6019/article/details/52874779


1  體系架構圖


 集羣節點分配情況

192.168.100.200      wangyl-0        Active NameNode  

192.168.100.201      wangyl-1        Standby Namenode

192.168.100.202      wangyl-2        Active ResourceManager

192.168.100.203      wangyl-3        Standby ResourceManager

192.168.100.204      wangyl-4        DataNode、JournalNode、NodeManager

192.168.100.205      wangyl-5        DataNode、JournalNode、NodeManager

192.168.100.206      wangyl-6        DataNode、JournalNode、NodeManager

192.168.100.207      wangyl-7        Zookeeper

192.168.100.208      wangyl-8        Zookeeper

192.168.100.209      wangyl-9        Zookeeper


2  準備工作


配置每一個節點的/ect/hosts文件

配置SSH免密碼登陸

安裝JDK


3  HDFS HA 原理


fsimage:元數據的鏡像文件,可以認爲是元數據在保存在磁盤的一個副本;

edits:日記文件,記錄元數據變化操作;

NameNode:有兩種狀態,Active狀態爲激活狀態,對外提供服務,Standby狀態爲熱備,當Active宕機之後對外提供服務;

JournalNode:hadoop自帶的共享存儲系統,一個輕量級的進程;

ZKFC:Zookeeper的客戶端,在NameNode節點上作爲守護進程啓動;


主備NameNode數據實時同步流程:

        當集羣啓動後,一個NameNode節點處於Active狀態,對外提供服務,並把editLog寫到本地和共享存儲系統(可以是JournalNode);另外一個NameNode處於Standby狀態,啓動的時候會去加載元數據的鏡像文件fsimage,並週期性去共享存儲系統中讀edits,保持與Active的NameNode狀態同步;爲了確保主備切換高效,DataNode需要同時向兩個NameNode彙報block to report信息,因爲主備切換最耗時的就是處理DataNode的report block;生產環境中爲了提高自動化切換,引入了Zookeeper集羣和ZKFC進程,ZKFC進程在每一個NameNode上都存在,ZKFC與Zookeeper通信,通過Zookeeper選主。


4 ResourceManager HA原理

ResourceManager的主備也是用過Zookeeper集羣實現,每一個ResourceManager節點存在一個ZKFC輕量級的守護進程,負責與Zookeeper集羣通信,當主RM宕機之後,迅速切換來實現HA;


5  具體搭建步驟


zookeeper集羣搭建省略

目錄規劃

hadoop安裝目錄 :/usr/local

hadoop臨時文件目錄:/usr/local/hadoop-2.7.1/tmp

journalNode存儲目錄:/usr/local/hadoop-2.7.1/journaldata


5.1  hadoop-env.xml文件

export JAVA_HOME=

修改爲你自己的${JAVA_HOME}


5.2  mapred-site.xml

配置yarn爲集羣的協調管理框架

<property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
</property>

配置 hadoop集羣的jobhistory

<property>
          <name>mapreduce.jobhistory.address</name>
          <value>wangyl-4:10020</value>
</property>

配置 hadoop集羣的jobhistory的webapp,可通過瀏覽器訪問

<property>
          <name>mapreduce.jobhistory.webapp.address</name>
          <value>wangyl-4:19888</value>
</property>

5.3 yarn-site.xml

開啓MR HA

 <property>  
       <name>yarn.resourcemanager.ha.enabled</name>  
       <value>true</value>  
</property>

指定RM集羣的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>wangyl-2</value>  
</property>

 <property>  
       <name>yarn.resourcemanager.hostname.rm2</name>  
       <value>wangyl-3</value>  
</property>

配置MR合併

<property>

            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
</property>
指定失效自動切換
<property>

            <name>yarn.resourcemanager.recovery.enabled</name>
            <value>true</value>
</property>

<property>

            <name>yarn.resourcemanager.store.class</name>
            <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
指定zookeeper集羣地址

<property>

            <name>yarn.resourcemanager.zk-address</name>
            <value>wangyl-7:2181,wangyl-8:2181,wangyl-9:2181</value>
</property>

5.4 core-site.xml


指定HDFS的名稱空間爲ns1,ns1爲邏輯概念,與hdfs-site.xml中一致即可

<property>

           <name>fs.defaultFS</name>              
           <value>hdfs://ns1</value>   
</property>
指定hadoop的臨時存儲文件

<property>

           <name>hadoop.tmp.dir</name>              
           <value>/usr/local/hadoop-2.1.7/tmp</value>   
</property>

指定Zookeeper集羣地址

<property>

           <name>ha.zookeeper.quorum</name>              
           <value>wangyl-7:2181,wangyl-8:2181,wangyl-9:2181</value>   
</property>


5.5  hdfs-site.xml


指定HDFS的名稱空間爲ns1,ns1爲邏輯概念,與core-site.xml中一致即可

<property>

           <name>dfs.nameservices</name>              
           <value>ns1</value>   
</property>

HDFS的名稱空間爲ns1下面有兩個NameNode,作爲HA

<property>

           <name>dfs.ha.namenodes.ns1</name>              
           <value>wangyl-0,wangyl-1</value>   
</property>

指定wangyl-0的RPC通信地址

<property>

           <name>dfs.namenode.rpc-address.ns1.wangyl-0</name>              
           <value>wangyl-0:9000</value>   
</property>

指定wangyl-0的HTTP通信地址,可通過web瀏覽器查看

<property>

           <name>dfs.namenode.http-address.ns1.wangyl-0</name>              
           <value>wangyl-0:50070</value>   
</property>

指定wangyl-1的RPC通信地址

<property>

           <name>dfs.namenode.rpc-address.ns1.wangyl-1</name>              
           <value>wangyl-1:9000</value>   
</property>

指定wangyl-1的HTTP通信地址,可通過web瀏覽器查看

<property>

           <name>dfs.namenode.http-address.ns1.wangyl-1</name>              
           <value>wangyl-1:50070</value>   
</property>

指定Namenode的元數據在JournalNode上的存放路徑

<property>

           <name>dfs.namenode.shared.edits.dir</name>              
           <value>qjournal://wangyl-4:8485;wangyl-5:8485;wangyl-6:8485/ns1</value>   
</property>

指定JournalNode在本地存儲位置

<property>

           <name>dfs.journalnode.edits.dir</name>              
           <value>/usr/local/hadoop-2.1.7/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>

配置隔離機制方式,即主宕機之後,從通過什麼方式殺死主NameNode進程,防止腦裂

<property>

           <name>dfs.ha.fencing.methods</name>              
           <value>
                   sshfencing
                   shell(bin/true)
          </value>   
</property>

使用ssh隔離機制需要配置免密碼登陸文件位置

<property>

           <name>dfs.ha.fencing.ssh.private-key-files</name>              
           <value>替換成你的ssh免登陸文件位置</value>   
</property>

配置ssh隔離機制超時時間

<property>

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


5.5 slaves文件

NameNode的指定的是DataNode節點,ResourceManager指定的是NodeManager節點

wangyl-4

wangyl-5

wangyl-6


至此,將配置好的hadoop拷貝到其它節點上


6 啓動


6.1 啓動Zookeeper集羣

在wangyl-7,wangyl-8,wangyl-9三個節點上

./zkServer.sh start


6.2 啓動JournalNode

在wangyl-4,wangyl-5,wangyl-6三個節點上

sbin/hadoop-daemon.sh start journalnode


6.3 格式化HDFS(只在第一次啓動的時候)

在wangyl-0節點上

hdfs namenode -format

執行成功之後會在core-site.xml配置的hadoop.tmp.dir路徑下生成文件,我的是/usr/local/hadoop-2.7.1/tmp,將/usr/local/hadoop-2.7.1/tmp拷貝到wangyl-1下


6.4 格式化ZKFC

在wangyl-0節點上

hdfs zkfc -formatZK


6.5 啓動HDFS

在wangyl-0節點上

sbin/start-dfs.sh


6.6 啓動ResourceManager

在wangyl-2節點上

sbin/start-yarn.sh

在wangyl-3節點上

sbin/yarn-daemon.sh start resourcemanager

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章