構建Hadoop HA 集羣 hadoop 2.7.2 版本

向公司申請了4臺虛擬機,搭建了一個測試hadoop集羣.
Centos 7 64位操作系統
llc1 10.1.5.10
llc2 10.1.5.11
llc3 10.1.5.12
llcf 10.1.5.13

hadoop1 hadoop2 做namenode 主備

機器名 ip地址 安裝軟件 運行的進程
llc1 10.1.5.10 jdk hadoop zookeeper hbase
llc2 10.1.5.11 jdk hadoop zookeeper hbase
llc3 10.1.5.12 jdk hadoop zookeeper hbase
llcf 10.1.5.13 jdk hadoop hbase

1.添加hadoop用戶
adduser -m hadoop -s /bin/bash
passwd hadoop
visudo
這樣會打開/etc/sudoers 並進行編輯
hadoop ALL=(ALL) ALL

修改/data目錄權限 所有者
sudo chown -R hadoop:hadoop /data

2.修改 hostname
vim /etc/hosts

3.ssh
參考我的另一篇文章 SHH免密碼登錄

安裝JDK 安裝目錄在/data/hadoop1 參考非root用戶安裝JDK 在其他節點重複安裝操作

安裝zookeeper 安裝目錄 /data/hadoop1 參考zookeeper集羣實踐

安裝hadoop
(1)解壓縮
hadoop包解壓縮到/data/hadoop1目錄下
tar -zxvf hadoop-2.7.2.tar.gz
(2)修改環境變量
vi ~/.bashrc

export JAVA_HOME=/data/hadoop1/jdk1.8.0_05
export ZOOKEEPER_HOME=/data/hadoop1/zookeeper-3.4.6
export HADOOP_HOME=/data/hadoop1/hadoop-2.7.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

source ~/.bashrc
(3)修改配置文件
vim $HADOOP_HOME/etc/hadoop/slaves

llc1
llc2
llc3
llcf

vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/data/hadoop1/jdk1.8.0_05

vim $HADOOP_HOME/etc/hadoop/yarn-env.sh

export JAVA_HOME=/data/hadoop1/jdk1.8.0_05

vim $HADOOP_HOME/etc/hadoop/core-site.xml

   <property> 
   <!-- 指定hdfs的nameservice爲cluster  -->
        <name>fs.defaultFS</name>  
        <value>hdfs://cluster</value> 
   </property>
    <property> 
         <!-- 指定hadoop的tmp目錄  -->
          <name>hadoop.tmp.dir</name> 
          <value>/data/hadoop1/hadoop-2.7.2/tmp/</value> 
    </property> 
    <property> 
      <!-- 指定zookeeper地址  -->
        <name>ha.zookeeper.quorum</name> 
        <value>llc1:2181,llc2:2181,llc3:2181</value> 
    </property>
    <property> 
           <name>dfs.ha.fencing.methods</name> 
           <value>sshfence</value> 
    </property>
    <property> 
           <name>dfs.ha.fencing.ssh.private-key-files</name> 
           <value>~/.ssh/id_rsa</value> 
    </property>

vim HADOOP_HOME/etc/hadoop/hdfs-site.xml

 <property> 
      <!-- 指定的hdfs的nameserice爲cluster,與core-site.xml保持一致  -->
                <name>dfs.nameservices</name> 
                <value>cluster</value> 
        </property>
         <property>
        <!-- cluster下有兩個NameNode分別是master1和master2 -->
                <name>dfs.ha.namenodes.cluster</name> 
                <value>hadoop0,hadoop1</value> 
        </property>
        <property> 
                 <!--  master1的RPC通信地址-->
                <name>dfs.namenode.rpc-address.cluster.hadoop0</name> 
                <value>llc1:8020</value> 
        </property> 
        <property> 
         <!--  master2的RPC通信地址-->
                <name>dfs.namenode.rpc-address.cluster.hadoop1</name> 
                <value>llc2:8020</value> 
        </property>
         <property> 
                  <!-- 監控網頁 -->
                <name>dfs.namenode.http-address.cluster.hadoop0</name> 
                <value>llc1:50070</value> 
        </property> 
        <property> 
                <name>dfs.namenode.http-address.cluster.hadoop1</name> 
                <value>llc2:50070</value> 
        </property>
        <property> 
                         <name>dfs.namenode.servicerpc-address.cluster.hadoop0</name> 
                         <value>llc1:53333</value> 
                 </property> 
                 <property> 
                         <name>dfs.namenode.servicerpc-address.cluster.hadoop1</name> 
                         <value>llc2:53333</value> 
                 </property>
        <property> 
                <!-- 指定NameNode的元數據在JournalNode上的存儲位置 -->
                                  <name>dfs.namenode.shared.edits.dir</name> 
                                  <value>qjournal://llc1:8485;llc2:8485;llc3:8485/cluster</value> 
                          </property> 
                          <property> 
                                  <name>dfs.client.failover.proxy.provider.cluster</name> 
                                  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
                          </property> 
         <property> 
                  <!-- 指定JournalNode在本地磁盤存放數據的位置  -->
                <name>dfs.journalnode.edits.dir</name> 
                <value>/data/hadoop1/hadoop-2.7.2/data/journal</value> 
        </property> 
        <property> 
         <!-- 備份數 -->
                <name>dfs.replication</name> 
                <value>3</value> 
        </property> 
        <property>   
                <name>dfs.namenode.name.dir</name>   
                <value>file:/data/hadoop1/hadoop-2.7.2/data/name</value>   
    </property>   
    <property>   <!--  -->
           <name>dfs.datanode.data.dir</name>   
            <value>file:/data/hadoop1/hadoop-2.7.2/data/data,/data/hadoop2/hadoop/data</value>   
    </property>   
    <property> <!-- 開啓NameNode失敗自動切換  -->
            <name>dfs.ha.automatic-failover.enabled</name> 
        <value>true</value> 
    </property> 
    <property>   
        <name>dfs.webhdfs.enabled</name>   
        <value>true</value> 
    </property>
     <property>  <!--注意這兩個配置 不是所有節點都要開啓的  在不需要的節點 不配置這兩項就可以不啓動-->
            <name>dfs.journalnode.http-address</name>   
            <value>0.0.0.0:8480</value>   
     </property>   
     <property>   
            <name>dfs.journalnode.rpc-address</name>   
            <value>0.0.0.0:8485</value>   
     </property> 
      <property>     
            <name>dfs.permissions</name>     
            <value>false</value>     
      </property> 

