配置Hadoop-2.4.0的HA+Federation+Yarn詳細記錄

本篇是配置HA和Federation,並非單獨配置其中一個,我參考了吳超老師及網上的資料,詳細的記錄了我搭建的全過程

吳超老師搭建:國內第一篇詳細講解hadoop2的automatic HA+Federation+Yarn配置的教程

下面開始我苦逼的搭建四個結點的過程

1.配置信息

主機名         IP                            操作系統                   是否NameNode   是否JournalNode   是否Zookeeper   是否ZKFC   是否DataNode

hadoop1      192.168.1.151        RedHat 6.5                是                         是                           是                        是                是

hadoop2      192.168.1.152        CentOS 6.5 mini        是                         是                           是                        是                是     

hadoop3      192.168.1.153        CentOS 6.5 mini        是                         是                           是                        是                是

hadoop4      192.168.1.154        CentOS 6.5 mini        是                         是                           否                        是                是

我的電腦是渣渣,總共才8G內存,不能太囂張的安裝很多大型虛擬機,就算四個小的,CPU也跟不上,只好裝迷你版,大量的操作通過 hadoop1 完成


2.我用的軟件版本

jdk-7u71-linux-i586.tar.gz

hadoop-2.4.0.tar.gz

zookeeper-3.4.6.tar.gz


3.我配置的體系結構

hadoop1和hadoop2組成一個HA,hadoop3和hadoop4組成一個HA

hadoop1和hadoop3組成Federation的兩個 nameservice,hadoop2和hadoop4分別是他們的Standby

下面圖片展示的是 HA和Federation的體系結構,當然這不是我的架構,只是網絡上的圖片,便於理解這個體系


HA+Federation體系結構


4.我安裝的目錄

jdk:/usr/lib/jdk

hadoop:/usr/local/hadoop

zookeeper:/usr/local/zookeeper


5.既然能搭建HA和Federation,想必基本的分佈式系統,單機模式都搭建成功了,下面直接講配置

hadoop-env.sh,yarn-env.sh

export JAVA_HOME=/usr/local/jdk   

具體詳細配置參考度娘


core-site.xml

 <property>

<name>hadoop.tmp.dir</name>           --臨時文件夾,默認在linux 的 /tmp下,每次重啓都會清空,配置下比較好

<value>/usr/local/hadoop/tmp</value>

</property>

<property> 

<name>ha.zookeeper.quorum</name>             --Zookeeper集羣的地址端口,要是奇數,不少於3個結點,用於選舉,自動切換HA的namenode結點

<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>

</property>

<property>

<name>fs.defaultFS</name>               --接下來的三個配置時配置 Federation的,我是配置成功了,具體怎麼用還沒研究清楚,後期慢慢的編輯

<value>viewfs:///</value>

</property>

<property>

<name>fs.viewfs.mounttable.default.link./cluster1</name>

<value>hdfs://HadoopCluster1/c1</value>

</property>

<property>

<name>fs.viewfs.mounttable.default.link./cluster2</name>

<value>hdfs://HadoopCluster2/c2</value>

</property>

   <property>

    <name>hadoop.proxyuser.hadoop.hosts</name>

    <value>*</value>

   </property>

   <property>

       <name>hadoop.proxyuser.hadoop.groups</name>

       <value>*</value>

   </property>

<property>

   <name>ha.zookeeper.session-timeout.ms</name>

    <value>1000</value>

    <description>ms</description>

</property>



hdfs-site.xml

關於這個,網絡上說不同的Federation結點這個配置不一樣,我這邊是配置成一樣的,方便同步到其他機器,爲什麼能配置一樣我會註釋的

<property>

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

<value>file:///usr/local/hadoop/dfs/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>file:///usr/local/hadoop/dfs/data</value>

</property>

<property>

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

<value>/usr/local/hadoop/dfs/journal</value>

</property>

<property> 

<name>dfs.replication</name> 

<value>2</value>

</property>

<property> 

<name>dfs.nameservices</name>

<value>HadoopCluster1,HadoopCluster2</value>

</property>

<property>

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

<value>hadoop1,hadoop2</value>

</property>

<property>

<name>dfs.namenode.rpc-address.HadoopCluster1.hadoop1</name>

<value>hadoop1:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.HadoopCluster1.hadoop1</name>

<value>hadoop1:50070</value>

</property>

<property>

<name>dfs.namenode.rpc-address.HadoopCluster1.hadoop2</name>

