Чтобы уточнить некоторые моменты в вашем вопросе. Если вам нужно добавить 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