Overview
2.3リリースのvotingも兼ねて、Hadoop 2.2から2.3へのアップグレード手順を確認する
- 細かいバックアップ手順などは書かない
- 本番環境だと以下のような手順が追加で必要だが省略
- fsimage, editsを保存する
- hdfs dfs -ls -R や hdfs fsck の結果を保存する
HDFS
2.2のクラスタを終了する
- namespaceを保存
$ hdfs dfsadmin -safemode enter
$ hdfs dfsadmin -saveNamespace
- 以前のファイルシステムの状態を削除 (2.2より過去にrollbackできなくする)
$ hdfs namenode -finalize
- NameNodeとDataNodeを停止
ちなみに、2.2のlayoutVersionは-47
$ cat /hadoop/dfs/name/current/VERSION
#Thu Feb 13 03:00:08 JST 2014
namespaceID=704993338
clusterID=CID-9f7a17e5-30dd-436e-82eb-743fe908cf17
cTime=0
storageType=NAME_NODE
blockpoolID=BP-149344879-127.0.0.1-1392166808826
layoutVersion=-47
2.3のクラスタへ移行する
-
tarを展開して設定ファイルを除いてまるごと差し替え
-
2.3のlayoutVersionは-51のため、普通に起動しようとすると以下のエラーで起動に失敗する
NameNodeログ
2014-02-13 03:28:39,704 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage
java.io.IOException:
File system image contains an old layout version -47.
An upgrade to version -51 is required.
Please restart NameNode with -upgrade
- upgradeオプションを付けて起動する
$ cd $HADOOP_HOME/sbin
$ ./hadoop-daemon.sh --script hdfs start namenode -upgrade
upgrade成功時のログ
NameNodeログ
2014-02-13 03:31:14,524 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Sta
rting upgrade of image directory /hadoop/dfs/name.
old LV = -47; old CTime = 0.
new LV = -51; new CTime = 1392229874523
2014-02-13 03:31:14,544 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Saving image file /hadoop/dfs/name/current/fsimage.ckpt_0000000000000000035 using no compression
2014-02-13 03:31:14,557 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Image file /hadoop/dfs/name/current/fsimage.ckpt_0000000000000000035 of size 1354 bytes saved in 0 seconds.
2014-02-13 03:31:14,567 INFO org.apache.hadoop.hdfs.server.namenode.FSImageTransactionalStorageInspector: No version file in /hadoop/dfs/name
2014-02-13 03:31:14,589 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Upgrade of /hadoop/dfs/name is complete.
layoutVersionが変わったことが確認できる
$ diff /hadoop/dfs/name/current/VERSION /hadoop/dfs/name/previous/VERSION
1c1
< #Thu Feb 13 03:31:14 JST 2014
---
> #Thu Feb 13 03:20:08 JST 2014
4c4
< cTime=1392229874523
---
> cTime=0
7c7
< layoutVersion=-51
---
> layoutVersion=-47
-
ここで
hdfs dfs -ls -R /
を実行して、ファイルやディレクトリの欠落がないかどうか確認してから、DataNodeを起動する- ちなみに、
hdfs dfs -ls R /
ではsnapshot一覧は確認できない -
hdfs lsSnapshottableDir
でsnapshotのディレクトリ一覧を取得して、そのパスに都度lsする必要がある。。。めんどい
- ちなみに、