Hadoop 2.5.0から2.6.0にアップグレードするときの手順 (非HA版)


## Overview

* 2.2から2.3へのHDFSのアップグレード手順は[以前の記事](http://qiita.com/ajis_ka/items/5d9ffa437181da79c58a)で紹介したが、2.4以降だと少し手順が変わっているので、ここにメモしている。

### 前提

* 細かいバックアップ手順などは書いていません
* 本番環境で以下の手順をそのまま適用しないように注意すること

   * あくまでも、参考資料です

* NameNodeでHAを組んでいない構成のため、[Rolling Upgrade](http://hadoop.apache.org/docs/r2.5.1/hadoop-project-dist/hadoop-hdfs/HdfsRollingUpgrade.html)しません

  * HA構成を組んでいる、かつ、無停止でアップグレードさせたい人は、是非試してみてください

* [Hadoop 2.6.0-RC0](http://people.apache.org/~acmurthy/hadoop-2.6.0-rc0)で試した内容なので、実際のリリース版とは異なる場合があります

## HDFS

### 2.5.0のクラスタを終了する

* Namespaceを保存

```bash:
$ hdfs dfsadmin -safemode enter
$ hdfs dfsadmin -saveNamespace
```

* 以前のUpgradeが完了していないようであれば、完了させる

完了していない場合は、NameNodeのWebUIに以下のような表示が出る。

![Screen Shot 2014-11-11 at 15.47.57.png](https://qiita-image-store.s3.amazonaws.com/0/32443/9e034831-4fd1-47c6-8955-ff0c2fa53592.png "Screen Shot 2014-11-11 at 15.47.57.png")

完了させる手順

```bash:
$ hdfs dfsadmin -finalizeUpgrade
```

[以前の記事](http://qiita.com/ajis_ka/items/5d9ffa437181da79c58a)のように、`hdfs namenode -finalize`を実行すると、以下のようなログが出て注意される。(Hadoop 2.4.0以降)

```xml:Console
************************************************************/
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を停止する。

```bash:
$ sbin/stop-dfs.sh
```

* 2.5.0のHDFSのlayoutVersionについて

NameNodeのlayoutVersionは-57

```bash:
$ 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

```bash:
$ 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のダウンロード

```bash:
$ wget http://people.apache.org/~acmurthy/hadoop-2.6.0-rc0/hadoop-2.6.0.tar.gz
```

* tarを展開して設定ファイル(etc/hadoop配下にある)を除いてまるごと差し替え
* upgradeオプションを付けてNameNodeを起動する

```bash:
$ sbin/hadoop-daemon.sh --script hdfs start namenode -upgrade
```

成功時のログ

```xml:NameNodeログ
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

```bash:
$ 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

```bash:
$ 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してください