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?

225
demandé sur Greg Dubicki 2013-11-13 05:53:24

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.

196
répondu zhutoulala 2018-04-16 12:09:55

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

118
répondu Hoai-Thu Vuong 2018-03-22 02:45:32

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:

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 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.

44
répondu chromeeagle 2015-06-18 23:45:27

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"
20
répondu Neeraj 2014-07-20 20:15:32

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.

20
répondu koti 2016-08-22 11:05:26

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

13
répondu Nagarjuna D N 2016-08-31 04:17:50

Cette mesure permettrait également d'oeuvre:

export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native
10
répondu Kalyan Ghosh 2015-10-03 05:16:39

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"
10
répondu Philip O'Brien 2015-12-09 11:54:20

@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

8
répondu user2229544 2014-04-26 05:47:22
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"
7
répondu li li 2018-03-22 02:46:47

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.

5
répondu Vijayakumar 2015-10-03 05:16:25
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
1
répondu KunBetter 2014-08-15 01:10:39

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

1
répondu Tom Kelly 2015-04-08 00:12:17

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
1
répondu BeingSachin 2015-09-27 13:21:39

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!!!

1
répondu MangoJo 2016-06-17 03:18:16

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.

1
répondu mattt 2017-07-10 09:18:48

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.

0
répondu MikeKulls 2014-03-20 23:46:49

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.

0
répondu piiteraq 2015-07-24 16:26:03

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"
0
répondu Qidong Wang 2015-12-27 04:36:45

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

0
répondu Jonathan L 2017-03-24 19:33:29