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