Supongo que está ejecutando Hadoop en CentOS de 64 bits. La razón por la que vio esa advertencia es la biblioteca nativa de Hadoop $HADOOP_HOME/lib/native/libhadoop.so.1.0.0
en realidad fue compilado en 32 bits.
De todos modos, es solo una advertencia y no afectará las funcionalidades de Hadoop.
Esta es la forma si desea eliminar esta advertencia, descargue el código fuente de Hadoop y vuelva a compilar 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:
- http://www.ercoppa.org/Linux-Compile-Hadoop-220-fix-Unable-to-load-native-hadoop-library.htm
Buena suerte.
Tuve el mismo problema. Se resuelve agregando 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"
La respuesta depende... Acabo de instalar Hadoop 2.6 desde tarball en CentOS 6.6 de 64 bits. De hecho, la instalación de Hadoop vino con una biblioteca nativa de 64 bits preconstruida. Para mi instalación, está aquí:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
Y sé que es de 64 bits:
[[email protected] 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, pasé por alto estúpidamente la respuesta justo ahí, mirándome a la cara mientras me concentraba en "¿Esta biblioteca es de 32 bits de 64 bits?":
`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 poder 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 sin éxito. Así que miré el código fuente. El módulo que genera el error te 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
Entonces, vamos aquí para ver qué hace:
http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/
Ah, hay un registro de nivel de depuración:activemos eso y veamos si obtenemos ayuda adicional. Esto se hace agregando la siguiente línea al archivo $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 obtuve este regalo:
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:
[[email protected] hadoop]$ ldd --version
ldd (GNU libc) 2.12
Entonces, 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 e ignorarla por ahora. Opté por suprimir la molesta advertencia por ahora (pero planeo compilar a partir de las fuentes en el futuro) comprar usando las mismas opciones de registro que usamos para obtener el mensaje de depuración, excepto que ahora, simplemente haga que sea de nivel 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 puedes resolver estas cosas si sigues algunos pasos lógicos simples.
Simplemente agregue la palabra nativo a tu HADOOP_OPTS
así:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
PD:Gracias Searene