LoginSignup
1
1

More than 5 years have passed since last update.

Upgrade HDFS from Hadoop 2.2 to 2.3

Posted at

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する必要がある。。。めんどい
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1