Um einige Punkte in Ihrer Frage zu klären. Wenn Sie dem Klassenpfad Jars hinzufügen müssen, können Sie dies auf verschiedene Arten tun:
- Backen Sie die Gläser in Ihrem Jobglas (der sogenannte Jar-in-Jar-Ansatz), wobei sich jedes der Abhängigkeitsgläser in einem lib-Ordner des Hauptjobglases befindet
- Laden Sie die Jars in HDFS hoch, und ändern Sie Ihre Jobkonfiguration, um diese Japs in den Klassenpfad bei map aufzunehmen / verringern Sie die Ausführungszeit (
DistributedCache.addFileToClassPath(new Path("hdfs://namenode:8020/myapp/mylib.jar"), job);
). - Wie oben, aber lassen Sie den Job-Client die Arbeit erledigen, indem Sie die Dose in HDFS hochladen und den verteilten Cache konfigurieren (vorausgesetzt, Sie verwenden ToolRunner.run (), um Ihren Job zu starten):
hadoop jar myjar.jar org.MainClass -libjars dep1.jar,dep2.jar
LD_LIBRARY_PATH wird für native Shared Libraries (kompilierter C-Code) verwendet. Wenn Sie .so-Bibliotheken einschließen möchten, können Sie die Option -files (ähnlich wie im vorherigen Beispiel -libjars) verwenden, um den Jobclient zu veranlassen, die .so-Datei in HDFS hochzuladen, und jede Zuordnungs- / Reduzierungsaufgabe kann so konfiguriert werden, dass sie in Java eingeschlossen wird .library.path Eigentum:hadoop jar myjar.jar org.MainClass -files libIOProcs.so