2012年12月9日日曜日

Hadoopをカスタマイズする

Hadoopのソースコードはよく目を通しますが、自分でカスタマイズしたことはなかったので、少しコードをいじってみました。


とりあえず簡単なところから・・・hadoop job -list allというコマンドを実行すると、今まで実行したJobの情報が見れます。


MasahiroPC:core masahiro$ hadoop job -list all
・・・省略・・・
Running : 1 Succeded : 2 Failed : 3 Prep : 4
JobId State StartTime UserName Priority SchedulingInfo
job_201212082249_0001 2 1354974604193 masahiro NORMAL NA


見ての通り、Stateから先のラベルがずれているので、合わせてみます。

コードを追っていくと、Jobの一覧表示はorg.apache.hadoop.mapred.JobClientが行っていることが分かります。displayJobListメソッドを以下のように変更しました。
※ファイル=$HADOOP_HOME/src/mapred/org/apache/hadoop/mapred/JobClient.java


void displayJobList(JobStatus[] jobs) {    
 System.out.printf("JobId\t\t\tState\tStartTime\tUserName\tPriority\tSchedulingInfo\n");
  for (JobStatus job : jobs) {
    System.out.printf("%s\t%d\t%d\t%s\t%s\t\t%s\n", job.getJobID(), job.getRunState(),job.getStartTime(), job.getUsername(), job.getJobPriority().name(), job.getSchedulingInfo());
  }
}
黄色のマーカーが追加した部分です。


次にHadoopをこの修正したコードで実行できるようにビルドしますが、javacコマンドなどを使って手動で行うのは面倒です。そこで、HadoopではApache Antを使用します。

Apache Antはビルドツールと言って、コンパイルなどに必要な情報をbuild.xmlファイルに記述しておくことで手軽にビルドできるというものです。詳しくはこちら(http://www.javadrive.jp/ant/)をご覧ください。また、似たようなツールにmavenというものもあります。Hadoopにはbuild.xmlが付属しているので、Antを使えば簡単にビルドできます。

詳細は省きますが、build.xmlによると、今回修正したコードをビルドするには以下のコマンドを実行すればいいようです。


ant compile-mapred-classes
※一回目は少し時間がかかります。

BUILD SUCCESSFULと出ましたら、Hadoopのプロセスを起動し、適当なJobを投げたあとでhadoop job -list allを実行してみます。




Running : 1 Succeded : 2 Failed : 3 Prep : 4
JobId                                     State StartTime             UserName Priority      SchedulingInfo
job_201212090101_0001 2        1354982617339 masahiro    NORMAL NA


ちゃんとラベルの位置がそろいました。フォントの設定上(?)ここではそろってないですが、ターミナルではちゃんとそろってます(汗)

ということでHadoopはこのように簡単にカスタマイズ出来ます。今回は練習なので簡単な例ですが、例えば出力されるログをカスタマイズしたり、自作の管理コマンドを作ることも出来ます。また、Hadoop JIRA(https://issues.apache.org/jira/browse/HADOOP)で公開されているバグのパッチを作成し、コミュニティに貢献することも出来ます。

なお、上記の例はあくまでもサンプルであり、修正することでWebUIなど、他の機能に影響が出るかもしれないことをご承知置きください。また気が向いたら、ちゃんと使えるものを実装してみます。

0 件のコメント:

コメントを投稿