前回の続きです。
色々通り抜けた先にYARNが待ち受けているのがCDH4です。
ローカルモードと完全分散モード
CDH4のCluster構築手順にも書いてありますが、
1 |
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce |
実はこれが無いとローカルモードで動作します。
1つ下の問題にあたった時、あえてこの行を削除して試すとジョブが動いてやったぜ!
と思っていたらローカルモードでした残念ちゃん。という悲しいこともありました。
ジョブ実行に邪魔な設定
Hadoopパッケージを入れると conf.empty 設定がありますが、その中に hadoop-metrics2.properties というファイルがあり、このような中身になっています。
1 2 |
*.sink.file.class=org.apache.hadoop.metrics2.sink.FileSink *.period=10 |
この設定の意味は深追いしてないので適当な言い方をしますが、この設定ファイルの効力は、完全分散モードにてMapReduceが一見始まっているにも関わらず永久に終わることがなくなる、というものになります。
これにハマると、HDFSが悪いのか、やはりYARNは動かないのか、完全分散モードだからか、新しいResourceManagerが悪いのか、ポート指定が・・・と何が原因かわからなくなります。
俺はCDH4を最初に試した時、CDH3の既存設定と、CDH4のconf.emptyを参考にする形で構築し始めましたが、その時に hadoop-metrics2.properties が混入することで大ハマリするハメになりました。ハマリにハマって丁寧に擬似分散pseudo からやり直してみると、全てが正常に動いたので pseudo を参考にして完全分散を治していきました。
CDH3はマスターしたぜ!とかCDH4でもジョブはそれなりに動くだろう。という考えはドブに捨てましょう
で、あらゆるXML設定・設定ファイルにない設定・設定ファイルの有無 など色々diffってったらこの件にたどり着きました。一応、ノードを起動したりジョブを動かすと、ログに metrics2 関連が出てくるので今後も無視し続けるワケにはいかないでしょうが、今はただの悪だと思っています。
Schedulerの変更
CDH3ではFifoSchedulerはそもそもアレだから、FairSchedulerにしてる場合があると思いますが、そもそも Hadoop 0.23 にFairSchedulerがなくなっているため、設定を置いてもFIFOで動くことになります。MapReduce 2.0 in Hadoop 0.23
Note that, at the time of writing this blog post, there are two schedulers supported in Hadoop 0.23, the default FIFO scheduler and the Capacity scheduler; the Fair Scheduler is not yet supported.
Note that, at the time of writing this blog post, there are two schedulers supported in Hadoop 0.23, the default FIFO scheduler and the Capacity scheduler; the Fair Scheduler is not yet supported.
なので、最新のHadoop Wikiを見ても Capacity Scheduler のページしかありません。
で、まぁそういうことならCapacityにするかーと設定するわけですが、プロパティは yarn.resourcemanager.scheduler.class になっているところまではいいのですが、v0.23.0 と v0.23.1 で値が変わっているのがミソであります。
Hadoop Map Reduce Next Generation-0.23.0
→ org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.CapacityScheduler
Hadoop Map Reduce Next Generation-0.23.1
→ org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
→ org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.CapacityScheduler
Hadoop Map Reduce Next Generation-0.23.1
→ org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
最新Wikiを見ればいい話ですが、ググってると古いのにも引っかかるわけで・・・
こんなことで時間を無駄にしたくないですね・・・。
ジョブプロセスの大量起動
今までと同じジョブを実行したのに、ジョブの子プロセスが大量に起動してOOM Killer先生に怒られるという事象が現在進行形で発生しております。YARNにダイブ、Capacity Schedulerにダイブ、CDH4でのジョブ関連のメモリ計算見直し などが迫られており、非常に憂鬱な週明けになること間違いなしなステータスで休日入りしております。
ここを乗り越えればこっちのもんや(多分)。がんばろ。