Interessante Frage.
Sagen Sie brauchen, um effizient einzigartige Integer-ID basiert auf Mapper zu generieren, wie es hier geschehen ist. Unique Key generation in Hive/Hadoop
Vielleicht haben Sie einen ganz anderen Grund, die Mapper-ID zu verwenden (zurückgegeben durch context.getTaskAttemptID() getTaskID() .getId())
Das Problem mit der Zuordnungsaufgaben-ID ist, dass es nicht deterministisch basierend auf Eingabedatei zugeordnet ist.
Zum Beispiel Ihrer Mapper-Eingabedateien führen vielleicht einen vorhergehenden Minderer und sagen Sie 10 von Eingang Partitionen haben:
Ausgabe-r-00000 Ausgabe-r-00001 ... Ausgabe-r- 00009
Nun müssen Sie diese Daten einem Mapper zuführen und benötigen möglicherweise eine ID des Mappers, die direkt mit dem Index der Eingabedatei übereinstimmt.
Normalerweise wird in diesem Fall zunächst die Aufteilung der Eingänge deaktiviert, damit jeder Mapper seine eigene Partition vollständig verarbeiten kann.
Aber wie ich bereits sagte Mapper nicht deterministisch zugeordnet sind, so dass Sie nicht auf context.getTaskAttemptID verlassen können() getTaskID() getId():..
Manchmal 0 Mapper wird output-r-00000, verarbeiten manchmal Ausgang -r-00001 und so weiter.
Um eine benutzerdefinierte Mapper-ID deterministisch zu erstellen, können Sie den Namen der Eingabedatei verwenden, den Sie analysieren können, um den Partitionsindex abzurufen.
vielen Dank für die ausführliche Erklärung Yurgis. Gibt es ein Beispielprogramm, das Sie mir vorschlagen können? –