Hadoop "Не удается загрузить библиотеку native-hadoop для вашей платформы" в Docker-spark?
Я использую docker-spark. После запуска spark-shell
, это выводит:
15/05/21 04:28:22 DEBUG NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError:no hadoop in java.library.path
15/05/21 04:28:22 DEBUG NativeCodeLoader: java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Переменные окружения этого spark container
являются:
bash-4.1# export
declare -x BOOTSTRAP="/etc/bootstrap.sh"
declare -x HADOOP_COMMON_HOME="/usr/local/hadoop"
declare -x HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"
declare -x HADOOP_HDFS_HOME="/usr/local/hadoop"
declare -x HADOOP_MAPRED_HOME="/usr/local/hadoop"
declare -x HADOOP_PREFIX="/usr/local/hadoop"
declare -x HADOOP_YARN_HOME="/usr/local/hadoop"
declare -x HOME="/"
declare -x HOSTNAME="sandbox"
declare -x JAVA_HOME="/usr/java/default"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/default/bin:/usr/local/spark/bin:/usr/local/hadoop/bin"
declare -x PWD="/"
declare -x SHLVL="3"
declare -x SPARK_HOME="/usr/local/spark"
declare -x SPARK_JAR="hdfs:///spark/spark-assembly-1.3.0-hadoop2.4.0.jar"
declare -x TERM="xterm"
declare -x YARN_CONF_DIR="/usr/local/hadoop/etc/hadoop"
После ссылки на ошибку Hadoop "Невозможно загрузить библиотеку native-hadoop для вашей платформы" в CentOS я сделал следующее:
(1) Проверьте hadoop
библиотека:
bash-4.1# file /usr/local/hadoop/lib/native/libhadoop.so.1.1.0
/usr/local/hadoop/lib/native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
Да, это 64-bit
библиотека.
(2) Попробуйте добавить HADOOP_OPTS
переменная окружения:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=/usr/local/hadoop/lib/native"
Это не работает, и сообщает ту же ошибку.
(3) Попробуйте добавить HADOOP_OPTS
а также HADOOP_COMMON_LIB_NATIVE_DIR
переменная окружения:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
Это все еще не работает, и сообщает ту же ошибку.
Кто-нибудь может дать некоторые подсказки по этому вопросу?
2 ответа
Добавление Hadoop
библиотека в LD_LIBRARY_PATH
исправить эту проблему:
export LD_LIBRARY_PATH="$HADOOP_HOME/lib/native/:$LD_LIBRARY_PATH"
Потому что путь шага (3) является ошибкой. Должен быть:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_LIB_NATIVE_DIR"
Тогда это работает.
Отладить эту проблему очень просто, отредактируйте профиль log4j$HADOOP_HOME/etc/hadoop/log4j.properties
Добавить новую строку
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
Затем выполните команду
hdfs dfsadmin -report
Журнал показывает, что путь является ошибкой.
2022-10-10 16:32:30,599 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
2022-10-10 16:32:30,601 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: no hadoop in java.library.path
2022-10-10 16:32:30,601 DEBUG util.NativeCodeLoader: java.library.path=/opt/hadoop/lib