Hadoop-1.2.1 升級到Hadoop-2.6.0 HA

 

Hadoop-1.2.1到Hadoop-2.6.0升級指南html

 

做者node

陳雪冰shell

修改日期apache

2015-04-24bootstrap

版本安全

1.0服務器

 

 

 

 

本文以hadoop-1.2.1升級到hadoop-2.6.0 ZKFC 模式,Centos 6.4, jdk 1.7.0_60環境爲例。oop

服務器:test23,test24,test25,測試

原Hadoop-1.2.1的機器分佈狀況: spa

Test23: NameNode、JobTracker、SecondaryNode

Test24:Datanode,TaskTracker

Test25:Datanode,TaskTracker

升級後Hadoop-2.6.0機器分佈狀況:

Test23:NameNode,ResourceManager、ZKFailouControl、Zookeeper,journalNode

Test24:NameNode,ResourceManager、ZKFailouControl、Zookeeper,JournalNode、DataNode

Test25:DataNode、NodeManager、Zookeeper、JouernalNode

 

 

 

配置好Hadoop2 的HA環境

配置爲zkfc模式,以確認配置文件無誤,操做過程以下:

 

1.1 先啓動全部的zookeeper

zkServer.sh start

這裏是test23:2181,test24:2181,test25:2181

 

1.2 在全部節點上啓動JournalNode:

sbin/hadoop-daemon.sh start journalnode

 

 

1.3 格式化第一個NameNode

bin/hdfs namenode –format

 

 

1.4 啓動第一個的NameNode

sbin/hadoop-daemon.sh start namenode

 

1.5 在第二個NameNode上格式化並同步元數據

bin/hdfs namenode –bootstrapStandby

 

 

1.6 啓動第二個NameNode

sbin/hadoop-daemon.sh start namenode

 

 

 

ZKFC操做

1.7 在第一個NameNode上執行格式化zkfc:

bin/hdfs zkfc –formatZK

運行這個命令後,會在zookeeper上建立一個/hadoop-ha/mycluster/的znode,用來存放automatic failover的數據。

1.8 啓動zkfc(zookeeper failover controller)

在第一個NameNode節點上啓動zkfc

sbin/hadoop-daemon.sh start zkfc

 

 

此時有一個namenode已經變爲active了

 

第二個NameNode仍然是StandBy

 

 

1.9 在第二個NameNode節點上啓動zkfc

sbin/hadoop-daemon.sh start zkfc

 

兩個NameNode上都啓動了zkfc,此時中止第一個NamNode後第二個會自動變成active狀態。

 

1.10 啓動datanode

在Namenode上啓動:sbin/hadoop-daemons.sh start datanode

      

 

此時能夠看到有兩個DataNode:

      

 

1.11 啓動yarn

在namenode上啓動:sbin/start-yarn.sh

 

 

 

 

 

運行測試程序:

 

 

bin/hadoop fs -put ~/hadoop-2.6.0/share/hadoop/common/hadoop-common-2.6.0.jar hdfs://mycluster/

 

JAVA客戶端能夠經過hdfs://mycluster/hadoop-common-2.6.0.jar方式訪問資源

 

1.12 備份hadoop2 zkfc環境的 的配置文件

cp –r /home/hadoop2/hadoop-2.6.0/etc/hadoop /home/hadoop2/hadoop-2.6.0/etc/hadoop_zkfc

 

備註:

中止集羣:

sbin/stop-yarn.sh

sbin/stop-dfs.sh

在每臺機器上執行:zkServer.sh stop

第二次啓動:

在每臺機器上執行:zkServer.sh start

sbin/start-dfs.sh

sbin/start-yarn.sh

 

 

 

 

Hadoop1 升級準備

2.1 確保hadoop1已是定妥升級

bin/hadoop dfsadmin -upgradeProgress status

輸出:There are no upgrades in progress.

2.2 確保沒有MR任務正在運行

bin/hadoop job –list

輸出:0 jobs currently running

2.3   進入安全模式,並更新fsimage,重置edits文件,

bin/hadoop dfsadmin -safemode enter

bin/hadoop dfsadmin –saveNamespace 

2.4   查看hdfs是否正常,並保存到文件,供升級後進行報告對比,若不正常,先使其正常。

bin/hadoop fsck /

輸出The filesystem under path '/' is HEALTHY字樣

保存hdfs報告到文件:

bin/hadoop fsck / >fsck_old.txt

cat fsck_old.txt

 

 

 

 

若是有錯誤,則可用bin/hadoop fs –setrep命令,修改文件副本系統,正常後再改回來。

參考:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html#setrep

 

2.5 離開安全模式

bin/hadoop dfsadmin -safemode leave

2.6   中止集羣

bin/stop-all.sh

2.7 備份元數據${dfs.name.dir}目錄

         cp -r tmp/name tmp/name_bak

         或

tar –zcvf tmp/name.tar.gz tmp/name

 

