Hadoop" не удается загрузить библиотеку native-hadoop для вашей платформы " предупреждение

в настоящее время я настраиваю hadoop на сервере под управлением в CentOS. Когда я бегу start-dfs.sh или stop-dfs.sh, Я получаю следующую ошибку:

предупредить util.NativeCodeLoader: не удалось загрузить библиотеку native-hadoop для ваша платформа... использование классов builtin-java, где это применимо

Я Hadoop 2.2.0.

выполнение поиска в интернете вывело эту ссылку: http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html

однако содержание /native/ каталог на hadoop 2.x кажется другим, поэтому я не уверен, что делать.

Я также добавил Эти две переменные среды в hadoop-env.sh:

экспорт HADOOP_OPTS= " $HADOOP_OPTS - Джава.библиотека.path= / usr / local/hadoop/lib/"

экспорт HADOOP_COMMON_LIB_NATIVE_DIR="/usr/local/hadoop/lib/родной/"

какие идеи?

20 ответов


Я предполагаю, что вы используете Hadoop на 64-битных CentOS. Причина, по которой вы видели это предупреждение, - это родная библиотека Hadoop $HADOOP_HOME/lib/native/libhadoop.so.1.0.0 был фактически составлен на 32 бит.

в любом случае, это просто предупреждение и не повлияет на функциональные возможности Hadoop.

вот способ, если вы хотите устранить это предупреждение, загрузите исходный код Hadoop и перекомпилируйте libhadoop.so.1.0.0 в 64-битной системе, затем замените 32-битную.

шаги по перекомпиляции исходного кода включены здесь для Ubuntu:

удачи.


просто добавить слово уроженца на HADOOP_OPTS такой:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"

PS: спасибо Searene


ответ зависит от того... Я только что установил Hadoop 2.6 из tarball на 64-битный CentOS 6.6. Установка Hadoop действительно поставляется со встроенной 64-разрядной собственной библиотекой. Для моей установки, это здесь:

/opt/hadoop/lib/native/libhadoop.so.1.0.0

и я знаю, что это 64-битный:

[hadoop@VMWHADTEST01 native]$ ldd libhadoop.so.1.0.0
./libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
linux-vdso.so.1 =>  (0x00007fff43510000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f9be553a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f9be51a5000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9be5966000)

к сожалению, я глупо пропустил ответ прямо там, глядя мне в лицо, когда я фокусировался на: "Эта библиотека 32 pr 64 бит?":

`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)

Итак, урок усвоен. Во всяком случае, остальное, по крайней мере, привело меня к возможность подавить предупреждение. Поэтому я продолжил и сделал все, что было рекомендовано в других ответах, чтобы предоставить путь к библиотеке, используя переменную среды HADOOP_OPTS безрезультатно. Я посмотрел на исходный код. Модуль, который генерирует ошибку, сообщает вам подсказку (util.NativeCodeLoader):

15/06/18 18:59:23 WARN util.NativeCodeLoader: Unable to load native-hadoop    library for your platform... using builtin-java classes where applicable

Итак, отсюда, чтобы увидеть, что это делает:

http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/

Ах, есть некоторое ведение журнала уровня отладки-давайте включим это, посмотрим, получим ли мы дополнительную помощь. Это делается путем добавления следующей строки в $HADOOP_CONF_DIR / log4j.файл свойств:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG

затем я запустил команду, которая генерирует исходное предупреждение, например stop-dfs.sh и получил это Гуди:

15/06/18 19:05:19 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /opt/hadoop/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /opt/hadoop/lib/native/libhadoop.so.1.0.0)

и ответ раскрывается в этом фрагменте отладочного сообщения (то же самое, что предыдущая команда ldd "пыталась" сказать мне:

`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)

какая версия GLIBC у меня есть? Вот простой трюк, чтобы узнать:

