JRubyでJobTrackerにアクセスする方法
JRubyからJobTrackerにアクセスする方法を紹介します。
JRubyなので、JavaクラスのJobClinet経由でJobTrakcerにアクセスして、
情報を取得することが出来ます。
今回の例はCDH3u0の環境で動かしています。
また、実行時にHadoopの設定ファイルにクラスパスを通す必要があります。
以下は、動いているジョブのJobIDを出力する例です。
include Java ..必要なjarをrequire(省略) client = org.apache.hadoop.mapred.JobClient.new(org.apache.hadoop.mapred.JobConf.new) job_statuses = client.all_jobs job_statuses.each do |job_status| puts job_status.job_id if not job_status.job_complete? end
次は、動いているジョブの各タスクの進捗を表示する例です。
include Java ..必要なjarをrequire(省略) client = org.apache.hadoop.mapred.JobClient.new(org.apache.hadoop.mapred.JobConf.new) job_statuses = client.all_jobs job_statuses.each do |job_status| if not job_status.job_complete? puts job_status.job_id # map task task_reports = client.get_map_task_reports(job_status.job_id) task_reports.each do |task_report| puts "\t#{task_report.task_id} : #{task_report.progress}" end # reduce task task_reports = client.get_reduce_task_reports(job_status.job_id) task_reports.each do |task_report| puts "\t#{task_report.task_id} : #{task_report.progress}" end end end
最後に動いてるジョブのカウンター情報を表示する例。
include Java ..必要なjarをrequire(省略) client = org.apache.hadoop.mapred.JobClient.new(org.apache.hadoop.mapred.JobConf.new) job_statuses = client.all_jobs job_statuses.each do |job_status| if not job_status.job_complete? puts job_status.job_id job = client.get_job(job_status.job_id) puts job.counters end end
単に、JRubyでJobClinetクラスにアクセスしてるだけの話ですが、
jirbを使って対話的に情報を取得したり、
手軽にスクリプトを組んで監視スクリプトなど
色々書けるので便利だと思いました。