1

Hadoop でデータ集約型のジョブを実行する場合。Hadoop がジョブを実行します。今私が欲しいのは、仕事が完了したときです。実行されたジョブに関する統計が表示されます。かかった時間、マッパーの量、リデューサーの量、その他の有用な情報。

ジョブ実行中にジョブトラッカーやデータノードなどのブラウザに表示される情報。しかし、Hadoop を介してジョブを実行し、ジョブの完了時にレポートのような結果を提供するアプリケーションで統計を取得するにはどうすればよいでしょうか。私のアプリケーションはJAVAです

私を助けることができるAPI。提案をいただければ幸いです。

4

2 に答える 2

1

JobClientの次のメソッドを調べます。

これらの呼び出しは両方ともTaskReportオブジェクトの配列を返し、そこから開始/終了時刻と各タスクの個々のカウンターを取得できます

于 2013-04-23T23:24:54.727 に答える
1

チルスは正しい。TaskReportのドキュメントには、org.apache.hadoop.mapred.TaskReportからこれらのメソッドを継承していると記載されていorg.apache.hadoop.mapreduce.TaskReportます。したがって、そのような値を取得できます。

Map および Reduce タスクごとにグループ化された、ジョブの開始時刻と終了時刻を取得するコードを次に示します。

import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobStatus;
import org.apache.hadoop.conf.Configuration;
import java.net.InetSocketAddress;
import java.util.*;
import org.apache.hadoop.mapred.TaskReport;
import org.apache.hadoop.mapred.RunningJob;
import org.apache.hadoop.util.StringUtils;
import java.text.SimpleDateFormat;

public class mini{
        public static void main(String args[]){
                String jobTrackerHost = "192.168.151.14";
                int jobTrackerPort = 54311;

                try{
                        Configuration conf = new Configuration();
                        JobClient jobClient = new JobClient(new InetSocketAddress(jobTrackerHost, jobTrackerPort), conf);
                        JobStatus[] activeJobs = jobClient.jobsToComplete();
                        SimpleDateFormat dateFormat = new SimpleDateFormat("d-MMM-yyyy HH:mm:ss");
                        for(JobStatus js: activeJobs){
                                System.out.println(js.getJobID());
                                RunningJob runningjob = jobClient.getJob(js.getJobID());
                                            while(runningjob.isComplete() == false){ /*Wait till the job completes.*/}
                                TaskReport[] maptaskreports = jobClient.getMapTaskReports(js.getJobID());
                                for(TaskReport tr: maptaskreports){
                                        System.out.println("Task ID: "+tr.getTaskID()+" Start TIme: "+StringUtils.getFormattedTimeWithDiff(dateFormat, tr.getStartTime(), 0)+" Finish Time: "+StringUtils.getFormattedTimeWithDiff(dateFormat, tr.getFinishTime(), tr.getStartTime()));
                                }
                                TaskReport[] reducetaskreports = jobClient.getReduceTaskReports(js.getJobID());
                                for(TaskReport tr: reducetaskreports){
                                        System.out.println("Task ID: "+tr.getTaskID()+" Start TIme: "+StringUtils.getFormattedTimeWithDiff(dateFormat, tr.getStartTime(), 0)+" Finish Time: "+StringUtils.getFormattedTimeWithDiff(dateFormat, tr.getFinishTime(), tr.getStartTime()));
                                }

                        }
                }catch(Exception ex){
                        ex.printStackTrace();
                }
        }
}

これは、実行中のジョブの開始時刻と終了時刻を取得する簡単な例です。好きなようにできます。

そして、これは「Word Count」MapReduce ジョブのこのプログラムの実行です。

[root@dev1-slave1 ~]# java -classpath /usr/lib/hadoop/hadoop-core.jar:/usr/lib/hadoop/lib/jackson-core-asl-1.8.8.jar:/usr/lib/hadoop/lib/jackson-mapper-asl-1.8.8.jar:/usr/lib/hadoop/lib/commons-logging-1.1.1.jar:/usr/lib/hadoop/lib/commons-configuration-1.6.jar:/usr/lib/hadoop/lib/commons-lang-2.4.jar:. mini
job_201501151144_0042
Task ID: task_201501151144_0042_m_000000 Start TIme: 16-Jan-2015 17:07:35 Finish Time: 16-Jan-2015 17:07:43 (7sec)
Task ID: task_201501151144_0042_m_000001 Start TIme: 16-Jan-2015 17:07:35 Finish Time: 16-Jan-2015 17:07:56 (20sec)
Task ID: task_201501151144_0042_m_000002 Start TIme: 16-Jan-2015 17:07:35 Finish Time: 16-Jan-2015 17:07:43 (7sec)
Task ID: task_201501151144_0042_m_000003 Start TIme: 16-Jan-2015 17:07:43 Finish Time: 16-Jan-2015 17:07:53 (10sec)
Task ID: task_201501151144_0042_m_000004 Start TIme: 16-Jan-2015 17:07:43 Finish Time: 16-Jan-2015 17:07:53 (10sec)
Task ID: task_201501151144_0042_r_000000 Start TIme: 16-Jan-2015 17:07:43 Finish Time: 16-Jan-2015 17:08:00 (17sec)
Task ID: task_201501151144_0042_r_000001 Start TIme: 16-Jan-2015 17:07:43 Finish Time: 16-Jan-2015 17:08:05 (22sec)
Task ID: task_201501151144_0042_r_000002 Start TIme: 16-Jan-2015 17:07:43 Finish Time: 16-Jan-2015 17:08:05 (21sec)

ディレクトリ内の Hadoopの目的のjspファイルを開き、 mapreduce/src/webapps/job/JOBTRACKER Web UI がどのように情報を表示しているかを把握することをお勧めします。

上記のコードはjobtasks.jspから派生させました。

それが役に立てば幸い。:)

于 2015-01-16T11:45:08.343 に答える