获取当前正在运行的Hadoop任务的任务尝试ID

时间:2009-09-29 20:15:59

标签: hadoop

Hadoop教程的Task Side-Effect Files部分提到使用任务的“尝试”作为唯一名称。如何在我的mapper或reducer中获取此尝试ID?

3 个答案:

答案 0 :(得分: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];
   }

答案 1 :(得分:10)

使用新的Hadoop API:

context.getTaskAttemptID().getTaskID().getId()

答案 2 :(得分:4)

晚会,但您可以使用TaskAttemptID类来解析mapred.task.id属性。

在我的情况下,我想要数字尝试值本身并在我的Mapper中使用以下内容:

int _attemptID;

@Override
public void configure(JobConf conf) {
    TaskAttemptID attempt = TaskAttemptID.forName(conf.get("mapred.task.id"));
    _attemptID = attempt.id();
}