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/

と設定している

  • hadoop0.20ではhadoop-site.xmlは推奨されていないので、core-site.xml, mapred-site.xml, hdfs-site.xmlにそれぞれ設定をコピペする
設定可能項目については
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