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 回答
10

使用新的 Hadoop API:

context.getTaskAttemptID().getTaskID().getId()
于 2013-06-25T23:11:52.487 回答
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 回答