1

私はHadoopプロジェクト(現在はhadoop 1.2.1を使用)に取り組んでおり、タスクの実行時情報と、どのマシンがタスクを適切に実行しているかを追跡する必要があります。以下を使用してタスクの進行状況を取得できます。

RunningJob runningJob = JobClient.runJob(conf);
JobStatus jobStatus = runningJob.getJobStatus();

ここから、JobTracker を取得し、マップ タスクの進行状況を取得できます。

TaskReport[] mapTaskReports = tracker.getMapTaskReports();

しかし、タスク レポートを入手したので、これらのタスクがどのマシンで実行されているか、どのマシンで実行されているかを知る方法がわかりません。取得できるマシン識別情報 (マシン名、IP アドレスなど) はありますか? これらのタスク レポートに関連付けることができますか?

注: ジョブがまだ進行中の場合にこのマッピングを実行できるようにする必要があるため、特定のマシンが特定のタスクに対してうまく機能していないかどうかに基づいて決定を下すことができます。

編集: TaskTrackerオブジェクトには getHostName() メソッドを使用して必要なものがあると思いますが、そのインスタンスを取得する方法がわかりません。TaskTracker コンストラクターは JobConf オブジェクトを受け取りますが、ジョブのタスクを実行している各マシンには TaskTracker の独自のインスタンスがあるため、それを取得するマシンを指定していないようです。

4

1 に答える 1

1

RunningJob には、TaskCompletionEvent 配列を返す getTaskCompletionEvents() という API があります。

TaskCompletionEvent を使用して、Task Tracker の HTTP アドレスを知ることができます。

以下のコードを試してください..これはサンプルコードです..テストされていません

TaskCompletionEvent [] events =  runningJob.getTaskCompletionEvents (0); 
for (TaskCompletionEvent event: events) { 
        System.out.println(event.getTaskTrackerHttp()); // host:port format
}
于 2013-11-06T16:35:24.373 に答える