<value>hadoop2:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.HadoopCluster1.hadoop2</name>

<value>hadoop2:50070</value>

</property>

<property>

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

<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/HadoopCluster1</value>

</property>

<property>

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

<value>true</value>

</property>

<property>

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

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

</property>



<property>

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

<value>hadoop3,hadoop4</value>

</property>

<property>

<name>dfs.namenode.rpc-address.HadoopCluster2.hadoop3</name>

<value>hadoop3:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.HadoopCluster2.hadoop3</name>

<value>hadoop3:50070</value>

</property>

<property>

<name>dfs.namenode.rpc-address.HadoopCluster2.hadoop4</name>

<value>hadoop4:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.HadoopCluster2.hadoop4</name>

<value>hadoop4:50070</value>

</property>

<property>

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

<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/HadoopCluster2</value>

</property>

<property>

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

<value>true</value>

</property>

<property>

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

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

</property>

<property>

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

<value>sshfence</value>

</property>

<property>

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

<value>/home/hadoop/.ssh/id_rsa</value>

</property>

<property>

<name>dfs.datanode.max.xcievers</name>

<value>4096</value>

</property>


mapred-site.xml

<property>

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

<value>yarn</value>

</property>


yarn-site.xml

<property>

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

<value>hadoop1</value>

</property>
<property>

<name>yarn.resourcemanager.scheduler.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</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>

這些都是些基本的配置,如果你想個性化配置,自己配置就行,我一般都是默認系統的地址和端口


slaves

hadoop1

hadoop2

hadoop3

hadoop4


啓動

6.啓動Zookeeper

在hadoop1,hadoop2,hadoop3上執行  /usr/local/zookeeper/bin/zkServer.sh start

檢測:/usr/local/zookeeper/bin/zkServer.sh status

看看zookeeper的狀態,一般一個  leader 和  剩下的 follower


7.接下來格式化Zookeeper集羣,用於HA

在hadoop1上執行:/usr/local/hadoop/bin/hdfs zkfc –formatZK

在hadoop3上執行:/usr/local/hadoop/bin/hdfs zkfc –formatZK

具體的格式化產生的日誌是什麼樣的,我就不貼了,可以參考我給出的吳超老師的頁面

檢測是否成功:/usr/local/zookeeper/bin/zkCli.sh

WatchedEvent state:SyncConnected type:None path:null

[zk: localhost:2181(CONNECTED) 0] ls /

[hadoop-ha, zookeeper]

[zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha

[HadoopCluster2, HadoopCluster1]

到這裏執行  quit  退出即可


8.啓動Journalnode集羣,我選四個結點都是Journalnode結點,方便一起啓動

在一個結點上執行,我選擇hadoop1:/usr/local/hadoop/sbin/hadoop-daemons.sh startjournalnode  --這是一起啓動所有結點的journalnode,熟悉這個啓動腳本會明白

如果你選擇一個結點一個結點的啓動:/usr/local/hadoop/sbin/hadoop-daemon.sh startjournalnode   --妥妥滴,在所有節點都執行一遍

利用 jps 查看進程信息看看是否有   journalnode  進程

進入 /usr/local/hadoop/dfs/  下  會生成一個 journal  文件夾 ,請看配置,這個是自己定義的


9.格式化HadoopCluster1的Namenode

格式化hadoop1

在hadoop1執行以下命令:/usr/local/hadoop/bin/hdfs namenode -format -clusterid liufeiqiang

注意這裏的   liufeiqiang  是你自己 定義的集羣 ID,使用federation時,集羣ID一定要自己指定,保證大家ID一樣 ,格式化另一個 nameservice 時要用到,

格式化完畢,查看/usr/local/hadoop/dfs/ 文件夾,這時生成了一個name 文件夾

啓動hadoop1的namenode:/usr/local/hadoop/sbin/hadoop-daemon.sh start namenode

這時用  jps  命令看看是否有  namenode  進程,有即表示成功,這時可以訪問  hadoop1:50070 如果打開頁面,也表示啓動成功


格式化hadoop2,這裏的hadoop2是hadoop1的熱備,所以不能單純的格式化,需要同步數據,

在hadoop2上執行命令:/usr/local/hadoop/bin/hdfs namenode –bootstrapStandby

等格式化完成,驗證是否格式化成功,在/usr/local/hadoop/dfs/ 目錄下 生成  name 文件夾,表示成功

啓動hadoop2的namenode:/usr/local/hadoop/sbin/hadoop-daemon.sh start namenode

利用 jps 命令,或 hadoop2:50070 都可以查看是否啓動成功


10.格式化HadoopCluster2的Namenode

格式化hadoop3

在hadoop3執行以下命令:/usr/local/hadoop/bin/hdfs namenode -format -clusterid liufeiqiang        --看,這裏的  liufeiqiang  就是和上面的集羣 ID  一致,而吳超老師爲什麼兩個集羣ID設置的不一致,我也沒看懂,還有待以後的學習。

格式化完畢,查看/usr/local/hadoop/dfs/ 文件夾,這時生成了一個name 文件夾

啓動hadoop3的namenode:/usr/local/hadoop/sbin/hadoop-daemon.sh start namenode

這時用  jps  命令看看是否有  namenode  進程,有即表示成功,這時可以訪問  hadoop3:50070 如果打開頁面,也表示啓動成功


格式化hadoop4,這裏的hadoop4是hadoop3的熱備,所以也不能單純的格式化,需要同步數據,

在hadoop4上執行命令:/usr/local/hadoop/bin/hdfs namenode –bootstrapStandby

等格式化完成,驗證是否格式化成功,在/usr/local/hadoop/dfs/ 目錄下 生成  name 文件夾,表示成功

啓動hadoop4的namenode:/usr/local/hadoop/sbin/hadoop-daemon.sh start namenode

利用 jps 命令,或 hadoop4:50070 都可以查看是否啓動成功


11.啓動所有的Datanode

在hadoop1上執行命令:/usr/local/hadoop/sbin/hadoop-daemons.sh start datanode       --這裏注意下,如果你集羣上的 slaves  文件一樣,那麼隨便一個結點都可以啓動

用 jps 命令檢查是否有 DataNode 進程,或訪問  hadoop1:50075,能打開頁面也表示成功


12.啓動 Yarn

在hadoop1上執行命令:/usr/local/hadoop/sbin/start-yarn.sh            --這裏也是一樣的,隨便一個節點都可以

用 jps 命令檢查是否有 ResourceManager 進程,或訪問  hadoop1:8088,能打開頁面也表示成功


13.啓動 ZooKeeperFailoverController

在hadoop1上執行命令:/usr/local/hadoop/sbin/hadoop-daemons.sh start zkfc     --妥妥滴一條命令,啓動所有節點的ZKFC

--如果你想單獨啓動ZKFC,在hadoop1、hadoop2、hadoop3、hadoop4上分別執行命令:/usr/local/hadoop/sbin/hadoop-daemon.sh start zkfc 

利用 jps 查看是否有 DFSZKFailoverController 進程,有則表示成功


14.驗證 HDFS 是否可行


15.驗證 Yarn 是否可行


16.驗證HA的故障自動轉移是否好用

開始時,hadoop3是standby node,hadoop4是active node ,把hadoop4的namenode進程kill掉   kill -9 pid

刷新頁面

自動轉換成功,perfect


17.下面貼出啓動完成後所有的進程

[hadoop@hadoop1 ~]$ jps                                               [hadoop@hadoop2 ~]$ jps

2915 DataNode                                                                1387 NameNode

3039 ResourceManager                                                   1114 QuorumPeerMain

3145 NodeManager                                                          1634 NodeManager

2539 JournalNode                                                            1176 DFSZKFailoverController

2661 NameNode                                                              1519 DataNode

5154 Jps                                                                           3153 Jps

2430 DFSZKFailoverController                                        1243 JournalNode

2316 QuorumPeerMain



[hadoop@hadoop3 ~]$ jps                                               [hadoop@hadoop4 ~]$ jps

1882 QuorumPeerMain                                                    1550 NodeManager

2836 DataNode                                                                 3084 Jps

4494 Jps                                                                           1313 NameNode

2037 JournalNode                                                             1124 DFSZKFailoverController

2953 NodeManager                                                          1181 JournalNode

2632 NameNode                                                               1436 DataNode

1963 DFSZKFailoverController





媽蛋,我的手要凍掉了,寒冷的冬天,沒個妹子,心冷手冷身體更冷快哭了快哭了快哭了,今天就記到這裏,剩下的慢慢補全,這個是我一點一點記錄的,苦逼的IT技術員,請各位大牛不要嘲笑,如果要轉載,請註明出處,順帶給我漲點人氣大哭大哭大哭大哭



發佈了14 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章