hadoopのアップグレード
hadoop DFSはバージョンごとにデータファイルの互換性がない。
なので、HDFS側にマイグレーションコマンドが用意されていて、これを実行すると旧バージョンのデータからバージョンアップしたhadoopにマイグレーション(アップグレード)が行える。
http://hadoop.apache.org/core/docs/r0.20.0/hdfs_user_guide.html#Upgrade+and+Rollback
今回は0.18.1から0.20.0へのバージョンアップを行った。
以下作業手順
- 新バージョンのhadoopをディレクトリにコピーする
cp -r hadoop-0.20.0 /usr/local/hadoop-0.20.0
- 旧hadoopバージョンのディレクトリ毎mvし、バックアップをとる
mv /usr/local/hadoop-0.18.1 /usr/local/hadoop-0.18.1_bk
- 設定ファイルとストレージディレクトリを旧バージョンディレクトリから新バージョンディレクトリへコピーする
cp -r /usr/local/hadoop-0.18.1_bk/conf/* /usr/local/hadoop-0.20.0/conf/ cp -r /usr/local/hadoop-0.18.1_bk/storage /usr/local/hadoop-0.20.0/
※ここで言うストレージディレクトリはhadoop.tmp.dirで設定したデータ格納ディレクトリを指す
今回は
hadoop.tmp.dir /usr/local/hadoop/storage/
と設定している
設定可能項目については hadoop-0.20.0/docs/core-default.html hadoop-0.20.0/docs/hdfs-default.html hadoop-0.20.0/docs/mapred-default.html を参照のこと。
- コピペした設定ファイルを各ノードにSCPする
sudo -s rm /usr/local/hadoop ln -s /usr/local/hadoop-0.20.0 /usr/local/hadoop chown -R cy_admin.cy_admin /usr/local/hadoop-0.20.0
- ネームノードからアップグレードオプションを付加してDFSを起動する
/usr/local/hadoop/bin/start-dfs.sh -upgrade
- ネームノード管理画面でバージョンがあがっていることを確認する
http://namenode:50070/dfshealth.jsp
- コマンドラインからDFSファイルを確認する。アプリ起動確認する
/usr/local/hadoop/bin/hadoop dfs -ls /
- 運用して問題なければアップグレードを確定させる
/usr/local/hadoop/bin/hadoop dfsadmin -finalizeUpgrade
- 運用でアップグレードに問題があったらアップグレードをロールバックさせることも可能らしい。
手順はdfsを停止させたあとに元のバージョンのhadoopをデプロイし、ロールバックオプションを付加して起動させる
/usr/local/hadoop/bin/start-dfs.h -rollback