搭建高可用的分佈式hadoop2.5.2集羣  HDFS HA

HA High Available(高可用集羣)

wKiom1dS3H-TavjLAARH663e9oQ276.png-wh_50

本次安裝的hadoop2.5.2是64bit的,如果需要請在我之前的博文中


規劃節點數:(僅考慮HDFS HA

HDFS的節點分配:

兩個NN 且分佈在兩臺主機

三個DN節點

三個JN節點

兩個ZKFC節點(必須和NN放在一臺主機上)

三個Zookeeper

Mapreduce的節點:

一個ResourceManager(替代1.x時的JobTracker

三個DATAManager(替代1.x時的TaskTracker)和DN節點數相同



主機名NNDNZKZKFCJNRMDM
Node01
11
1
Node111111
1
Node2
11
1
1
Node3
1

1
1

具體步驟:

一、# ln -sf /root/hadoop-2.5.2 /home/hadoop2.5.2

 

二、修改配置文件(hadoop2.5.2/etc/hadoop

  1. # vim hadoop-env.sh   //修改JAVA_HOME

 

  1. # vim slaves           //配置DN的主機

node1  //DN1節點的主機

node2  //DN2節點的主機

node3  //DN3節點的主機

注意:因爲hadoop2.x沒有了SecondNode了,因此不要配master文件


  1. # vim hdfs-site.xml

<configuration>

 

<!--首先給搭建的集羣設置一個服務(名字)ID唯一標識,主要是給ZK區別的,因爲zk管理不止Hadoop集羣 -->

<property>

  <name>dfs.nameservices</name>

  <value>mycluster</value>

</property>

 

<!--NN們設置名字,ID唯一標識-->

<property>

 <name>dfs.ha.namenodes.mycluster</name>

  <value>nn1,nn2</value>

</property>

 

<!--根據RPC協議,設置NN的主機:端口號-->

<property>

 <name>dfs.namenode.rpc-address.mycluster.nn1</name>

  <value>node0:8020</value>

</property>

<property>

 <name>dfs.namenode.rpc-address.mycluster.nn2</name>

  <value>node1:8020</value>

</property>

 

<!--根據HTTP協議,設置NN的主機:端口號-->

<property>

 <name>dfs.namenode.http-address.mycluster.nn1</name>

  <value>node0:50070</value>

</property>

<property>

  <name>dfs.namenode.http-address.mycluster.nn2</name>

  <value>node1:50070</value>

</property>

 

<!--設置JN的主機和端口號,注意最後要添加集羣服務的名字-->

<property>

 <name>dfs.namenode.shared.edits.dir</name>

 <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>

</property>

 

<!--添加一個Class類,用於客戶端連接NNactive-->

<property>

 <name>dfs.client.failover.proxy.provider.mycluster</name>

 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

 

<!--設置ssh免密碼登錄,注意私鑰的名字要匹配-->

<property>

 <name>dfs.ha.fencing.methods</name>

  <value>sshfence</value>

</property>

 

<property>

 <name>dfs.ha.fencing.ssh.private-key-files</name>

  <value>/root/.ssh/id_dsa</value>

</property>

 

<!--設置JN的工作目錄,否則,默認是當前系統的/tmp,系統重啓後,數據消失-->

<property>

  <name>dfs.journalnode.edits.dir</name>

  <value>/opt/jn/data</value>

</property>

 

<!--以下操作設置,當NNactive)宕機了,自動切換NNstandby-->

 <property>

  <name>dfs.ha.automatic-failover.enabled</name>

   <value>true</value>

 </property>

 

</configuration>

 

  1. # vim core-site.xml  

<configuration>

 

<!--首先配置NN的入口-->

<property>

  <name>fs.defaultFS</name>

  <value>hdfs://mycluster</value>

</property>

 

<!--設置zookeeper的節點(主機和端口號)-->

<property>

   <name>ha.zookeeper.quorum</name>

  <value>node0:2181,node1:2181,node2:2181</value>

</property>

 

<!--設置hadoop所有文件目錄的根位置,默認是系統/tmp,重啓失效-->

<property>

  <name>hadoop.tmp.dir</name>

  <value>/opt/hadoop2/</value>

</property>

 

</configuration>

 

  1. 安裝zookeeper  zookeeper-3.4.6

#ln -sf /root/zookeeper-3.4.6   /home/zk

        

以下操作均在/home/zk下:

配置目錄在,zk/conf/

#cp   zoo_sample.cfg    zoo.cfg //先將配置文件複製一份,重命名

 

# vim  zoo.cfg        

 

1.dataDir=/opt/zookeeper   //修改默認值,默認放在/tmp ,

        

   2.文件最後添加以下幾行


server.1=node0:2888:3888   //zookeeper所在節點的主機名
server.2=mode1:2888:3888
server.3=node2:2888:3888



修改完成後,創建/opt/zookeeper目錄,並創建,編輯文件名爲myid的文件

填充內容爲server.1=node0:2888:3888 server後面的數字,不同節點對應不同數字,

如第二個zookeepernode1上的節點對應的數字即爲2

/opt/zookeeper目錄拷貝其他節點上

[root@node0 bin]# scp -r zookeeperroot@node1:/opt/

                               # scp -r zookeeper root@node2:/opt/

 

在將zookeeper整個軟件工作目錄拷到其他節點上去

[root@node0 ~]# scp -r zookeeper-3.4.6root@node1:~

                             # scp -r zookeeper-3.4.6 root@node2:~

 

別忘記做軟連接

# ln -sf /root/zookeeper-3.4.6  /home/zk

 

配置Zookeeper的環境變量,寫入/etc/profile,並將其他節點一併改寫

# scp /etc/profile root@node1:/etc/profile

 

啓動zookeeper

先關閉系統防火牆:# systemctl stop firewalld.service

或者# vim /etc/selinux/config  //重啓

每個節點都要啓動:# zkServer.sh start

檢測:

[root@node0 zookeeper-3.4.6]# jps

5403 Jps

5305 QuorumPeerMain

以上完成zookeeper的安裝部署

 

下面要啓動集羣:

啓動之前,將其他節點安裝Hadoop2.5.2,並將之前的配置文件覆蓋到每個節點,保持每個節點的配置文件相同

# scp  ./*   root@node1:/home/hadoop2.5.2/etc/hadoop

# scp  ./*   root@node2:/home/hadoop2.5.2/etc/hadoop

# scp  ./*   root@node3:/home/hadoop2.5.2/etc/hadoop

 

目錄切換到/home/hadoop2.5.2/sbin

  1. 首先啓動JN :(在JN的節點上啓動,即node1node2node3

[root@node1 sbin]# ./hadoop-daemon.sh start journalnode

[root@node2 sbin]# ./hadoop-daemon.sh start journalnode

[root@node3 sbin]# ./hadoop-daemon.sh start journalnode

 

2.在任意一個NN的節點主機上(node0或者node1),格式化HDFS,目錄切換到/home/hadoop2.5.2/bin

[root@node0 bin]# ./hdfs namenode –format

wKioL1dS4ZPAH7icAABmq-clPKk724.png

3.檢查各個節點是JN是否正常,jps或者去當前格式化NN節點的主機下的/home/hadoop2.5.2/logs  查看JN日誌


4.拷貝當前格式化NN節點的元數據文件(opt/hadoop2/dfs/name/current/*

官方有推薦命令:

  1. 首先啓動當前NN(格式化好的):bin]#./hadoop-daemon.sh start namenode

  2. 檢查:jps  ,檢查/opt/hadoop2/dfs/name/current有沒有生成元數據文件

[root@node0current]# ll

總用量 16

-rw-r--r--.1 root root 351 6   4 20:42fsimage_0000000000000000000

-rw-r--r--.1 root root  62 6   4 20:42 fsimage_0000000000000000000.md5

-rw-r--r--.1 root root   2 6   4 20:42 seen_txid

-rw-r--r--. 1 root root 205 6   4 20:42 VERSION


5.官方文檔推薦使用:在沒有格式化的NN節點的主機上執行:bin]#./node –bootstrapStandby

這個命令就是將NN(已經格式化)生成元數據內容拷貝到NN(未格式化)的主機上在沒有格式化的NN主機上檢查有沒有拷貝成功opt/hadoop2/dfs/name/current/*

然而,我自己編譯的源碼,沒這玩意……

不過別擔心,手動移動是一樣有效的,[root@node0 opt]# scp -r hadoop2 root@node1:/opt

wKioL1dS4yfBN8m2AAAmHuiGQxA748.png


6.停止所有HDFS的節點的服務:zookeeper不要停      bin]#./stop-dfs.sh


7.在其中一個NN節點,格式化zkfs   bin]# hdfs   zkfc   -formatZK


8.一次性啓動所有dfs節點:sbin]#./start-dfs.sh

    出現下圖及說明安裝無誤:

wKiom1dS4qzxUGxJAACKtyWlPfk173.png



用瀏覽器訪問node0節點和node1節點,至於誰做active誰做standby完全取決於誰先拿到競爭鎖

瀏覽器訪問測試:(別忘更改自己的hosts文件,否則請用ip地址)

node0:50070    //NN1

node1:50070     // NN2

wKioL1dS48uQDj-YAAFG_ud50Tk298.png-wh_50

wKiom1dS4siDW3XsAAF1NYMzXOQ647.png-wh_50

上牀文件測試一下:

[root@node0 bin]# ./hdfs dfs -mkdir -p/usr/file     //HDFS創建目錄

[root@node0 bin]# ./hdfs   dfs   -put /root/zookeeper-3.4.6.tar.gz  /usr/file  //上傳文件

這裏說明:Hadoop1.x  默認block大小是64M  Hadoop2.x默認block大小是128M


============================================================================

下面配置MapReduce

  1. 1.      vim mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

 

  1. 2.      vim yarn-size.xml

<configuration>

 

<!--這裏配置ResourceManager的節點主機 -->

<property>

<name>yarn.resourcemanager.hostname</name>

<value>node0</value>

</property>

 

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

 

<property>

<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

<value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

 

</configuration>

 

 

將這些配置文件一併拷貝到其他節點主機上

[root@node0 etc]# scp -r hadooproot@node1:/home/hadoop2.5.2/etc

[root@node0 etc]# scp -r hadooproot@node2:/home/hadoop2.5.2/etc

[root@node0 etc]# scp -r hadooproot@node3:/home/hadoop2.5.2/etc

 

重啓 hadoop

[root@node0 sbin]# ./start-all.sh

 

瀏覽器訪問 node0:8080

wKioL1dTBLuxcq4jAAF2cgklz6o863.png-wh_50


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