Overview
- 2.2から2.3へのHDFSのアップグレード手順は以前の記事で紹介したが、2.4以降だと少し手順が変わっているので、ここにメモしている。
前提
-
細かいバックアップ手順などは書いていません
-
本番環境で以下の手順をそのまま適用しないように注意すること
- あくまでも、参考資料です
-
NameNodeでHAを組んでいない構成のため、Rolling Upgradeしません
- HA構成を組んでいる、かつ、無停止でアップグレードさせたい人は、是非試してみてください
-
Hadoop 2.6.0-RC0で試した内容なので、実際のリリース版とは異なる場合があります
HDFS
2.5.0のクラスタを終了する
- Namespaceを保存
$ hdfs dfsadmin -safemode enter
$ hdfs dfsadmin -saveNamespace
- 以前のUpgradeが完了していないようであれば、完了させる
完了していない場合は、NameNodeのWebUIに以下のような表示が出る。
完了させる手順
$ hdfs dfsadmin -finalizeUpgrade
以前の記事のように、hdfs namenode -finalize
を実行すると、以下のようなログが出て注意される。(Hadoop 2.4.0以降)
************************************************************/
14/11/11 15:07:13 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]
14/11/11 15:07:13 INFO namenode.NameNode: createNameNode [-finalize]
Use of the argument 'FINALIZE' is no longer supported. To finalize an upgrade, start the NN and then run `hdfs dfsadmin -finalizeUpgrade'
14/11/11 15:07:13 INFO util.ExitUtil: Exiting with status 1
14/11/11 15:07:13 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
finalize処理では、upgrade前のfsimageおよびeditsを格納しているディレクトリ"${dfs.namenode.name.dir}/previous"を消去している。
- 最後に、NameNodeとDataNodeを停止する。
$ sbin/stop-dfs.sh
- 2.5.0のHDFSのlayoutVersionについて
NameNodeのlayoutVersionは-57
$ cat /hadoop/dfs/name/current/VERSION
#Tue Nov 11 15:07:04 JST 2014
namespaceID=704993338
clusterID=CID-9f7a17e5-30dd-436e-82eb-743fe908cf17
cTime=1407394799428
storageType=NAME_NODE
blockpoolID=BP-149344879-127.0.0.1-1392166808826
layoutVersion=-57
DataNodeのlayoutVersionは-55
$ cat /hadoop/dfs/data/current/VERSION
#Tue Nov 11 14:44:29 JST 2014
storageID=DS-157848499-127.0.0.1-50010-1392228012931
clusterID=CID-9f7a17e5-30dd-436e-82eb-743fe908cf17
cTime=0
datanodeUuid=a6d33199-79d9-478f-bf8f-d11d07c19e6e
storageType=DATA_NODE
layoutVersion=-55
2.3以前はNameNodeとDataNodeで同一のlayoutVersionを使っていたが、Rolling Upgrade機能が追加されたことで、分離された。
2.6.0へのバージョンアップ
- tarのダウンロード
$ wget http://people.apache.org/~acmurthy/hadoop-2.6.0-rc0/hadoop-2.6.0.tar.gz
- tarを展開して設定ファイル(etc/hadoop配下にある)を除いてまるごと差し替え
- upgradeオプションを付けてNameNodeを起動する
$ sbin/hadoop-daemon.sh --script hdfs start namenode -upgrade
成功時のログ
2014-11-11 15:32:15,837 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Starting upgrade of local storage directories.
old LV = -57; old CTime = 1407394799428.
new LV = -60; new CTime = 1415687535836
2014-11-11 15:32:15,838 INFO org.apache.hadoop.hdfs.server.namenode.NNUpgradeUtil: Starting upgrade of storage directory /hadoop/dfs/name
2014-11-11 15:32:15,955 INFO org.apache.hadoop.hdfs.server.namenode.FSImageTransactionalStorageInspector: No version file in /hadoop/dfs/name
2014-11-11 15:32:15,956 INFO org.apache.hadoop.hdfs.server.namenode.NNUpgradeUtil: Performing upgrade of storage directory /hadoop/dfs/name
2014-11-11 15:32:15,965 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Need to save fs image? false (staleImage=false, haEnabled=false, isRollingUpgrade=false)
- ここで
hdfs dfs -ls -R /
を実行して、ファイルやディレクトリの欠落がないかどうか確認してから、DataNodeを起動する
NameNodeのlayoutVersionは-60
$ cat /hadoop/dfs/name/current/VERSION
#Tue Nov 11 15:32:15 JST 2014
namespaceID=704993338
clusterID=CID-9f7a17e5-30dd-436e-82eb-743fe908cf17
cTime=1415687535836
storageType=NAME_NODE
blockpoolID=BP-149344879-127.0.0.1-1392166808826
layoutVersion=-60
DataNodeのlayoutVersionは-56
$ cat /hadoop/dfs/data/current/VERSION
#Tue Nov 11 15:44:15 JST 2014
storageID=DS-157848499-127.0.0.1-50010-1392228012931
clusterID=CID-9f7a17e5-30dd-436e-82eb-743fe908cf17
cTime=0
datanodeUuid=a6d33199-79d9-478f-bf8f-d11d07c19e6e
storageType=DATA_NODE
layoutVersion=-56
- 最後に、Downgradeの必要がないと分かった段階でfinalizeしてください