Ändern Sie LD_LIBRARY_PATH und CLASSPATH auf dem Clusterknoten, bevor Sie einen Hadoop-Job ausführen

1238
Ashish Sharma

Ich muss LD_LIBRARY_PATH und CLASSPATH vor dem Ausführen eines Jobs eines Clusters festlegen. In LD_LIBRARY_PATH muss ich die Position einiger Gläser hinzufügen, die während der Ausführung des Jobs erforderlich sind. Da diese Gläser in meinem Cluster verfügbar sind, ähnlich wie bei CLASSPATH.

Ich habe einen 3-NODE-Cluster. Ich muss dieses LD_LIBRARY_PATH und CLASSPATH für alle 3 Datenknoten so ändern, dass die an meinem Cluster-Knoten verfügbaren jars zu classpath hinzugefügt werden, sodass die folgenden jar verfügbar sind, während der Job als i ausgeführt wird Ich vermeide es, die JAR-Verteilung zu kopieren, während der Job ausgeführt wird, um alle verfügbaren verfügbaren JAR auf Cluster-Knoten zu verwenden

1

1 Antwort auf die Frage

1
Chris White

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