Hadoop" impossible de charger la bibliothèque native-hadoop pour votre plate-forme " avertissement
je suis en train de configurer hadoop sur un serveur tournant CentOs . Quand j'exécute start-dfs.sh
ou stop-dfs.sh
, j'obtiens l'erreur suivante:
avertir util.NativeCodeLoader: impossible de charger la bibliothèque native-hadoop pour votre plate-forme... utilisation des classes builtin-java le cas échéant
Je cours Hadoop 2.2.0.
faire une recherche en ligne apporté en haut de ce lien: http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html
Toutefois, le contenu de /native/
annuaire sur hadoop 2.x semble être différent donc je ne suis pas sûr de quoi faire.
j'ai aussi ajouté ces deux variables d'environnement dans hadoop-env.sh
:
export HADOOP_OPTS= " $HADOOP_OPTS - Djava.bibliothèque.path= / usr / local/hadoop/ lib / "
export HADOOP_COMMON_LIB_NATIVE_DIR= "/ usr/local/hadoop/lib / native/ "
des idées?
20 réponses
je suppose que vous dirigez Hadoop sur 64bit CentOS. La raison pour laquelle vous avez vu cet avertissement est que la bibliothèque native Hadoop $HADOOP_HOME/lib/native/libhadoop.so.1.0.0
a été compilée sur 32 bits.
de toute façon, c'est juste un avertissement, et n'aura pas d'impact sur les fonctionnalités de Hadoop.
voici le moyen si vous voulez éliminer cet avertissement, téléchargez le code source de Hadoop et recompilez libhadoop.so.1.0.0
sur le système 64bit, puis remplacez le 32bit.
Steps sur la façon de recompiler le code source sont inclus ici pour Ubuntu:
bonne chance.
ajoutez juste le mot native à votre HADOOP_OPTS
comme ceci:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
PS: Thank Searene
la réponse dépend... Je viens d'installer Hadoop 2.6 de tarball sur 64 bits CentOS 6.6. L'installation de Hadoop était en effet livrée avec une bibliothèque native de 64 bits. Pour mon installation, il est ici:
/opt/hadoop/lib/native/libhadoop.so.1.0.0
Et je sais que c'est 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)
malheureusement, j'ai bêtement négligé la réponse juste là me regardant dans les yeux alors que je me concentrais sur, " Est-ce que cette bibliothèque 32 pr 64 bit?":
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
So, leçon apprise. Quoi qu'il en soit, le reste au moins m'a permis de supprimer l'avertissement. J'ai donc continué et j'ai 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
donc, ici pour voir ce qu'il fait:
Ah, il y a quelques déboguages de niveau de débogage - allumons cela pour voir si nous obtenons de l'aide supplémentaire. Ceci est fait en ajoutant la ligne suivante à $HADOOP_CONF_DIR/log4j.fichier de propriétés:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
puis j'ai lancé une commande qui génère l'avertissement original, comme stop-dfs.sh, and got this goodie:
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 un truc simple pour le savoir:
[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12
donc, je ne peux pas mettre à jour mon OS à 2.14. Seule solution est de construire les bibliothèques natives à partir de sources sur mon OS ou supprimer l'avertissement et l'Ignorer pour le moment. J'ai opté pour il suffit de supprimer l'avertissement gênant pour le moment (mais prévoyez de construire à partir de sources dans le futur) acheter en utilisant les mêmes options de journalisation que nous avons utilisées pour obtenir le message de débogage, sauf que maintenant, il suffit de le faire niveau D'erreur.
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
j'espère que cela aide d'autres voient que l'un des grands avantages du logiciel libre est que vous pouvez comprendre ce genre de choses si vous prenez quelques étapes logiques simples.
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"
dans mon cas , après avoir construit hadoop sur mon Linux mint OS 64 bits, j'ai remplacé la bibliothèque native dans hadoop/lib
. Toujours le problème persiste. Puis j'ai compris le hadoop pointant vers hadoop/lib
et non vers hadoop/lib/native
. Donc je viens de déplacer tout le contenu de la bibliothèque natif vers son parent. Et l'avertissement juste disparu.
après une recherche continue comme suggéré par KotiI obtenu résolu la question.
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 * ../
Cheers
Cette mesure permettrait également d'oeuvre:
export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native
pour ceux sur OSX avec Hadoop installé via Homebrew, suivre ces étapes en remplacement de la version path et Hadoop le cas échéant
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/
puis mettre à jour hadoop-env.sh avec
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"
@zhutoulala -- FWIW vos liens ont fonctionné pour moi avec Hadoop 2.4.0 à une exception près, j'ai dû dire à maven de ne pas construire les javadocs. J'ai aussi utilisé le patch dans le premier lien pour 2.4.0 et il a bien fonctionné. Voici la commande maven que j'ai dû donner.
mvn package -Dmaven.javadoc.skip=true -Pdist,native -DskipTests -Dtar
après avoir construit ceci et déplacé les bibliothèques, n'oubliez pas de mettre à jour hadoop-env.sh :)
pensait que cela pourrait aider quelqu'un qui a rencontré les mêmes obstacles que moi
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"
déplacez vos fichiers de bibliothèque natifs compilés dans le dossier $HADOOP_HOME/lib
.
définissez ensuite vos variables d'environnement en éditant .bashrc
fichier
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib"
assurez-vous que vos fichiers de bibliothèque natifs compilés sont dans le dossier $HADOOP_HOME/lib
.
ça devrait marcher.
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
Cette ligne, ici:
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
de la réponse de KunBetter est où l'argent est
Cette ligne, ici:
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
de la réponse de KunBetter, ça a marché pour moi. Ajoutez simplement .bashrc fichier et de le recharger .bashrc contents
$ source ~/.bashrc
j'ai eu le même problème avec JDK6,j'ai changé le JDK en JDK8,le problème résolu. Essayez D'utiliser JDK8!!!
en plus de @zhutoulala réponse acceptée, voici une mise à jour pour le faire fonctionner avec la dernière version stable à ce jour (2.8) sur les plateformes ARMHF (Raspberry Pi 3 model B). Tout d'abord, je peux confirmer que vous devez recompiler les bibliothèques natives à 64 bits ARM, d'autres réponses basées sur la configuration de certaines variables d'environnement ne fonctionneront pas. Comme indiqué dans la documentation Hadoop, les bibliothèques natives préfabriquées sont de 32 bits.
"151920920 de Haut niveau, les étapes indiquées dans le premier lien ( http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html ) sont corrects. À cette url http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/ vous obtenez plus de détails spécifiques à Raspberry Pi, mais pas pour Hadoop version 2.8.Voici mes indications verser Hadoop 2.8 :
- il n'y a toujours pas de paquet protobuf sur la dernière version de Raspbian donc vous devez le compiler vous-même et la version doit être exactement protobuf 2.5 ( https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz )
-
CMake fichier patcher méthode doit être changé. De plus, les fichiers à patcher ne sont pas les mêmes. Malheureusement, il n'y a pas de patch accepté sur JIRA spécifique à 2.8. Sur cette URL ( https://issues.apache.org/jira/browse/HADOOP-9320 ) vous devez copier-coller le correctif proposé par Andreas Muttscheller sur votre 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
une fois que la construction est réussie:
:hadoop-2.8.0-src/hadoop-dist/target/hadoop-2.8.0/lib/native $ tar -cvf nativelibs.tar *
et remplacer le contenu du répertoire lib/native de votre installation Hadoop par le contenu de cette archive. Message d'avertissement lors de l'exécution Hadoop devrait disparaître.
pour installer Hadoop il est sooooooo beaucoup plus facile d'installer la version gratuite de Cloudera. Il est livré avec une interface graphique agréable qui le rend simple à ajouter des noeuds, il n'y a pas de compilation ou de farce avec des dépendances, il est livré avec des choses comme la ruche, cochon, etc.
http://www.cloudera.com/content/support/en/downloads.html
sont: 1) Télécharger 2) Exécuter 3) Aller à Web GUI (1.2.3.4: 7180) 4) Ajouter des noeuds supplémentaires dans le web gui (ne pas installer le logiciel cloudera sur d'autres noeuds, il fait tout pour vous) 5) dans l'interface graphique Web, allez à la maison, cliquez sur Hue et Hue Web UI. Cela vous donne accès à la ruche,Cochon, Sqoop etc.
Vérifié remède à partir d'anciennes écritures:
1) vérifié que le libhadoop.so.1.0.0
livré avec la distribution Hadoop a été compilé pour mon architecture machine, qui est 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 ajouté -Djava.library.path=<path>
à HADOOP_OPT
dans hadoop-env.sh
:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=/opt/hadoop-2.6.0/lib/native"
cela a effectivement fait disparaître l'avertissement gênant.
tout d'abord: vous pouvez modifier la version glibc.CentOS fournit des logiciels sûrs de manière tranditionnelle,cela signifie également que la version est ancienne comme glibc, protobuf ...
ldd --version
ldd /opt/hadoop/lib/native/libhadoop.so.1.0.0
vous pouvez comparer la version actuelle de glibc avec glibc nécessaire.
deuxièmement: si la version actuelle de glibc est ancienne,vous pouvez mettre à jour la glibc. Télécharger Glibc
si la version actuelle de glibc id à droite,vous pouvez ajouter natif de votre HADOOP_OPTS
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
Je n'utilise pas CentOS. Voici ce que j'ai dans Ubuntu 16.04.2, hadoop-2.7.3, jdk1.8.0_121. Cours! start-dfs.sh ou stop-dfs.sh avec succès sans erreur:
# 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
remplacer / j01 / sys / jdk, / j01 / srv/hadoop avec votre chemin d'installation
j'ai également fait ce qui suit pour une fois setup sur Ubuntu, ce qui élimine la nécessité d'entrer des mots de passe pour plusieurs fois lors de l'exécution start-dfs.sh:
sudo apt install openssh-server openssh-client
ssh-keygen -t rsa
ssh-copy-id user@localhost
remplacer user avec votre nom d'utilisateur