Измените LD_LIBRARY_PATH и CLASSPATH на узле кластера перед запуском задания hadoop

1176
Ashish Sharma

Мне нужно установить LD_LIBRARY_PATH и CLASSPATH перед запуском задания кластера. В LD_LIBRARY_PATH мне нужно добавить местоположение некоторых jar-файлов, которые требуются при выполнении задания, так как эти jar-файлы доступны в моем кластере, аналогично CLASSPATH.

У меня есть кластер с 3 узлами, мне нужно изменить эти LD_LIBRARY_PATH и CLASSPATH для всех 3 узлов данных таким образом, чтобы файлы jar были доступны на моем узле кластера при добавлении в classpath, чтобы следующий jar был доступен во время выполнения задания как i избегаю копирования распределения jar при запуске задания, чтобы использовать все готовые доступные jar на узлах кластера

1

1 ответ на вопрос

1
Chris White

Чтобы уточнить некоторые моменты в вашем вопросе. Если вам нужно добавить jar-файлы в classpath, вы можете сделать это несколькими способами:

  • Сложно запечь банки в вашу рабочую банку (так называемый подход jar-in-jar), где каждый из банок зависимостей помещается в папку lib основной фляги работы
  • Загрузите jar-файлы в HDFS и измените конфигурацию своей работы, чтобы включить эти jar-файлы в classpath в map / сократить время выполнения ( DistributedCache.addFileToClassPath(new Path("hdfs://namenode:8020/myapp/mylib.jar"), job);)
  • Как и выше, но сделайте так, чтобы клиент задания выполнял загрузку jar-файла в HDFS и настройку распределенного кэша (при условии, что вы используете ToolRunner.run () для запуска задания): hadoop jar myjar.jar org.MainClass -libjars dep1.jar,dep2.jar

LD_LIBRARY_PATH используется для собственных разделяемых библиотек (скомпилированный код C). Если вы хотите включить библиотеки .so, то вы можете использовать опцию -files (аналогично предыдущему примеру -libjars), чтобы получить JobClient для загрузки .so в HDFS, и настроить каждую задачу map / lower для включения ее в Java. .library.path propeerty:hadoop jar myjar.jar org.MainClass -files libIOProcs.so

Похожие вопросы