正式開始Hadoop1升級到Hadoop2

        

3.1 用普通的Hadoop2集羣先啓動集羣

         用 hadoop2_general裏的hdfs-site.xml、core-site.xml和mapred-site.xml配置文件替換到hadoop2全部節點,必定要記得複製到全部節點,確認hdfs-site.xml裏的兩個路徑和原hadoop1的一致:

dfs.namenode.name.dir對應dfs.name.dir的目錄

dfs.datanode.data.dir對應dfs.data.dir的目錄

 

配置好hadoo-env.sh和sleaves文件

3.2 啓動NameNode和DataNode並升級,在NameNode上執行:

爲了確保升級namenode過程不出錯,先升級namenode數據,再升級datanode數據。

sbin/hadoop-daemon.sh start namenode -upgrade

執行後在頁面上的startup-progress頁看到awaiting reported blocks狀態,前面都沒出錯,此時處於安全模式,再啓動datanode,注意datanode上不要加-upgrade參數。

到各個datanode上啓動:sbin/hadoop-daemon.sh start datanode

看到該項awaiting reported blocks爲100% 即表示升級成功。

 

上面兩部也能夠一步完成,自測是沒問題:

sbin/start-dfs.sh -upgrade

該NameNode節點會有NameNode和SecondNameNode等進程,

能夠用網頁test23:50070查看升級進度:

bin/hadoop dfsadmin –report  看到Decommission Status:Normal

直到安全模式自動關閉:

 

在這裏能夠看到啓動過程:

 

 

 

 

 

3.5 接下來到hadoop2裏驗證:

bin/hadoop fsck /

能夠文件系統是完整的。

 

生成新的檢查報告 :bin/hadoop fsck />fsck_new.txt

對比兩份報告 :diff fsck_new.txt ../hadoop-1.2.1/fsck_old.txt

 

        

 

3.6 中止HDFS,並複製ZKFC的配置文件到Hadoop2的全部節點,在NameNode上執行:

         sbin/stop-dfs.sh

         cp -r etc/hadoop_zkfc/ etc/hadoop/

 

一樣須要確認dfs.namenode.name.dir和dfs.datanode.data.dir兩個目錄是否和前面的一致。

 

3.7 在每一個節點上啓動journalnode

        

sbin/hadoop-daemon.sh start journalnode

        

3.8 初始化journalnode存儲目錄

若是有用過,則會提示是否要從新格式化,輸入」Y」回車便可,在NameNode上執行:

bin/hdfs namenode -initializeSharedEdits

 

若是報找不到目錄,則先啓動namenode再中止,而後再初始化.

sbin/hadoop-daemon.sh start namenode;sbin/hadoop-daemon.sh stop namenode;bin/hdfs namenode –initializeSharedEdits

 

3.9 啓動NameNode和DataNode

        在NameNode上執行:

sbin/hadoop-daemon.sh start namenode

sbin/hadoop-daemons.sh start datanode

 

 

3.10 同步兩個NameNode的元數據

         將dfs.namenode.name.dir目錄複製到第二個NameNode

scp -r hadoop-1.2.1/tmp/dfs/name test24:/home/hadoop2/hadoop-1.2.1/tmp/dfs

或在第二個 NameNode節點下下執行bin/hdfs namenode -bootstrapStandby 做用與直接拷貝元數據。

3.11 格式化zkfc

在第一個NameNode上執行:

hadoop-2.6.0/bin/hdfs zkfc -formatZK

3.12 從新啓動hdfs:

         確保全部zookeeper都已經啓動

hadoop-2.6.0/sbin/stop-dfs.sh

hadoop-2.6.0/sbin/start-dfs.sh

 

 

 

 

 

 

此時升級算是完成

 

 

 

3.13 測試NameNode自動切換

 

當把test23的namenode中止後,test24的namenode自動由standBy變成active了

 

 

 

 

再次啓動test23

 

 

3.14 啓動yarn

 

 

 

 

運行MR測試程序 :

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar pi 2 2

        

 

 

 

 

儘可能多運行一些測試程序,確認環境沒有問題,咱們執行定妥升級:

bin/hdfs dfsadmin –finalizeUpgrade

 

 

不知道爲何升級完後UI界面仍是原來的,求大俠指導,因此下面的字樣也看不到。

 

此時看到active的NameNode上的「Upgrade in progress……」 字樣已經消失。

 

 

 

 

我這裏也經過更新先後的兩個文件進行對比。

 

 

 

 

 

 

若執行升級可回滾:

sbin/stop-dfs.sh

sbin/start-dfs.sh -rollback

也能夠將備份好的元數據還原

 

 

 

建議Hadoop目錄部署方式

ln –s hadoop_versions/hadoop-0.20.2-cdh hadoop

  

 

實驗中的全部配置文件:

 http://files.cnblogs.com/files/JavaSmart/hadoop1Tohadoop2ha_conf.rar

相關文章
相關標籤/搜索