Ausführen einer eigenständigen Hadoop-Anwendung auf mehreren CPU-Kernen

Mein Team erstellte eine Java-Anwendung unter Verwendung der Hadoop-Bibliotheken, um eine Reihe von Eingabedateien in nützliche Ausgaben umzuwandeln. Bei der aktuellen Auslastung reicht ein einzelner Multicore-Server für das kommende Jahr aus. Wir brauchen (noch) keinen Multiserver-Hadoop-Cluster, haben uns aber dafür entschieden, dieses Projekt "in Vorbereitung" zu starten.

Wenn ich diese App über die Befehlszeile (oder in Eclipse oder Netbeans) ausführe, konnte ich sie noch nicht davon überzeugen, mehr als eine Map zu verwenden und / oder den Thread gleichzeitig zu reduzieren. Angesichts der Tatsache, dass das Tool sehr rechenintensiv ist, ist diese "Einfachverschraubung" mein aktueller Engpass.

Beim Ausführen im NetBeans-Profiler starte die App zwar mehrere Threads für verschiedene Zwecke, es wird jedoch nur eine einzige Map / Reduce ausgeführt.

Die Eingabedaten bestehen aus mehreren Eingabedateien, sodass Hadoop für die Kartenphase mindestens 1 Thread pro Eingabedatei gleichzeitig ausführen kann.

Was muss ich tun, damit mindestens 2 oder sogar 4 aktive Threads ausgeführt werden (was für den größten Teil der Verarbeitungszeit dieser Anwendung möglich sein sollte)?

Ich erwarte, dass dies etwas sehr Dummes ist, das ich übersehen habe.

Ich habe das gerade gefunden:https: //issues.apache.org/jira/browse/MAPREDUCE-136 Dies implementiert das Feature, nach dem ich in Hadoop 0.21 gesucht habe. Es führt das Flag mapreduce.local.map.tasks.maximum ein, um es zu steuern.

Für jetzt habe ich auch die beschriebene Lösung gefundenhier in dieser Frage.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage