La section Task Side-Effect Files du tutoriel Hadoop mentionne l'utilisation du "tentative" de la tâche comme nom unique. Comment puis-je obtenir cette ID de tentative dans mon mapper ou réducteur?Obtention de l'ID de la tentative de tâche pour la tâche Hadoop en cours d'exécution
8
A
Répondre
11
Si vous avez besoin d'un identifiant unique pour un fichier d'effets secondaires dans Hadoop, vous pouvez tirer parti de la tentative id unique dans le travail avec ce code:
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];
}
4
fin à la partie, mais vous pouvez utiliser le TaskAttemptID
classe pour analyser la propriété mapred.task.id
.
Dans mon cas, je voulais la valeur numérique de tentative elle-même et utilisé ce qui suit dans mon Mapper:
int _attemptID;
@Override
public void configure(JobConf conf) {
TaskAttemptID attempt = TaskAttemptID.forName(conf.get("mapred.task.id"));
_attemptID = attempt.id();
}
9
Avec la nouvelle API Hadoop:
context.getTaskAttemptID().getTaskID().getId()