Notes of upgrading from CDH4.1 to CDH4.4

ついつい CDH4.1 から CDH4.4 にアップグレードしてしまいましたので、手順を省いて注意点などを記しておきます。

機能的には What’s New in CDH4.4.0 まで見てもメリットよりリスク不安の方が高いのですが、Hadoop新担当者の運用鍛錬という名目でゴリッとやってもらって、私はその後ろで煽ってました。



手順について

How to upgrade from CDH4.0 to CDH4.1 for Debian | 外道父の匠 と流れは同じで、
  • ジョブを止めて
  • Hadoopを止めて
  • アップグレードして
  • Hiveメタストアを更新して
  • 再開して動作確認する(ログ保存/ジョブ)

  • だけなので難しいことは特にありません。
    QJM HAも特になにもなかったです。

    なので、細かいメモだけ書いておきます。


    NameNode WARNログ

    挙動に支障はないのですが、読み書き両方ともにHDFSを利用するとこんなWARNログが毎回残るようになりました。例は fluentd からの書き込みなのでユーザが td-agent になっています。

    これについて調べたところ、わりと古い話題ですが

  • Namenode halts after getting into a deadly loop of UserGroupInformation retries

  • bash -c “id -Gn td-agent” が返らないのが原因ということで、user, group を作って回避しました。これが正当な対応かはアレですが… 目的がログなくすことだったので log4j でフィルタするよりは元を断つべきかな、と。


    hiveの出力抑制

    hive につなぐとき以下の SLF4J メッセージが出るように。

    jobの実行等には問題はないので、出力させたくないなら /usr/lib/zookeeper/lib/slf4j-log4j12-1.6.1.jar を退避すればOKです。


    hdfsのホームディレクトリ

    /etc/passwd のhdfsユーザがこんな感じなのですが

    /usr/lib/hadoop-0.20 ディレクトリがないとHDFSが起動しなくなりました。
    CDH3からアップグレードし続けている弊害と思われます。

    たいしたことじゃないのでディレクトリを作成して回避しました。usermodでもいいと思います。


    NameNodeのhosts

    名前解決の方法が変わった部分があるのか、以下のようなエラーにより、HDFSのsafemodeが解除されない状態になりました。

    NameNode

    DataNode

    これはNameNodeの /etc/hosts に DataNode のリストを載せることで解決しました。ちなみに、Hadoop的に必要だったので元々DNSで正引きできるようにしてありましたが、それでは不足なようで。


    HiveMetastore

    Hive 0.10 でスキーマがだいぶ変わってるから気をつけようねって話。
  • CDH4.2(Hive 0.10)のmetastoreは CDH4.1.x (Hive 0.9) 以前と互換性がなかった件 – tagomorisのメモ置き場

  • 事件当時の思ひ出Tweet
  • @tagomoris
  • @GedowFather

  • ちゃんとジョブ止めたので何も起きなかったし、スキーマは基本見なくて大丈夫なところだけど、アップグレードクエリは気持ち確認しておいた方がいいですね。


    hive load

    load元と先に同じファイル名があったら上書きされてたのが、今回からエラーになったようです。

    どっちかっつーと正しい挙動になったような感じ。



    今回はCDH4.4にしただけで、BigDataシステム的には何も変わってないのですが、Cloudera SearchがGAになって遊べるようになってるとか、Impalaもバージョンが上がってきてるとかあるし、あんま放っておくと追随するのがしんどくなるので、やっといて損はなかったかなーと。

    Hadoopを教えるのは大変というか難しいけど、もう文献は揃ってるし、Hadoopの完全分散環境を作るのにOpenStackがあるととても練習してもらいやすいしで、だいぶ進行がスムーズなこの頃。安定過ぎてまたガツンと何かをやりたい気分がモヤリ。