8

Hadoop チュートリアルのTask Side-Effect Filesセクションでは、タスクの「attemptid」を一意の名前として使用することが言及されています。マッパーまたはリデューサーでこの試行 ID を取得するにはどうすればよいですか?

4

3 に答える 3

11

Hadoop の副作用ファイルに一意の ID が必要な場合は、次のコードを使用して、ジョブで試行の一意の ID を利用できます。

   public static String getAttemptId(Configuration conf) throws IllegalArgumentException
   {
       if (conf == null) {
           throw new NullPointerException("conf is null");
       }

       String taskId = conf.get("mapred.task.id");
       if (taskId == null) {
           throw new IllegalArgumentException("Configutaion does not contain the property mapred.task.id");
       }

       String[] parts = taskId.split("_");
       if (parts.length != 6 ||
               !parts[0].equals("attempt") ||
               (!"m".equals(parts[3]) && !"r".equals(parts[3]))) {
           throw new IllegalArgumentException("TaskAttemptId string : " + taskId + " is not properly formed");
       }

       return parts[4] + "-" + parts[5];
   }
于 2009-09-29T21:26:48.723 に答える
4

パーティーに遅れますが、TaskAttemptIDクラスを使用してプロパティを解析できmapred.task.idます。

私の場合、試行値自体が必要で、マッパーで次を使用しました。

int _attemptID;

@Override
public void configure(JobConf conf) {
    TaskAttemptID attempt = TaskAttemptID.forName(conf.get("mapred.task.id"));
    _attemptID = attempt.id();
}
于 2012-07-04T20:19:58.407 に答える