修改 HADOOP_HOME/etc/hadoop/mapred−site.xml

<property> <!--  指定mapreduce框架爲yarn方式 -->
        <name>mapreduce.framework.name</name> 
        <value>yarn</value> 
    </property> 
  <property> 
            <name>mapreduce.jobtracker.address</name> 
              <value>llc1:50030</value> 
            </property>
              <property> 
                    <name>mapreduce.jobhistory.address</name> 
                      <value>llc1:10020</value> 
              </property> 
              <property> 
                        <name>mapreduce.jobhistory.webapp.address</name> 
                          <value>llc1:19888</value> 
 </property> 

修改$HADOOP_HOME/etc/hadoop/yarn-site.xml

<property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>llc1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>llc2</value>
    </property>
    <property> <!-- 指定resourcemanager的 clusterid ,master2中需要該成rm2-->
        <name>yarn.resourcemanager.ha.id</name>
        <value>rm1</value>
    </property>
    <property> <!-- 開啓RM的高可靠-->
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property> 
    <property>   <!-- 開始NameNode失敗自動切換-->
        <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <property> 
        <name>yarn.resourcemanager.zk-address</name>
        <value>llc1:2181,llc2:2181,llc3:2181</value>
    </property>
    <property> 
          <name>yarn.resourcemanager.store.class</name> 
          <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> 
    </property> 
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn</value>
    </property> 
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>
    <property>
            <name>yarn.log-aggregation-enable</name>
            <value>true</value>
    </property>
  <property>
       <name>yarn.resourcemanager.address.rm1</name>
       <value>${yarn.resourcemanager.hostname.rm1}:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>
        <value>${yarn.resourcemanager.hostname.rm1}:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.https.address.rm1</name>
        <value>${yarn.resourcemanager.hostname.rm1}:8089</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>${yarn.resourcemanager.hostname.rm1}:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>${yarn.resourcemanager.hostname.rm1}:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm1</name>
        <value>${yarn.resourcemanager.hostname.rm1}:8033</value>
    </property>
    <property>
       <name>yarn.resourcemanager.address.rm2</name>
       <value>${yarn.resourcemanager.hostname.rm2}:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>${yarn.resourcemanager.hostname.rm2}:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.https.address.rm2</name>
        <value>${yarn.resourcemanager.hostname.rm2}:8089</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>${yarn.resourcemanager.hostname.rm2}:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>${yarn.resourcemanager.hostname.rm2}:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm2</name>
        <value>${yarn.resourcemanager.hostname.rm2}:8033</value>
    </property>
 <property> 
    <name>yarn.web-proxy.address</name> 
      <value>llc1:8888</value> 
</property> 

8.啓動hadoop集羣
(1)啓動zookeeper集羣
zkServer.sh start
(1 1/2)格式化zkfc
目的是在ZooKeeper集羣上建立HA的相應節點。
在master1機器上執行命令
hdfszkfcformatZK HADOOP_HOME/etc/hadoop/core-site.xml文件中ha.zookeeper.quorum的值來進行初始化。

(2) 啓動journalnode
hadoop-daemons.sh start journalnode
(3) 格式化namenode
hdfs namenode -format
(4)啓動namenode
hadoop-daemon.sh start namenode
(5).將剛纔格式化的namenode信息同步到備用namenode上
在master2機器上執行命令
hdfs namenode -bootstrapStandby
(6)在master2上啓動namenode
hadoop-daemon.sh start namenode
(7)啓動所有datanode
在master1上執行命令
hadoop-daemons.sh start datanode
(8)啓動yarn
在master1上執行命令
start-yarn.sh
(9)啓動ZKFC
在master1和master2上啓動zkfc
hadoop-daemon.sh start zkfc
會啓動進程DFSZKFailoverController
(11) ha 主備切換
hdfs haadmin -failover hadoop1 hadoop0

YARN HA

備rm需要手動啓動
啓動,yarn-daemon.sh start resourcemanager
查看rm1 rm2 的狀態
$ yarn rmadmin -getServiceState rm1
active

$ yarn rmadmin -getServiceState rm2
standby
使用如下的命令 可以將rm 手動切換到主備模式 但是如果已經開啓了 rm自動切換 改命令將無效
yarn rmadmin -transitionToStandby rm1
訪問http://hadoop0:8088/
展示的是active的頁面
在備用機器上也啓動resourcemanager.
訪問http://haodoop1:8088/
展示的是standby的頁面This is standby RM. Redirecting to the current active RM: http://trainingHadoop02:8088/cluster
然後會自動跳轉到active的地址。
自動切換驗證:
將active的機器的resourcemanager的進程kill掉。
standby的備用的機器變爲active。

嘗試了一下 把這個屬性yarn.resourcemanager.ha.enabled 改成false yarn啓動以後 沒有active狀態的 RM 需要用 yarn rmadmin -transitionToActive rm1 手動指定

安裝hbase
另外發文補充

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