hadoop高可用安裝與配置

Hadoop筆記整理(四):Hadoop分佈式HA的安裝部署

 集羣的規劃node

host 基本的軟件 運行的進程
data1 jdk、zk、hadoop NameNode、zkfc、zk、journalNode、  ResourceManager  
data2 jdk、zk、hadoop  NameNode、zkfc、zk、journalNode、ResourceManager、datanode、NodeManager
data3 jdk、zk、hadoop  zk、journalNode、datanode、NodeManager

 一.SSH免密登陸
  1.data1: 
      ssh-keygen -t rsa , 而後一直按回車
      ssh-copy-id data1
      ssh-copy-id data2
      ssh-copy-id data3
  2.在data2和data3上重複執行1的操做web

 二.安裝jdk
   省略shell

 三.安裝zookeeper
   省略apache

 四.安裝hadoop
   1.下載到/data/tools:  wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz
   2. 添加環境變量:sudo vi /etc/profile
      export HADOOP_HOME=/data/tools/hadoop-2.10.0
      export PATH=$HADOOP_HOME/bin:$PATH
   3.修改配置文件: hadoop-env.sh、yarn-env.sh、mapred-env.sh、hdfs-site.xml、core-site.xml、mapred-site.xml、yarn-site.xml、slaves
     3.1 hadoop-env.sh: export JAVA_HOME=/usr/local/jdk
     3.2 yarn-env.sh: export JAVA_HOME=/usr/local/jdk
     3.3 mapred-env.sh: export JAVA_HOME=/usr/local/jdk
     3.4 slavesapp

data2
data3


     3.5 配置hosts
     3.6 配置core-site.xml文件框架

<configuration>
    <!-- 指定hdfs的nameservice爲ns1 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns1</value>
    </property>
    <!-- 指定hadoop臨時目錄 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop-data/tmp</value>
    </property>
     <property>
        <name>hadoop.http.staticuser.user</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.halo_op.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.halo_op.groups</name>
        <value>*</value>
    </property>
    <!-- 指定zookeeper地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>data1:2181,data2:2181,data3:2181</value>
    </property>
     <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
</configuration>


     3.7 配置hdfs-site.xml文件ssh

 

<configuration> 
    <!--副本數-->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property> 
    <property> 
       <name>dfs.permissions.enabled</name>
       <value>false</value>
    </property>
    <!--指定hdfs的nameservice爲ns1,須要和core-site.xml中的保持一致 -->
    <property>
        <name>dfs.nameservices</name>
        <value>ns1</value>
    </property>
    <!-- ns1下面有兩個NameNode,分別是nn1,nn2 -->
    <property>
        <name>dfs.ha.namenodes.ns1</name>
        <value>nn1,nn2</value>
    </property>
    <!-- nn1的RPC通訊地址 -->
    <property>
        <name>dfs.namenode.rpc-address.ns1.nn1</name>
        <value>data1:9000</value>
    </property>
    <!-- nn1的http通訊地址 -->
    <property>
        <name>dfs.namenode.http-address.ns1.nn1</name>
        <value>data1:50070</value>
    </property>
    <!-- nn2的RPC通訊地址 -->
    <property>
        <name>dfs.namenode.rpc-address.ns1.nn2</name>
        <value>data2:9000</value>
    </property>
    <!-- nn2的http通訊地址 -->
    <property>
        <name>dfs.namenode.http-address.ns1.nn2</name>
        <value>data2:50070</value>
    </property>
    <!-- 指定NameNode的元數據在JournalNode上的存放位置 (通常和zookeeper部署在一塊兒) -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://data1:8485;data2:8485;data3:8485/ns1</value>
    </property>
    <!-- 指定JournalNode在本地磁盤存放數據的位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/data/hadoop-data/journal</value>
    </property>
    <property>  
        <name>dfs.namenode.name.dir</name>  
        <value>/data/hadoop-data/name</value>  
    </property>  
    <property>  
        <name>dfs.datanode.data.dir</name>  
        <value>/data/hadoop-data/data</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>
    <!-- 配置隔離機制方法,多個機制用換行分割,即每一個機制暫用一行-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
        sshfence
        shell(/bin/true)
        </value>
    </property>
    <!-- 使用sshfence隔離機制時須要ssh免登錄 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/halo_op/.ssh/id_rsa</value>
    </property>
    <!-- 配置sshfence隔離機制超時時間 -->
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
</configuration>


     3.8 配置mapred-site.xml文件webapp

<configuration>
    <!-- mr依賴的框架名稱 yarn-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- mr轉化歷史任務的rpc通訊地址-->
    <property>  
        <name>mapreduce.jobhistory.address</name>  
        <value>data1:10020</value>  
    </property>
    <!-- mr轉化歷史任務的http通訊地址-->
    <property>  
        <name>mapreduce.jobhistory.webapp.address</name>  
        <value>data1:19888</value>  
    </property>
    <!-- 會在hdfs的根目錄下面建立一個history的文件夾,存放歷史任務的相關運行狀況-->
    <property>
        <name>yarn.app.mapreduce.am.staging-dir</name>
        <value>/history</value>
    </property>
    <!-- map和reduce的日誌級別-->
    <property>
        <name>mapreduce.map.log.level</name>
        <value>INFO</value>
    </property>
    <property>
        <name>mapreduce.reduce.log.level</name>
        <value>INFO</value>
    </property>
