Advertencia de Hadoop "No se puede cargar la biblioteca nativa de hadoop para su plataforma"


Actualmente estoy configurando hadoop en un servidor que ejecuta CentOS. Cuando corro start-dfs.sh o stop-dfs.sh, obtengo el siguiente error:

ADVERTIR útil.NativeCodeLoader: No se puede cargar la biblioteca nativa-hadoop para tu plataforma... usando clases builtin-java cuando sea aplicable

Estoy ejecutando Hadoop 2.2.0.

Hacer una búsqueda en línea trajo este enlace: http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html

Sin embargo, el contenido del directorio /native/ en hadoop 2.x parecen ser diferentes, así que no estoy seguro de qué hacer.

También he agregado estas dos variables de entorno en hadoop-env.sh:

Export HADOOP_OPTS= " HAD HADOOP_OPTS - Djava.biblioteca.path= / usr / local / hadoop/lib / "

Export HADOOP_COMMON_LIB_NATIVE_DIR= "/ usr / local / hadoop / lib / native / "

Cualquiera ideas?

Author: Greg Dubicki, 2013-11-13

20 answers

Asumo que estás ejecutando Hadoop en CentOS de 64 bits. La razón por la que vio esa advertencia es que la biblioteca nativa de Hadoop $HADOOP_HOME/lib/native/libhadoop.so.1.0.0 fue compilada en 32 bits.

De todos modos, es solo una advertencia, y no afectará las funcionalidades de Hadoop.

Aquí está la forma si desea eliminar esta advertencia, descargue el código fuente de Hadoop y recompile libhadoop.so.1.0.0 en el sistema de 64 bits, luego reemplace el de 32 bits.

Los pasos sobre cómo recompilar el código fuente se incluyen aquí para Ubuntu:

Buena suerte.

 196
Author: zhutoulala,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-16 12:09:55

Simplemente añade word native a tu HADOOP_OPTS así:

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

PD: Gracias Searene

 118
Author: Hoai-Thu Vuong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-22 02:45:32

La respuesta depende... Acabo de instalar Hadoop 2.6 de tarball en 64-bit CentOS 6.6. La instalación de Hadoop de hecho viene con una biblioteca nativa pre-construida de 64 bits. Para mi instalación, está aquí:

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

Y sé que es de 64 bits:

[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)

Desafortunadamente, estúpidamente pasé por alto la respuesta justo ahí mirándome a la cara como yo estaba se centra en, " Es esta biblioteca 32 pr 64 bit?":

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

Entonces, lección aprendida. De todos modos, el resto al menos me llevó a ser capaz de suprimir la advertencia. Así que continué e hice todo lo recomendado en las otras respuestas para proporcionar la ruta de la biblioteca usando la variable de entorno HADOOP_OPTS en vano. Así que miré el código fuente. El módulo que genera el error le dice la pista ( 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

Por lo tanto, fuera de aquí para ver lo que does:

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

Ah, hay algunos registros de nivel de depuración - vamos a activar eso a ver si obtenemos alguna ayuda adicional. Esto se hace añadiendo la siguiente línea al archivo HAD HADOOP_CONF_DIR / log4j. properties:

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

Luego ejecuté un comando que genera la advertencia original, como stop-dfs.sh y tengo esta cosa:

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)

Y la respuesta se revela en este fragmento del mensaje de depuración (lo mismo que el comando ldd anterior 'intentó' decirme:

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

¿Qué versión de GLIBC tengo? Aquí hay un truco simple para averiguarlo:

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

Por lo tanto, no puedo actualizar mi sistema operativo a 2.14. La única solución es construir las bibliotecas nativas a partir de fuentes en mi sistema operativo o suprimir la advertencia y simplemente ignorarla por ahora. Opté por suprimir la molesta advertencia por ahora (pero planeo construir a partir de fuentes en el futuro) comprar usando el mismo las opciones de registro que utilizamos para obtener el mensaje de depuración, excepto ahora, simplemente lo convierten en un nivel de ERROR.

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

Espero que esto ayude a otros a ver que un gran beneficio del software de código abierto es que puede resolver esto si toma algunos pasos lógicos simples.

 44
Author: chromeeagle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-18 23:45:27

Tuve el mismo problema. Se resuelve añadiendo las siguientes líneas en .bashrc:

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
 20
Author: Neeraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-20 20:15:32

En mi caso , después de compilar hadoop en mi sistema operativo Linux mint de 64 bits, reemplazé la biblioteca nativa en hadoop/lib. Aún el problema persiste. Entonces descubrí que el hadoop apunta a hadoop/lib no a hadoop/lib/native. Así que simplemente moví todo el contenido de la biblioteca nativa a su padre. Y la advertencia acaba de desaparecer.

 20
Author: koti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-22 11:05:26

Después de una investigación continua como lo sugirió KotiI se resolvió el problema.

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 * ../

Salud

 13
Author: Nagarjuna D N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-31 04:17:50

Esto también funcionaría:

export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native
 10
Author: Kalyan Ghosh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-03 05:16:39

Para aquellos en OSX con Hadoop instalado a través de Homebrew, siga estos pasos reemplazando la ruta y la versión de Hadoop cuando corresponda

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/

Luego actualizar hadoop-env.sh con

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"
 10
Author: Philip O'Brien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-09 11:54:20

@zhutoulala F FWIW tus enlaces funcionaron para mí con Hadoop 2.4.0 con una excepción Tuve que decirle a maven que no construyera los javadocs. También usé el parche en el primer enlace para la versión 2.4.0 y funcionó bien. Aquí está el comando maven que tuve que emitir

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

Después de construir esto y mover las bibliotecas, no se olvide de actualizar hadoop-env.sh :)

