よくある質問やTipsです。
MapReduceアプリケーションで処理件数等をJobClient側に出力したい。
org.apache.hadoop.mapred.Countersを使用してユーザ定義カウンタを管理します。
Map/Reduceクラス内等でカウンタを設定し、JobClientに返却します。
static enum BDPPMapCounters {inputrec, outputrec}; // カウンターを定義 public void map(K key, V value, OutputCollector<K, V> output, Reporter reporter) throws IOException { reporter.incrCounter(BDPPMapCounters.inputrec, 1) // inputrecを1加算 // データ処理 output.collect(keyM, valueM); // HadoopにkeyMとvalueMを出力 reporter.incrCounter(BDPPMapCounters.outputrec, 1) // inputrecを1加算 }
Hadoopジョブ終了時に、カウンタを取得します。
jc = JobClient.runJob(conf); // JobTrackerへのHadoopジョブの実行依頼と、終了の待ち合わせ jc.getCounters() // Hadoopジョブで計上したカウンタを取得
カウンタ値をコマンドで確認します。
hadoop job -status <ジョブID>
カウンタ定義数の最大値を変更します。
カウンタは最大数が規定されています。これにはHadoop自身が使用するカウンタの数も含まれています。最大値を超えた場合は以下のメッセージが出力されます。
Error: Exceeded limits on number of counters - Counters=120 Limit=120
カウンタの最大値は、以下のプロパティで指定します。
mapreduce.job.counters.max
定義可能なカウンタの最大数
参考
本製品でのデフォルトの指定値は以下のとおりです。
mapreduce.job.counters.max=120 (mapred-site.xml)
テスト時などに、タスクログをJobClient側に出力したい。
JobClientのsetTaskOutputFilterメソッドで設定の変更が可能です。
タスクの標準出力/標準エラー出力をJobClient側に出力します。
JobConf conf = new JobConf(defconf, BDPPApp.class); conf. setTaskOutputFilter(conf, JobClient.TaskStatusFilter.ALL); // すべてのタスクのログを出力
出力するタスクの種類を選択できます。通常はFAILEDが設定されています。
JobClient.TaskStatusFilter.ALL = すべてのタスク JobClient.TaskStatusFilter.FAILED = 異常終了したタスクのみ JobClient.TaskStatusFilter.KILLED = 強制終了されたタスクのみ JobClient.TaskStatusFilter.SUCCEEDED = 正常終了したタスクのみ JobClient.TaskStatusFilter.NONE = 出力せず
コマンドの復帰値として、Hadoopジョブの結果を受け取りたい。
hadoopコマンドを組み合わせたシェルスクリプトからHadoopジョブを実行します。
以下のような論理を実装したシェルスクリプトを作成します。
“hadoop jar”コマンドによりHadoopジョブを実行依頼
“hadoop jar”コマンドが出力した“Running job: <ジョブID>”を含む行からジョブIDを取得
“hadoop job -list all”コマンドの出力から2.のジョブIDを含む行を抽出
抽出した行の2列目(State)の数値から以下のように判断し復帰値を設定
1 = 実行中 2 = 正常終了 3 = 異常終了 4 = 実行待機中 5 = 強制終了
Hadoopジョブの受け付けを一時的に中断したい
mapred.queue.<キュー名>.stateプロパティを変更することで受け付けを中断・再開します。
Hadoopジョブの受け付けを中断
マスターサーバの/etc/hadoop/mapred-site.xmlの以下のプロパティを設定
mapred.queue.<キュー名>.state=STOPPED
1.の設定を反映
hadoop mradmin -refreshQueues
受け付け中断状態となったことを“Queue State”が“stopped”になっていることで確認
hadoop queue -list
注意
受け付け済みのHadoopジョブは実行は継続されます。
Hadoopジョブの受け付けを再開
マスターサーバの/etc/hadoop/mapred-site.xmlの以下のプロパティを設定
mapred.queue.<キュー名>.state=RUNNING
1.の設定を反映
hadoop mradmin -refreshQueues
受け付け再開されたことを“Queue State”が“running”になっていることで確認
hadoop queue -list