[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12

итак, не удается обновить мою ОС до 2.14. Единственное решение-создать собственные библиотеки из источников в моей ОС или подавить предупреждение и просто игнорировать его сейчас. Я решил просто подавить раздражающее предупреждение на данный момент (но планируйте строить из источников в будущем) покупайте, используя те же параметры ведения журнала, которые мы использовали для получения отладочного сообщения, кроме сейчас, просто сделайте его уровнем ошибки.

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

Я надеюсь, что это поможет другим увидеть, что большим преимуществом программного обеспечения с открытым исходным кодом является то, что вы можете понять это, если вы сделаете несколько простых логических шагов.


у меня была та же проблема. Это решается путем добавления следующих строк .bashrc:

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

в моем случае, после того, как я построил hadoop на своей 64-битной Linux mint OS, Я заменил родную библиотеку в hadoop/lib. Тем не менее проблема сохраняется. Затем я понял, что hadoop указывает на hadoop/lib а не hadoop/lib/native. Поэтому я просто переместил все содержимое из родной библиотеки в родительскую. И предупреждение просто исчезло.


после непрерывного исследования, предложенного Котием, проблема была решена.

hduser@ubuntu:~$ cd /usr/local/hadoop

hduser@ubuntu:/usr/local/hadoop$ ls

bin  include  libexec      logs        README.txt  share
etc  lib      LICENSE.txt  NOTICE.txt  sbin

hduser@ubuntu:/usr/local/hadoop$ cd lib

hduser@ubuntu:/usr/local/hadoop/lib$ ls
native

hduser@ubuntu:/usr/local/hadoop/lib$ cd native/

hduser@ubuntu:/usr/local/hadoop/lib/native$ ls

libhadoop.a       libhadoop.so        libhadooputils.a  libhdfs.so
libhadooppipes.a  libhadoop.so.1.0.0  libhdfs.a         libhdfs.so.0.0.0

hduser@ubuntu:/usr/local/hadoop/lib/native$ sudo mv * ../

Ура


Это также будет работать:

export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native

для тех, кто на OSX с Hadoop установлен через Homebrew, выполните следующие действия, заменив путь и версию Hadoop, где это необходимо

wget http://www.eu.apache.org/dist/hadoop/common/hadoop-2.7.1/hadoop-2.7.1-src.tar.gz
tar xvf hadoop-2.7.1-src.tar.gz
cd hadoop-2.7.1-src
mvn package -Pdist,native -DskipTests -Dtar
mv lib /usr/local/Cellar/hadoop/2.7.1/

затем обновить hadoop-env.sh с

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc= -Djava.library.path=/usr/local/Cellar/hadoop/2.7.1/lib/native"

@zhutoulala -- FWIW ваши ссылки работали для меня с Hadoop 2.4.0 с одним исключением, я должен был сказать maven не строить javadocs. Я также использовал патч в первой ссылке для 2.4.0, и он работал нормально. Вот команда maven, которую я должен был выдать

mvn package -Dmaven.javadoc.skip=true -Pdist,native -DskipTests -Dtar

после создания этого и перемещения библиотек не забудьте обновить hadoop-env.sh :)

думал, что это может помочь кому-то, кто столкнулся с такой же посты, как и я


export JAVA_HOME=/home/hadoop/software/java/jdk1.7.0_80
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_LIB_NATIVE_DIR"

переместите скомпилированные файлы собственной библиотеки в $HADOOP_HOME/lib папка.

затем установите переменные среды путем редактирования

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib  
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib"

убедитесь, что ваши скомпилированные собственные файлы библиотеки находятся в $HADOOP_HOME/lib папка.

он должен работать.


export HADOOP_HOME=/home/hadoop/hadoop-2.4.1  
export PATH=$HADOOP_HOME/bin:$PATH  
export HADOOP_PREFIX=$HADOOP_HOME  
export HADOOP_COMMON_HOME=$HADOOP_PREFIX  
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_PREFIX/lib/native  
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop  
export HADOOP_HDFS_HOME=$HADOOP_PREFIX  
export HADOOP_MAPRED_HOME=$HADOOP_PREFIX  
export HADOOP_YARN_HOME=$HADOOP_PREFIX  
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

эта строка прямо здесь:

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

из ответа Кунбеттера, где деньги


эта строка прямо здесь:

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

из ответа Кунбеттера, работал на меня. Просто добавьте его .файл bashrc и перезагрузить .bashrc следующее содержание

$ source ~/.bashrc

У меня была такая же проблема с JDK6,я изменил JDK на JDK8,проблема решена. Попробуйте использовать JDK8!!!


в дополнение к принятому ответу @zhutoulala, вот обновление, чтобы заставить его работать с последней стабильной версией на сегодняшний день (2.8) на платформах ARMHF (Raspberry Pi 3 model B). Сначала я могу подтвердить, что вы должны перекомпилировать собственные библиотеки в 64-битную ARM, другие ответы здесь, основанные на настройке некоторых переменных среды, не будут работать. Как указано в документации Hadoop, предварительно построенные собственные библиотеки имеют 32 бит.

