Ein bestimmter Job, den ich ausführe, muss einige Metadaten aus einer Datenbank sammeln (MySQL, obwohl dies nicht so relevant ist), bevor einige große HDFS-Dateien verarbeitet werden. Diese Metadaten werden den Daten in den Dateien hinzugefügt und an die späteren Stufen map/combine/reduce weitergeleitet.Kombinieren von Hadoop MapReduce und Datenbankabfragen
Ich fragte mich, wo der "richtige" Ort, um diese Abfrage setzen könnte. Ich brauche die Metadaten, die verfügbar sind, wenn der Mapper beginnt, aber es dort zu platzieren, scheint redundant zu sein, da jeder Mapper dieselbe Abfrage ausführt. Wie kann ich (wenn überhaupt) diese Abfrage einmal durchführen und ihre Ergebnisse über alle Mapper verteilen? Gibt es eine allgemeine Möglichkeit, Daten zwischen allen Knoten, die eine Aufgabe ausführen, zu teilen (außer dem Schreiben in HDFS)? Vielen Dank.
Wenn Ihre Metadaten zu groß sind, um in der Konfiguration gespeichert zu werden, sollten Sie darüber hinaus den DistributedCache verwenden. Erwerben Sie die Metadaten aus der DB in Ihrem Treiber, speichern Sie in Datei und fügen Sie dann die Datei zum DistributedCache hinzu - die Datei wird dann in jedem Mapper für Sie in den Speicher laden und bei Bedarf anhängen –
Beide Antworten sind ausgezeichnet, danke! – sa125