hadoop完全分布式搭建HA(高可用)


首先創建5台虛擬機(最少三台),並且做好部署規划

 

ip地址

主機名

安裝軟件

進程

192.168.xx.120

master

jdk,hadoop,zookeeper

namenode,ZKFC,Resourcemanager

192.168.xx.121

master2

jdk,hadoop,zookeeper

namenode,ZKFC,Resourcemanager

192.168.xx.122

slave1

jdk,hadoop,zookeeper

natanode,nodemanager,zookeeper,Journalnode,

192.168.xx.123

slave2

jdk,hadoop,zookeeper

natanode,nodemanager,zookeeper,Journalnode,

192.168.xx.124

slave3

jdk,hadoop,zookeeper

natanode,nodemanager,zookeeper,Journalnode,

一、首先設置防火牆防火牆

 

 

立即關閉防火牆service iptables stop


設置防火牆開機不啟動 chkconfig iptables off

 

設置 selinux 將SELINUX 改為disabled


 

 

二、編輯主機名映射

 

vi/etc/hosts


下載 ssh包獲取scp命令

yuminstall openssh-clients



將hosts遠程拷貝至后面四台機器

scp /etc/hostsmaster2:/etc/hosts



三、設置五台機器時間同步

最小化安裝沒有ntpdate這個軟件,首先用yum命令下載

yum –y installntp



設置master 與指定時間服務器同步

ntpdate cn.pool.ntp.org

設置后面4台機器與master同步

修改master ntp配置文件

vi /etc/ntp.conf

講restrict 上的網段改為自己的網段

注釋server 服務器

在最下面添加兩行server 和fudge內容



啟動ntpd ,並設置為開機啟動


關閉后面幾台ntpd,並設置為開機不啟動


同步master時間服務器

ntpdate master



四、創建普通用戶

adduser hadoop



passwd hadoop 設置密碼



五、SSH免密登錄

切換到普通用戶



在五台機器上都輸入ssh-keygen –t rsa,然后一直按回車


將秘鑰拷貝到五台機器上

ssh-copy-id master



ssh-copy-id master2



ssh-copy-id slave1


ssh-copy-id slave2

ssh-copy-id slave3

測試能否免密登錄,設置成功!

在其他四台機器上重復以上操作

六、安裝jdk

我這里是最小化安裝不需要檢查系統自己看裝的jdk,如果不是需要卸載

通過下面兩行命令查找卸載

rpm –qa |grep jdk

rpm –e –nodep

修改/opt/文件夾用戶

chown –R hadoop:hadoop /opt/


創建 /opt/software文件夾,這個文件夾用來存放壓縮包, 創建/opt/modules這個文件用來存放解壓的軟件


上傳jdk到software


解壓jdk到modules

配置環境變變量,切換到root用戶vi /etc/profile 也可以在普通用戶下修改vi ~/.bash_profile,在最后添加

保存退出,輸入 source /etc/profile ,然后輸入java -version驗證版本


將java scp至其他幾台機器

將配置文件scp至其他幾台機器

七、進入slave1主機,安裝配置zookeeper

上傳zookeeper到software文件夾,並解壓到modules


修改zookeeper配置文件

   

 

修改dataDir 路徑,增加server配置信息


創建zkData文件夾並創建myid文件,在slave1輸入1


scp zookeeper文件夾到slave2和slave3下


修改slave2和slave3 的myid文件


啟動zookeeper,並驗證狀態


啟動 bin/zkCli.sh,配置完成!

八、安裝配置hadoop

上傳hadoop到software文件夾,並解壓到modules

 

配置hadoop環境變量

root vi /etc/profile, 記得source /etc/profile


修改hadoop 配置文件

修改 etc/hadoop 下的環境變量文件增加java環境變量

hadoop-env.sh mapred-env.sh yarn-env.sh

export JAVA_HOME=/opt/modules/jdk1.7.0_79

修改core-site.xml文件

  1.  
    <configuration>
  2.  
         <property>
  3.  
       <name>fs.defaultFS</name>
  4.  
             <value>hdfs://ns1</value>
  5.  
         </property>
  6.  
         <property>
  7.  
             <name>hadoop.tmp.dir</name>
  8.  
             <value>/opt/modules/App/hadoop-2.5.0/data/tmp</value>
  9.  
         </property>
  10.  
         <property>
  11.  
             <name>hadoop.http.staticuser.user</name>
  12.  
             <value>hadoop</value>
  13.  
         </property>
  14.  
         <property>
  15.  
             <name>ha.zookeeper.quorum</name>
  16.  
             <value>slave1:2181,slave2:2181,slave3:2181</value>
  17.  
         </property>
  18.  
    </configuration>

修改hdfs-site.xml文件

  1.  
    <configuration>
  2.  
    <property>
  3.  
    <name>dfs.replication</name>
  4.  
    <value>3</value>
  5.  
    </property>
  6.  
    <property>
  7.  
    <name>dfs.permissions.enabled</name>
  8.  
    <value>false</value>
  9.  
    </property>
  10.  
    <property>
  11.  
    <name>dfs.nameservices</name>
  12.  
    <value>ns1</value>
  13.  
    </property>
  14.  
    <property>
  15.  
    <name>dfs.blocksize</name>
  16.  
    <value>134217728</value>
  17.  
    </property>
  18.  
    <property>
  19.  
    <name>dfs.ha.namenodes.ns1</name>
  20.  
    <value>nn1,nn2</value>
  21.  
    </property>
  22.  
    <!-- nn1的RPC通信地址,nn1所在地址 -->
  23.  
    <property>
  24.  
    <name>dfs.namenode.rpc-address.ns1.nn1</name>
  25.  
    <value>master:8020</value>
  26.  
    </property>
  27.  
    <!-- nn1的http通信地址,外部訪問地址 -->
  28.  
    <property>
  29.  
    <name>dfs.namenode.http-address.ns1.nn1</name>
  30.  
    <value>master:50070</value>
  31.  
    </property>
  32.  
    <!-- nn2的RPC通信地址,nn2所在地址 -->
  33.  
    <property>
  34.  
    <name>dfs.namenode.rpc-address.ns1.nn2</name>
  35.  
    <value>master2:8020</value>
  36.  
    </property>
  37.  
    <!-- nn2的http通信地址,外部訪問地址 -->
  38.  
    <property>
  39.  
    <name>dfs.namenode.http-address.ns1.nn2</name>
  40.  
    <value>master2:50070</value>
  41.  
    </property>
  42.  
    <!-- 指定NameNode的元數據在JournalNode日志上的存放位置(一般和zookeeper部署在一起) -->
  43.  
    <property>
  44.  
    <name>dfs.namenode.shared.edits.dir</name>
  45.  
    <value>qjournal://slave1:8485;slave2:8485;slave3:8485/ns1</value>
  46.  
    </property>
  47.  
    <!-- 指定JournalNode在本地磁盤存放數據的位置 -->
  48.  
    <property>
  49.  
    <name>dfs.journalnode.edits.dir</name>
  50.  
    <value>/opt/modules/hadoop-2.5.0-cdh5.3.6/data/journal</value>
  51.  
    </property>
  52.  
    <!--客戶端通過代理訪問namenode,訪問文件系統,HDFS 客戶端與Active 節點通信的Java 類,使用其確定Active 節點是否活躍 -->
  53.  
    <property>
  54.  
    <name>dfs.client.failover.proxy.provider.ns1</name>
  55.  
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  56.  
    </property>
  57.  
    <!--這是配置自動切換的方法,有多種使用方法,具體可以看官網,在文末會給地址,這里是遠程登錄殺死的方法 -->
  58.  
    <property>
  59.  
    <name>dfs.ha.fencing.methods</name>
  60.  
    <value>sshfence</value>
  61.  
    </property>
  62.  
    <!-- 這個是使用sshfence隔離機制時才需要配置ssh免登陸 -->
  63.  
    <property>
  64.  
    <name>dfs.ha.fencing.ssh.private-key-files</name>
  65.  
    <value>/home/hadoop/.ssh/id_rsa</value>
  66.  
    </property>
  67.  
    <!-- 配置sshfence隔離機制超時時間,這個屬性同上,如果你是用腳本的方法切換,這個應該是可以不配置的 -->
  68.  
    <property>
  69.  
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
  70.  
    <value>30000</value>
  71.  
    </property>
  72.  
    <!-- 這個是開啟自動故障轉移,如果你沒有自動故障轉移,這個可以先不配 -->
  73.  
    <property>
  74.  
    <name>dfs.ha.automatic-failover.enabled</name>
  75.  
    <value>true</value>
  76.  
    </property>
  77.  
    </configuration>

修改mapred-site.xml.template名稱為mapred-site.xml並修改


  1.  
    <configuration>
  2.  
         <property>
  3.  
    <name>mapreduce.framework.name</name>
  4.  
    <value>yarn</value>
  5.  
         </property>
  6.  
         <property>
  7.  
         <name>mapreduce.jobhistory.address</name>
  8.  
         <value>master:10020</value>
  9.  
         </property>
  10.  
         <property>
  11.  
         <name>mapreduce.jobhistory.webapp.address</name>
  12.  
         <value>master:19888</value>
  13.  
         </property>
  14.  
    </configuration>

