Je suppose que vous utilisez Hadoop sur CentOS 64 bits. La raison pour laquelle vous avez vu cet avertissement est la bibliothèque Hadoop native $HADOOP_HOME/lib/native/libhadoop.so.1.0.0
a été en fait compilé sur 32 bits.
Quoi qu'il en soit, ce n'est qu'un avertissement et n'aura aucune incidence sur les fonctionnalités de Hadoop.
Voici la marche à suivre si vous souhaitez éliminer cet avertissement, téléchargez le code source de Hadoop et recompilez libhadoop.so.1.0.0
sur un système 64 bits, puis remplacez celui 32 bits.
Les étapes de recompilation du code source sont incluses ici pour Ubuntu :
- http://www.ercoppa.org/Linux-Compile-Hadoop-220-fix-Unable-to-load-native-hadoop-library.htm
Bonne chance.
J'ai eu le même problème. Il est résolu en ajoutant les lignes suivantes dans .bashrc
:
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
La réponse dépend... Je viens d'installer Hadoop 2.6 à partir de tarball sur CentOS 64 bits 6.6. L'installation d'Hadoop était en effet fournie avec une bibliothèque native 64 bits prédéfinie. Pour mon installation, c'est ici :
/opt/hadoop/lib/native/libhadoop.so.1.0.0
Et je sais que c'est 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)
Malheureusement, j'ai bêtement oublié la réponse en me fixant en face alors que je me concentrais sur "Cette bibliothèque est-elle 32 pr 64 bits ?" :
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
Donc, leçon apprise. Quoi qu'il en soit, le reste m'a au moins conduit à pouvoir supprimer l'avertissement. J'ai donc continué et fait tout ce qui était recommandé dans les autres réponses pour fournir le chemin de la bibliothèque en utilisant la variable d'environnement HADOOP_OPTS en vain. J'ai donc regardé le code source. Le module qui génère l'erreur vous indique l'indice (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
Alors, allez ici pour voir ce que ça fait :
http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/
Ah, il y a une journalisation au niveau du débogage - activons-la pour voir si nous obtenons une aide supplémentaire. Cela se fait en ajoutant la ligne suivante au fichier $HADOOP_CONF_DIR/log4j.properties :
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
Ensuite, j'ai exécuté une commande qui génère l'avertissement d'origine, comme stop-dfs.sh, et j'ai obtenu ce bonus :
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)
Et la réponse est révélée dans cet extrait du message de débogage (la même chose que la commande ldd précédente a "essayé" de me dire :
`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)
Quelle version de GLIBC ai-je ? Voici une astuce simple pour le savoir :
[[email protected] hadoop]$ ldd --version
ldd (GNU libc) 2.12
Donc, je ne peux pas mettre à jour mon système d'exploitation vers 2.14. La seule solution consiste à créer les bibliothèques natives à partir de sources sur mon système d'exploitation ou à supprimer l'avertissement et à l'ignorer pour le moment. J'ai choisi de simplement supprimer l'avertissement ennuyeux pour le moment (mais je prévois de construire à partir des sources à l'avenir) en utilisant les mêmes options de journalisation que nous avons utilisées pour obtenir le message de débogage, sauf que maintenant, mettez-le simplement au niveau ERREUR.
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
J'espère que cela aidera les autres à voir que l'un des grands avantages des logiciels open source est que vous pouvez comprendre ce genre de choses si vous suivez quelques étapes logiques simples.
Ajoutez simplement le mot natif à votre HADOOP_OPTS
comme ceci :
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
PS :Merci Searene