Pensé que esto podría ayudar a alguien que se encontró con los mismos obstáculos que yo

 8
Author: user2229544,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-26 05:47:22
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"
 7
Author: li li,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-22 02:46:47

Mueva sus archivos compilados de la biblioteca nativa a la carpeta $HADOOP_HOME/lib.

Luego establezca las variables de entorno editando .bashrc file

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

Asegúrese de que los archivos compilados de la biblioteca nativa estén en la carpeta $HADOOP_HOME/lib.

Debería funcionar.

 5
Author: Vijayakumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-03 05:16:25
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
 1
Author: KunBetter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-15 01:10:39

Esta línea aquí:

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

De la respuesta de KunBetter es donde está el dinero

 1
Author: Tom Kelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-08 00:12:17

Esta línea aquí:

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

De la respuesta de KunBetter, funcionó para mí. Sólo añádelo a .archivo bashrc y recarga .contenido de bashrc

$ source ~/.bashrc
 1
Author: BeingSachin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-27 13:21:39

Tuve el mismo problema con JDK6,cambié el JDK a JDK8,el problema resuelto. Trate de usar JDK8!!!

 1
Author: MangoJo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-17 03:18:16

Además de la respuesta aceptada de @zhutoulala, aquí hay una actualización para que funcione con la última versión estable hasta la fecha (2.8) en plataformas ARMHF (Raspberry Pi 3 modelo B). Primero puedo confirmar que debe recompilar bibliotecas nativas a 64 bits ARM, otras respuestas aquí basadas en establecer algunas variables de entorno no funcionarán. Como se indica en la documentación de Hadoop, las bibliotecas nativas preconstruidas son de 32 bits.

Pasos de alto nivel dados en el primer enlace (http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html) son correctas. En esta url http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi / obtendrá más detalles específicos para Raspberry Pi, pero no para la versión 2.8 de Hadoop.

Aquí están mis indicaciones pour Hadoop 2.8:

  • todavía no hay ningún paquete protobuf en la última Raspbian, por lo que debe compilarlo usted mismo y la versión debe ser exactamente protobuf 2.5 ( https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz )
  • Se debe cambiar el método de parcheo del archivo CMake. Más aún, los archivos a patch no son lo mismo. Desafortunadamente, no hay ningún parche aceptado en JIRA específico para la versión 2.8. En esta URL ( https://issues.apache.org/jira/browse/HADOOP-9320 ) debes copiar y pegar el parche propuesto por Andreas Muttscheller en tu 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
    

Una vez que la compilación es exitosa:

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

Y sustitúyase el contenido del directorio lib/native de su instalación de Hadoop con el contenido de este archivo. El mensaje de advertencia al ejecutar Hadoop debe desaparecer.

 1
Author: mattt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-10 09:18:48

Para instalar Hadoop es soooooo mucho más fácil instalar la versión gratuita de Cloudera. Viene con una bonita interfaz gráfica de usuario que hace que sea fácil agregar nodos, no hay compilación o relleno con dependencias, viene con cosas como hive, pig, etc.

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

Los pasos son: 1) Descargar 2) Ejecutarlo 3) Ir a web GUI (1.2.3.4: 7180) 4) Agregue nodos adicionales en la gui web (no instale el software cloudera en otros nodos, lo hace todo por ti) 5) Dentro de la GUI web vaya a Inicio, haga clic en Hue y Hue Web UI. Esto le da acceso a Hive, Pig, Sqoop, etc.

 0
Author: MikeKulls,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-20 23:46:49

Remedio verificado de publicaciones anteriores:

1) Comprobé que el libhadoop.so.1.0.0 enviado con la distribución Hadoop fue compilado para la arquitectura de mi máquina, que es 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) Añadido -Djava.library.path=<path> a HADOOP_OPT en hadoop-env.sh:

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

Esto hizo desaparecer la molesta advertencia.

 0
Author: piiteraq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-24 16:26:03

En primer lugar: Puede modificar la versión de glibc.CentOS proporciona softwares seguros tranditionally, también significa que la versión es antigua como glibc, protobuf ...

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

Puede comparar la versión de glibc actual con la glibc necesaria.

Segundo: Si la versión del glibc actual es antigua,puede actualizar el glibc. Descargar Glibc

Si la versión actual de glibc id está a la derecha, puede agregar word nativo a su HADOOP_OPTS

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
 0
Author: Qidong Wang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-27 04:36:45

No estoy usando CentOS. Esto es lo que tengo en Ubuntu 16.04.2, hadoop-2.7.3, jdk1.8.0_121. Corre start-dfs.sh o stop-dfs.sh con éxito sin error:

# 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

Reemplace /j01 / sys /jdk,/j01/srv / hadoop con su ruta de instalación

También hice lo siguiente para la configuración de una sola vez en Ubuntu, lo que elimina la necesidad de ingresar contraseñas varias veces cuando se ejecuta start-dfs.sh:

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

Reemplazar usuario con su nombre de usuario

 0
Author: Jonathan L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-24 19:33:29