Meine Frage bezieht sich auf mapreduce programming in java
.
Angenommen, ich habe das WordCount.java Beispiel, ein Standard mapreduce program
. Ich möchte, dass die Kartenfunktion einige Informationen sammelt und zu den Reduzierungsfunktionskarten zurückkehrt, die wie folgt aussehen: <slaveNode_id,some_info_collected>
,
so dass I can know what slave node collected what data
.. Irgendeine Idee wie ??
Danke !!
Was Sie fragen, ist, dass die Anwendung (Ihr map-reduce-dingy) über die Infrastruktur informiert wird, auf der sie ausgeführt wurde.
Im Allgemeinen lautet die Antwort, dass Ihre Anwendung diese Informationen nicht benötigt. Jeder Aufruf des Mappers und jeder Aufruf des Reducers kann auf einem anderen Knoten oder auf demselben Knoten ausgeführt werden. Die Schönheit von MapReduce ist, dass das Ergebnis das gleiche ist, also für Ihre Anwendung: es ist egal.
Als Folge hat die API keine Funktionen, um diese Anfrage zu unterstützen.
Viel Spaß beim Lernen von Hadoop:)
P.S. Der einzige Weg, an den ich denken kann (was garstig ist) ist, dass Sie einen Systemaufruf irgendeiner Art in den Mapper einbeziehen und das zugrunde liegende Betriebssystem nach seinem Namen / Eigenschaften / etc fragen. Diese Art von Konstrukt würde Ihre Anwendung sehr untragbar machen; d. h. es wird nicht in Hadoop in Windows oder Amazon ausgeführt.
Wordcount ist das falsche Beispiel für Sie. Sie möchten einfach alle Informationen zusammenführen. Dies invertiert die Dinge zu Wordcount.
Im Grunde geben Sie Ihre sklavenNode_id nur als IntWritable
aus (wenn dies möglich ist) und die Informationen als Text
.
Und der Reducer würde genauso gehen:
%Vor%