配置 yarn-site.xml

  1.  
    <configuration>
  2.  
         <property>
  3.  
    <name>yarn.nodemanager.aux-services</name>
  4.  
    <value>mapreduce_shuffle</value>
  5.  
         </property>
  6.  
         <!-- Site specific YARN configuration properties -->
  7.  
         <!--啟用resourcemanager ha-->
  8.  
         <!--是否開啟RM ha,默認是開啟的-->
  9.  
         <property>
  10.  
         <name>yarn.resourcemanager.ha.enabled</name>
  11.  
         <value>true</value>
  12.  
         </property>
  13.  
         <!--聲明兩台resourcemanager的地址-->
  14.  
         <property>
  15.  
         <name>yarn.resourcemanager.cluster-id</name>
  16.  
         <value>rmcluster</value>
  17.  
         </property>
  18.  
         <property>
  19.  
         <name>yarn.resourcemanager.ha.rm-ids</name>
  20.  
         <value>rm1,rm2</value>
  21.  
         </property>
  22.  
         <property>
  23.  
         <name>yarn.resourcemanager.hostname.rm1</name>
  24.  
         <value>master</value>
  25.  
         </property>
  26.  
         <property>
  27.  
         <name>yarn.resourcemanager.hostname.rm2</name>
  28.  
         <value>master2</value>
  29.  
         </property>
  30.  
     
  31.  
         <!--指定zookeeper集群的地址-->
  32.  
         <property>
  33.  
         <name>yarn.resourcemanager.zk-address</name>
  34.  
             <value>slave1:2181,slave2:2181,slave3:2181</value>
  35.  
         </property>
  36.  
         <!--啟用自動恢復,當任務進行一半,rm壞掉,就要啟動自動恢復,默認是false-->
  37.  
         <property>
  38.  
         <name>yarn.resourcemanager.recovery.enabled</name>
  39.  
         <value>true</value>
  40.  
         </property>
  41.  
     
  42.  
         <!--指定resourcemanager的狀態信息存儲在zookeeper集群,默認是存放在FileSystem里面。-->
  43.  
         <property>
  44.  
         <name>yarn.resourcemanager.store.class</name>
  45.  
         <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  46.  
         </property>
  47.  
     
  48.  
    </configuration>

配置slaves

 

scp hadoop到其他四台機器,拷貝之前刪除share/doc文件


 

分別在master和master2的yarn-site.xml上添加


  1.  
    <property>
  2.  
    <name>yarn.resourcemanager.ha.id</name>
  3.  
    <value>rm1</value>
  4.  
    </property>
  5.  
    <property>
  6.  
    <name>yarn.resourcemanager.ha.id</name>
  7.  
    <value>rm2</value>
  8.  
    </property>

 

啟動zookeeper


啟動journalnode sbin/hadoop-deamon.sh startjournalnode


格式化master namenode bin/hdfs namenode –format


啟動 master namenode sbin/hadoop-deamon.sh startnamenode


在master2上同步master namenode元數據 bin/hdfs namenode -bootstrapStandby


啟動master2 namenode sbin/hadoop-deamon.sh startnamenode


此時進入 50070 web頁面,兩個namenode都是standby狀態,這是可以先強制手動是其中一個節點變為active bin/hdfs haadmin –transitionToActive–forcemanual

此時master變為active




手動故障轉移已經完成,接下來配置自動故障轉移

先把整個集群關閉,zookeeper不關,輸入bin/hdfs zkfc –formatZK,格式化ZKFC


在slave1上登錄zookeeper


 

輸入ls / ,發現多了一個hadoop-ha節點,這是配置應該沒有問題



啟動集群, 在master 輸入 sbin/start-dfs.sh

 

此時一個節點stanby 一個節點active


 

現在kill掉master namenode進程, 刷新master頁面

master自動切換為active,配置成功!


啟動yarn,測試resourcemanager ha ,master1輸入 sbin/start-yarn.sh

 

master2輸入 sbin/yarn-daemaon.sh start resourcemanager


在web 端輸入master2:8088自動跳轉

 

Kill master rm進程



master2:8088 active


wordcount程序測試,在本地創建一個測試文件,並上傳到hdfs上




查看輸出文件 hadoop fs –cat /output1/part*,運行成功


關閉active rm ,再次運行wordcount




關閉active namenode,查看文件


查看成功,rm nn HA配置成功!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM