Actualmente estoy configurando hadoop en un servidor que ejecuta CentOs . Cuando ejecuto start-dfs.sh
o stop-dfs.sh
, aparece el siguiente error:
WARN util.NativeCodeLoader: no se puede cargar la biblioteca nativa-hadoop para su plataforma ... usando clases incorporadas-java donde corresponda
Estoy ejecutando Hadoop 2.2.0.
Al hacer una búsqueda en línea, apareció este enlace: http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html
Sin embargo, el contenido del /native/
directorio en hadoop 2.x parece ser diferente, por lo que no estoy seguro de qué hacer.
También he agregado estas dos variables de entorno en hadoop-env.sh
:
export HADOOP_OPTS = "$ HADOOP_OPTS -Djava.library.path = / usr / local / hadoop / lib /"
export HADOOP_COMMON_LIB_NATIVE_DIR = "/ usr / local / hadoop / lib / native /"
¿Algunas ideas?
Respuestas:
Supongo que está ejecutando Hadoop en CentOS de 64 bits. La razón por la que vio esa advertencia es que la biblioteca nativa de Hadoop en
$HADOOP_HOME/lib/native/libhadoop.so.1.0.0
realidad se compiló en 32 bits.De todos modos, es solo una advertencia y no afectará las funcionalidades de Hadoop.
Este es el camino si desea eliminar esta advertencia, descargue el código fuente de Hadoop y vuelva
libhadoop.so.1.0.0
a compilar en el sistema de 64 bits, luego reemplace el de 32 bits.Aquí se incluyen pasos sobre cómo recompilar el código fuente para Ubuntu:
Buena suerte.
fuente
hadoop-common-project/hadoop-common
yhadoop-hdfs-project/hadoop-hdfs
es suficiente.Solo agrega una palabra nativa a tu
HADOOP_OPTS
como esta:PD: gracias Searene
fuente
La respuesta depende ... Acabo de instalar Hadoop 2.6 de tarball en CentOS 6.6 de 64 bits. La instalación de Hadoop realmente vino con una biblioteca nativa precompilada de 64 bits. Para mi instalación, está aquí:
Y sé que es de 64 bits:
Desafortunadamente, estúpidamente pasé por alto la respuesta allí mismo mirándome a la cara mientras me enfocaba en "¿Es esta biblioteca 32 pr 64 bit?":
Entonces, la 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 en vano. Así que miré el código fuente. El módulo que genera el error le dice la pista ( util.NativeCodeLoader ):
Entonces, fuera de 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 algunos registros de nivel de depuración. Vamos a ver si obtenemos ayuda adicional. Esto se hace agregando la siguiente línea al archivo $ HADOOP_CONF_DIR / log4j.properties:
Luego ejecuté un comando que genera la advertencia original, como stop-dfs.sh, y obtuve este regalo:
Y la respuesta se revela en este fragmento del mensaje de depuración (lo mismo que el comando ldd anterior 'intentó' decirme:
¿Qué versión de GLIBC tengo? Aquí hay un truco simple para descubrir:
Por lo tanto, no puedo actualizar mi sistema operativo a 2.14. La única solución es construir las bibliotecas nativas a partir de las fuentes en mi sistema operativo o suprimir la advertencia e ignorarla por ahora. Opté por suprimir la advertencia molesta por ahora (pero planeo construir desde fuentes en el futuro) comprar usando las mismas opciones de registro que usamos para obtener el mensaje de depuración, excepto ahora, solo haga que sea ERROR.
Espero que esto ayude a otros a ver que un gran beneficio del software de código abierto es que puedes resolver esto si sigues algunos pasos lógicos simples.
fuente
Tuve el mismo problema. Se resuelve agregando las siguientes líneas en
.bashrc
:fuente
En mi caso, después de construir hadoop en mi SO Linux mint de 64 bits, reemplacé la biblioteca nativa en
hadoop/lib
. Aún persiste el problema. Entonces me di cuenta de la que apunta a hadoophadoop/lib
no alhadoop/lib/native
. Así que simplemente moví todo el contenido de la biblioteca nativa a su padre. Y la advertencia acaba de desaparecer.fuente
Esto también funcionaría:
fuente
Después de una investigación continua como lo sugirió Koti, resolví el problema.
Salud
fuente
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
luego actualice hadoop-env.sh con
fuente
fuente
@zhutoulala - 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 utilicé el parche en el primer enlace para 2.4.0 y funcionó bien. Aquí está el comando Maven que tuve que emitir
Después de construir esto y mover las bibliotecas, no olvide actualizar hadoop-env.sh :)
Pensé que esto podría ayudar a alguien que se encontró con los mismos obstáculos que yo
fuente
Mueva sus archivos de biblioteca nativa compilados a la
$HADOOP_HOME/lib
carpeta.Luego configure sus variables de entorno editando el
.bashrc
archivoAsegúrese de que sus archivos de biblioteca nativa compilados estén en la
$HADOOP_HOME/lib
carpeta.deberia de funcionar.
fuente
fuente
Esta línea aquí:
Por la respuesta de KunBetter, funcionó para mí. Simplemente agréguelo al archivo .bashrc y vuelva a cargar el contenido .bashrc
fuente
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
y funcionó para mí.Esta línea aquí:
De la respuesta de KunBetter es dónde está el dinero
fuente
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
yexport LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
Tuve el mismo problema con JDK6, cambié el JDK a JDK8, el problema se resolvió. Intenta usar JDK8 !!!
fuente
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 volver a compilar bibliotecas nativas para ARM de 64 bits, otras respuestas aquí basadas en la configuración de algunas variables de entorno no funcionarán. Como se indica en la documentación de Hadoop, las bibliotecas nativas preconstruidas son de 32 bits.
Los pasos de alto nivel dados en el enlace de puño ( http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html ) son correctos. En esta url http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/ obtendrá más detalles específicos de Raspberry Pi, pero no de Hadoop versión 2.8.
Aquí están mis indicaciones para Hadoop 2.8:
Se debe cambiar el método de parcheo del archivo CMake. Más aún, los archivos para parchar no son lo mismo. Desafortunadamente, no hay un parche aceptado en JIRA específico para 2.8. En esta URL ( https://issues.apache.org/jira/browse/HADOOP-9320 ) debe copiar y pegar el parche propuesto por Andreas Muttscheller en su namenode:
Una vez que la construcción es exitosa:
Y reemplace 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 debería desaparecer.
fuente
Para instalar Hadoop es muchísimo más fácil instalar la versión gratuita de Cloudera. Viene con una buena interfaz gráfica de usuario que hace que sea sencillo agregar nodos, no hay compilación o relleno con dependencias, viene con cosas como colmena, cerdo, etc.
http://www.cloudera.com/content/support/en/downloads.html
Los pasos son: 1) Descargar 2) Ejecutarlo 3) Ir a la GUI web (1.2.3.4:7180) 4) Agregar nodos adicionales en la interfaz gráfica de usuario web (NO instale el software cloudera en otros nodos, lo hace todo por usted) 5) Dentro de la GUI web, vaya a Inicio, haga clic en Hue y UI web Hue. Esto le da acceso a Hive, Pig, Sqoop, etc.
fuente
Remedio verificado de publicaciones anteriores:
1) Verifiqué que el
libhadoop.so.1.0.0
envío con la distribución de Hadoop se compiló para la arquitectura de mi máquina, que es x86_64:2) Agregado
-Djava.library.path=<path>
aHADOOP_OPT
enhadoop-env.sh
:De hecho, esto hizo desaparecer la molesta advertencia.
fuente
En primer lugar: puede modificar la versión de glibc. CentOS proporciona software seguro tradicionalmente, también significa que la versión es antigua, como glibc, protobuf ...
Puede comparar la versión de glibc actual con la glibc necesaria.
En segundo lugar: si la versión del glibc actual es antigua, puede actualizar el glibc. DownLoad Glibc
Si la versión de la identificación actual de glibc es correcta, puede agregar una palabra nativa a su HADOOP_OPTS
fuente
No estoy usando CentOS. Esto es lo que tengo en Ubuntu 16.04.2, hadoop-2.7.3, jdk1.8.0_121. Ejecute start-dfs.sh o stop-dfs.sh correctamente sin error:
Reemplace / j01 / sys / jdk, / j01 / srv / hadoop con su ruta de instalación
También hice lo siguiente para una configuración única en Ubuntu, lo que elimina la necesidad de ingresar contraseñas varias veces al ejecutar start-dfs.sh:
Reemplazar usuario con su nombre de usuario
fuente
Básicamente, no es un error, es una advertencia en el clúster de Hadoop. Aquí solo actualizamos las variables de entorno.
fuente