</configuration>


     3.9 配置yarn-site.xml文件分佈式

 

<configuration>
    <!-- 開啓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>data1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>data2</value>
    </property>
    <!-- 指定zk集羣地址 -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>data1:2181,data2:2181,data3:2181</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!--啓用自動恢復,當任務進行一半,rm壞掉,就要啓動自動恢復,默認是false-->
    <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> 
    <property>
        <!-- 客戶端經過該地址向RM提交對應用程序操做 -->
        <name>yarn.resourcemanager.address.rm1</name>
        <value>data1:8032</value>
    </property>
    <property>
        <!--ResourceManager 對ApplicationMaster暴露的訪問地址。ApplicationMaster經過該地址向RM申請資源、釋放資源等。 -->
        <name>yarn.resourcemanager.scheduler.address.rm1</name>  
        <value>data1:8030</value>
    </property>
    <property>
        <!-- RM HTTP訪問地址,查看集羣信息-->
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>data1:8088</value>
    </property>
    <property>
        <!-- NodeManager經過該地址交換信息 -->
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>data1:8031</value>
    </property>
    <property>
        <!--管理員經過該地址向RM發送管理命令 -->
        <name>yarn.resourcemanager.admin.address.rm1</name>
        <value>data1:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.admin.address.rm1</name>
        <value>data1:23142</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>data2:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>data2:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>data2:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>data2:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm2</name>
        <value>data2:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.admin.address.rm2</name>
        <value>data2:23142</value>
    </property>
</configuration>


   4.準備hadoop所須要的幾個目錄
     mkdir -p /data/hadoop-data/{name,data,journal,tmp}
   5.把hadoop和對應存儲目錄同步到data2和data3(環境變量須要各自去配)
     scp -r /data/hadoop-data data2:/data
     scp -r /data/hadoop-data data3:/dataide

     scp -r /data/tools/hadoop-2.10.0 data2:/data/tools
     scp -r /data/tools/hadoop-2.10.0 data3:/data/tools
   6.啓動
     1.data1,data2,data3啓動journalnode: 
       sbin/hadoop-daemon.sh start journalnode
     2.格式化data1的namenode:
       hdfs namenode -format
     3.將data1上面產生的namenode的元數據信息,拷貝到data2上面
       scp -r /data/hadoop-data/name data2:/data/hadoop-data/
     4.data1格式化zkfc
        hdfs zkfc -formatZK
        其實是在zookeeper中建立一個目錄節點/hadoop-ha/ns1
     5.啓動hdfs
        在data1機器上面或者data2上面啓動:sbin/start-dfs.sh
        實際上在各機器上啓動了:NameNode、journalnode、zkfc,datanode
     6.啓動yarn
       在data1上面啓動sbin/start-yarn.sh
       實際上時啓動了:ResourceManager,NodeManager
       在data2上面啓動: sbin/yarn-daemon.sh start resourcemanager

    若是要單獨啓動hdfs中某一個進程,使用腳本hadoop-daemon.sh start 進程名,如:sbin/hadoop-daemon.sh start  namenode

 五.測試namenode和rm的ha 
    1 訪問web
        hdfs
            http://data1:50070
            http://data2:50070
            其中一個是active,一個是standby
        yarn
            http://data1:8088
            http://data2:8088
            在瀏覽的時候standby會重定向跳轉之active對應的頁面
    二、ha的驗證
        NameNode HA 
            訪問:
                http://data1:50070
                http://data2:50070
                其中一個active的狀態,一個是StandBy的狀態 

                主備切換驗證:
                    在data1上kill -9 namenode的進程
                    這時訪問data2:50070發現變成了active的
                    而後在data1上從新啓動namenode,發現啓動後狀態變成standby的

        Yarn HA
            web訪問:默認端口是8088
                data1:8088
                data2:8088 -> data1:8088
                 
                主備切換驗證:
                    在data1上kill -9 resourcemanager的進程
                    這時能夠訪問data2:8088,不會在跳轉
                    而後在data1上從新啓動resourcemanager,再訪問時就是跳轉到data2:8088
        主備切換結論:
            原來的主再恢復時,爲了系統的穩定性,不會再進行主備的切換

    三、mr任務測試         1.準備一個文件,上傳hdfs: hdfs dfs -put /data/tmp/mrtest.txt /         2.cd /data/tools/hadoop-2.10.0/share/hadoop/mapreduce         3.yarn jar hadoop-mapreduce-examples-2.6.4.jar wordcount /mrtest.txt /output/wc

相關文章
相關標籤/搜索