Ich weiß, dass Sie zwei Mapper der gleichen Datei erzeugen können, wenn Sie die addinputpath -Funktion zweimal mit dem gleichen Pfad eingeben, aber ich möchte, dass die Datei jedes Mal etwas anders verarbeitet wird.Eine Datei zweimal mit verschiedenen Parametern lesen
Insbesondere möchte ich jedes Mal verschiedene Parameter verwenden, die ich durch die Job-Klasse (mit configuration.set/get) übergeben habe. Wenn die Dateien unterschiedlich sind, erhalte ich den Pfad/Namen der Datei, indem ich die context/inputsplit-Klassen verwende, um das zu erreichen, aber jetzt, da sie dieselben sind, kann ich sie nicht unterscheiden. Irgendwelche Gedanken?
Jeder Mapper ist eine andere Maptask, aber ich habe keine Ahnung, ob ich irgendwelche Informationen über die Maptasks verwenden kann. Ich kenne auch nicht die Reihenfolge, in der das Framework Eingaben in maptasks einteilt - es könnte nützlich sein.
Alternativ könnte ich die Datei kopieren (unter einem anderen Namen), aber das wäre eine Verschwendung von Ressourcen
Das Problem ist, dass die/* etwas mit diesem Schlüssel Wert */kostet eine Menge und damit die emittiert müssen parallel passieren. Gibt es wirklich keine andere Möglichkeit, zwei Lesevorgänge derselben Datei zu unterscheiden? – user3161227
Wie wäre es, es in zwei Threads laufen zu lassen und auf beide zu warten? Hadoop kann sowieso mehrere Mapper auf demselben Knoten ausführen, so dass es eigentlich keinen großen Unterschied macht. – yurgis
Wenn Sie denken/* etwas mit diesem Schlüsselwert */kosten, führen Sie mehr Mapper aus, um die beste Parallelität zu erreichen. Auch wenn ein Mapper Ausgabe 1 schreibt, schreibt die andere Ausgabe2. Der obige Ansatz sieht am besten aus, da es vermeidet, dass IO zweimal ausgeführt wird, was ein großartiger Leistungsverstärker ist. Zweitens ist es nicht möglich, zwischen zwei Dateien zu unterscheiden und verschiedene Parameter in demselben MR-Job aufzunehmen. –