шаги высокого уровня, приведенные в fist link (http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html) являются правильными. По этому url http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/ Вы получаете более подробную информацию о Raspberry Pi, но не для Hadoop версии 2.8.

вот мои показания залить Hadoop 2.8:

  • по-прежнему нет пакета protobuf на последнем Raspbian, поэтому вы должны скомпилировать его самостоятельно, а версия должна быть точно protobuf 2.5 (https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz)
  • метод исправления файла CMake должен быть изменен. Moreovere, файлы для исправления не то же самое. К сожалению, нет принятого патча на JIRA, специфичного для 2.8. По этому URL (https://issues.apache.org/jira/browse/HADOOP-9320) Вы должны скопировать и вставить Andreas Muttscheller предложил патч на вашем namenode:

    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ touch HADOOP-9320-v2.8.patch
    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ vim HADOOP-9320-v2.8.patch
    #copy and paste proposed patch given here : https://issues.apache.org/jira/browse/HADOOP-9320?focusedCommentId=16018862&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-16018862
    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ patch < HADOOP-9320-v2.8.patch
    patching file HadoopCommon.cmake
    patching file HadoopJNI.cmake
    :hadoop-2.8.0-src/hadoop-common-project/hadoop-common $ cd ../..
    :hadoop-2.8.0-src $ sudo mvn package -Pdist,native -DskipTests -Dtar
    

после успешного построения :

    :hadoop-2.8.0-src/hadoop-dist/target/hadoop-2.8.0/lib/native $ tar -cvf nativelibs.tar *

и замените содержимое каталога lib / native вашей установки Hadoop содержимым этого архива. Предупреждающее сообщение при запуске Hadoop должно исчезнуть.


для установки Hadoop это soooooo гораздо проще установить бесплатную версию от Cloudera. Он поставляется с хорошим графическим интерфейсом, который упрощает добавление узлов, нет компиляции или наполнения зависимостями, он поставляется с такими вещами, как улей, свинья и т. д.

http://www.cloudera.com/content/support/en/downloads.html

шаги: 1) Скачать 2) запустить его 3) Перейти к веб-GUI (1.2.3.4:7180) 4) Добавьте дополнительные узлы в веб-gui (не устанавливайте cloudera программное обеспечение на других узлах, оно делает все это за вас) 5)в веб-GUI перейдите домой, нажмите Hue и Hue Web UI. Это дает вам доступ к улью, свинья, Sqoop и т. д.


проверенное средство от более ранних сообщений:

1) проверил, что libhadoop.so.1.0.0 поставляется с дистрибутивом Hadoop был скомпилирован для архитектуры моей машины, которая является x86_64:

[nova]:file /opt/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0
/opt/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3a80422c78d708c9a1666c1a8edd23676ed77dbb, not stripped

2) добавил -Djava.library.path=<path> to HADOOP_OPT на hadoop-env.sh:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=/opt/hadoop-2.6.0/lib/native"

это действительно раздражает предупреждение исчезнет.


во-первых: вы можете изменить версию glibc.CentOS предоставляет безопасное программное обеспечение tranditionally, это также означает, что версия старая, такая как glibc,protobuf ...

ldd --version
ldd /opt/hadoop/lib/native/libhadoop.so.1.0.0

вы можете сравнить версию текущего glibc с необходимым glibc.

Secondly: если версия текущего glibc старая,вы можете обновить glibc. Скачать Glibc

Если версия текущего идентификатора glibc права,вы можете добавить слово native к HADOOP_OPTS

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

Я не использую CentOS. Вот что у меня есть в Ubuntu 16.04.2, hadoop-2.7.3, jdk1.8.0_121. Беги! start-dfs.sh или stop-dfs.sh успешно без ошибки:

# JAVA env
#
export JAVA_HOME=/j01/sys/jdk
export JRE_HOME=/j01/sys/jdk/jre

export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${PATH}:.

# HADOOP env
#
export HADOOP_HOME=/j01/srv/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

замените /j01/sys /jdk,/j01/srv / hadoop путем установки

Я также сделал следующее в течение одного времени установки на Ubuntu, что устраняет необходимость вводить пароли для нескольких раз при запуске start-dfs.sh:

sudo apt install openssh-server openssh-client
ssh-keygen -t rsa
ssh-copy-id user@localhost

замените пользователя своим именем пользователя