/ / Wie kann die Aufteilungsgröße in Hadoops MapReduce-Streaming auf eine Zeile eingestellt werden? - hadoop, mapreduce, hadoop-streaming

Wie wird die Split-Größe in Hadoop MapReduce Streaming auf eine Zeile festgelegt? - Hadoop, Mapreduce, Hadoop-Streaming

Tor: Jeder Knoten, der eine Kopie der Matrix hat, liest die Matrix, berechnet einen bestimmten Wert über Mapper (Matrix, Schlüssel) und gibt <Schlüssel, Wert> aus

Ich versuche, Mapper zu verwenden, der per Streaming in Python geschrieben wurde. Es gibt keine Reduzierungen. Im Wesentlichen versuche ich, die Aufgabe ähnlich zu erledigen https://hadoop.apache.org/docs/current/hadoop-streaming/HadoopStreaming.html#How_do_I_process_files_one_per_map

Ansatz: Ich habe eine Eingabedatei (Aufgaben) im folgenden Format (Header nur als Referenz) generiert:

/path/matrix.csv 0
/path/matrix.csv 0
...              99

Dann starte ich (Hadoop Streaming) Mapper auf diesemAufgaben. Mapper analysiert die Zeile, um die Argumente zu ermitteln - Dateiname, Schlüssel; Anschließend liest der Mapper die Matrix nach Dateiname und berechnet den mit dem Schlüssel verknüpften Wert. gibt dann <Schlüssel, Wert> aus.

Problem: Der aktuelle Ansatz funktioniert und liefert korrekte Ergebnisse. Dies geschieht jedoch in einem Mapper, da die Größe der Eingabedatei nur 100 Textzeilen beträgt und nicht in mehrere Mapper aufgeteilt wird. Wie erzwinge ich eine solche Aufteilung trotz kleiner Eingangsgröße?

Antworten:

0 für die Antwort № 1

Mir wurde klar, dass ich anstelle von mehreren Mappern und ohne Reduzierungen genau das Gegenteil tun konnte. Nun ist meine Architektur wie folgt:

  • Der Thin Mapper liest einfach die Eingabeparameter und gibt den Schlüsselwert aus
  • Fat Reductions lesen die Dateien und führen den Algorithmus mit dem erhaltenen Schlüssel aus und geben dann die Ergebnisse aus
  • set -D mapreduce.job.reduces = 10, um die Parallelisierungsstufe zu ändern

Es war eine dumme (falsche) Herangehensweise, aber die richtige war auch nicht offensichtlich.