La réponse dépend ... Je viens d'installer Hadoop 2.6 depuis tarball sur CentOS 6.6 64 bits. L'installation Hadoop était en effet livrée avec une bibliothèque native 64 bits précompilée. Pour mon installation, c'est ici:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
Et je sais que c'est 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)
Malheureusement, j'ai stupidement ignoré la réponse juste là, me regardant en face alors que je me concentrais sur "Est-ce que cette bibliothèque 32 pr 64 bits?":
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
Alors, 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'astuce ( 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, 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 - Allumons cela pour voir si nous obtenons une aide supplémentaire. Pour ce faire, ajoutez 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 précédente commande ldd '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 à découvrir:
[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12
Donc, je ne peux pas mettre à jour mon OS 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 l'instant. J'ai choisi de supprimer l'avertissement ennuyeux pour l'instant (mais je prévois de construire à partir de sources à l'avenir) acheter en utilisant les mêmes options de journalisation que nous avons utilisées pour obtenir le message de débogage, sauf maintenant, faites-le simplement au niveau ERREUR.
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
J'espère que cela aide les autres à voir qu'un grand avantage des logiciels open source est que vous pouvez comprendre ces choses si vous prenez quelques étapes logiques simples.