Hadoop “Kan de Native-Hadoop-bibliotheek niet instellen voor uw platform” WAARSCHUWING

Ik configureer momenteel Hadoop op een server die Centos wordt uitgevoerd. Wanneer ik start-dfs.shof stop-dfs.shuitvoeren, krijg ik de volgende foutmelding:

WARNE UTIL.NATIVECODELOADER: Kon Native-Hadoop-bibliotheek niet laden voor
Uw platform … met behulp van ingebouwde Java-klassen waar van toepassing

Ik loop Hadoop 2.2.0.

Een zoekopdracht doen, bracht deze link opgevoed: http: //balanceDebreath.blogspot. ca / 2013/01 / utilnativecodeloader-kan-niet-load.html

De inhoud van /native/Directory op Hadoop 2.x lijkt anders te zijn, dus ik weet niet zeker wat ik moet doen.

Ik heb ook deze twee omgevingsvariabelen toegevoegd in hadoop-env.sh:

Exporteer Hadoop_opts = “$ Hadoop_opts
-Djava.Library.path = / usr / local / Hadoop / lib / “

Hadoop_common_lib_native_dir = “/ usr / local / Hadoop / lib / native /”

alle ideeën?


1, Autoriteit 100%

Ik neem aan dat je Hadoop op 64bit Cento’s loopt. De reden dat je zag dat waarschuwing de inheemse Hadoop-bibliotheek is $HADOOP_HOME/lib/native/libhadoop.so.1.0.0was eigenlijk samengesteld op 32 bit.

Hoe dan ook, het is gewoon een waarschuwing en zal de functionaliteiten van Hadoop niet beïnvloeden.

Hier is de manier waarop u deze waarschuwing wilt elimineren, de broncode van Hadoop downloaden en opnieuw compileren libhadoop.so.1.0.0op 64bit-systeem, vervang vervolgens de 32bit één.

Stappen voor het opnieuw compileren van broncode zijn hier opgenomen voor Ubuntu:

Veel succes.


Antwoord 2, autoriteit 67%

Voeg gewoon het woord nativetoe aan uw HADOOP_OPTSals volgt:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"

PS: bedankt Searene


Antwoord 3, autoriteit 23%

Het antwoord hangt ervan af… Ik heb zojuist Hadoop 2.6 geïnstalleerd vanuit tarball op 64-bits CentOS 6.6. De Hadoop-installatie kwam inderdaad met een vooraf gebouwde 64-bits native bibliotheek. Voor mijn installatie is het hier:

/opt/hadoop/lib/native/libhadoop.so.1.0.0

En ik weet dat het 64-bit is:

[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)

Helaas heb ik domweg het antwoord over het hoofd gezien terwijl ik me in het gezicht staarde terwijl ik me concentreerde op: “Is deze bibliotheek 32 pr 64 bit?”:

`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)

Dus, les geleerd. Hoe dan ook, de rest leidde er in ieder geval toe dat ik de waarschuwing kon onderdrukken. Dus ik ging door en deed alles wat in de andere antwoorden werd aanbevolen om het bibliotheekpad te bieden met behulp van de HADOOP_OPTS-omgevingsvariabele, maar het mocht niet baten. Dus ik keek naar de broncode. De module die de fout genereert, vertelt u de hint (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

Dus naar hier om te zien wat het doet:

http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.action/0.2.6/org/apache/hadoop/util/NativeCodeLoader.java/

Ah, er is wat logboekregistratie op het niveau van debuggen – laten we dat aanzetten om te kijken of we wat extra hulp krijgen. Dit wordt gedaan door de volgende regel toe te voegen aan het bestand $HADOOP_CONF_DIR/log4j.properties:

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG

Toen voerde ik een commando uit dat de originele waarschuwing genereert, zoals stop-dfs.sh, en kreeg deze 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)

En het antwoord wordt onthuld in dit fragment van het foutopsporingsbericht (hetzelfde dat het vorige ldd-commando ‘probeerde’ me te vertellen:

`GLIBC_2.14' not found (required by opt/hadoop/lib/native/libhadoop.so.1.0.0)

Welke versie van GLIBC heb ik? Hier is een simpele truc om erachter te komen:

[hadoop@VMWHADTEST01 hadoop]$ ldd --version
ldd (GNU libc) 2.12

Dus ik kan mijn besturingssysteem niet updaten naar 2.14. De enige oplossing is om de native bibliotheken van bronnen op mijn besturingssysteem te bouwen of de waarschuwing te onderdrukken en deze voorlopig te negeren. Ik heb ervoor gekozen om de vervelende waarschuwing voorlopig te onderdrukken (maar ben van plan om in de toekomst vanuit bronnen te bouwen) en koop met dezelfde logging-opties die we gebruikten om het foutopsporingsbericht te krijgen, behalve nu, maak het gewoon op ERROR-niveau.

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

Ik hoop dat dit anderen helpt in te zien dat een groot voordeel van open source software is dat je dit kunt uitzoeken als je een paar eenvoudige logische stappen neemt.


Antwoord 4, autoriteit 12%

Ik had hetzelfde probleem. Het is opgelost door de volgende regels toe te voegen in .bashrc:

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

Antwoord 5, autoriteit 10%

In mijn geval, nadat ik hadoop op mijn 64-bits Linux mint OS had gebouwd, heb ik de native bibliotheek vervangen in hadoop/lib. Toch blijft het probleem bestaan. Toen kwam ik erachter dat de hadoop naar hadoop/libwees en niet naar de hadoop/lib/native. Dus ik heb zojuist alle inhoud van de native bibliotheek naar de bovenliggende bibliotheek verplaatst. En de waarschuwing is gewoon weg.


Antwoord 6, autoriteit 7%

Dit zou ook werken:

export LD_LIBRARY_PATH=/usr/lib/hadoop/lib/native

7, Autoriteit 6%

Na een continu onderzoek zoals gesuggereerd door Kotii werd het probleem opgelost.

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


8, Autoriteit 6%

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"

9, Autoriteit 5%

Voor degenen op OSX met Hadoop die via Homebrew is geïnstalleerd, volgt u deze stappen die het pad en de Hadoop-versie worden vervangen in voorkomend geval

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/

Update Hadoop-ENV.SH met

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"

Antwoord 10, autoriteit 4%

@zhutoulala — FWIW je links werkten voor mij met Hadoop 2.4.0 met één uitzondering, ik moest Maven vertellen de javadocs niet te bouwen. Ik heb ook de patch in de eerste link voor 2.4.0 gebruikt en het werkte prima. Dit is het maven-commando dat ik moest geven

mvn package -Dmaven.javadoc.skip=true -Pdist,native -DskipTests -Dtar

Vergeet niet om hadoop-env.sh te updaten nadat je dit hebt gebouwd en de bibliotheken hebt verplaatst 🙂

Ik dacht dat dit iemand zou kunnen helpen die tegen dezelfde wegversperringen aanliep als ik


Antwoord 11, autoriteit 2%

Verplaats uw gecompileerde native bibliotheekbestanden naar de map $HADOOP_HOME/lib.

Stel vervolgens uw omgevingsvariabelen in door het .bashrc-bestand

. te bewerken

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib  
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib"

Zorg ervoor dat uw gecompileerde native bibliotheekbestanden zich in de map $HADOOP_HOME/libbevinden.

het zou moeten werken.


Antwoord 12

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

13

Deze regel hier:

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

van het antwoord van Kunbetter, werkte voor mij.
Voeg het gewoon toe aan .Bashrc-bestand en opnieuw laden .Bashrc-inhoud

$ source ~/.bashrc

14

Deze regel hier:

export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

Vanaf het antwoord van Kunbetter is waar het geld

is


15

Ik had hetzelfde probleem met JDK6, ik heb de JDK naar JDK8 veranderd, het probleem opgelost.
Probeer JDK8 te gebruiken !!!


16

Naast @zhuToulala geaccepteerd antwoord is hier een update om het te laten werken met de nieuwste stabiele versie tot nu toe (2.8) op Armhf-platforms (Raspberry PI 3 Model B).
Eerst kan ik bevestigen dat je inheemse bibliotheken moet hercompileren tot 64-bitsarm, andere antwoorden hier op basis van het instellen van enkele omgevingsvariabelen zullen niet werken. Zoals aangegeven in Hadoop-documentatie, zijn de voorgebouwde native-bibliotheken 32 bit.

Stappen op hoog niveau in de FIST-link (http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html ) zijn correct.
Op deze URL http://www.instructables.com/ ID / Native-Hadoop-260-build-on-PI / krijg je meer details specifiek voor Raspberry PI, maar niet voor Hadoop versie 2.8.

Hier zijn mijn indicaties voor Hadoop 2.8:

  • er is nog steeds geen protobuf-pakket op de nieuwste Raspbian, dus u moet het zelf compileren en de versie moet exact protobuf 2.5 zijn (https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz)
  • De methode voor het patchen van CMake-bestanden moet worden gewijzigd. Bovendien zijn de te patchen bestanden niet hetzelfde. Helaas is er geen geaccepteerde patch op JIRA die specifiek is voor 2.8. Op deze URL (https://issues.apache.org/jira/browse/HADOOP- 9320) je moet de door Andreas Muttscheller voorgestelde patch op je namenode kopiëren en plakken:

    :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
    

Zodra het bouwen is gelukt:

   :hadoop-2.8.0-src/hadoop-dist/target/hadoop-2.8.0/lib/native $ tar -cvf nativelibs.tar *

En vervang de inhoud van de lib/native directory van uw Hadoop-installatie door de inhoud van dit archief. Waarschuwingsbericht bij het uitvoeren van Hadoop zou moeten verdwijnen.


Antwoord 17

Ik gebruik CentOS niet. Dit is wat ik heb in Ubuntu 16.04.2, hadoop-2.7.3, jdk1.8.0_121. Voer start-dfs.sh of stop-dfs.sh succesvol uit zonder fout:

# 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

Vervang /j01/sys/jdk, /j01/srv/hadoop door uw installatiepad

Ik heb ook het volgende gedaan voor een eenmalige installatie op Ubuntu, waardoor het niet meer nodig is om meerdere keren wachtwoorden in te voeren bij het uitvoeren van start-dfs.sh:

sudo apt install openssh-server openssh-client
ssh-keygen -t rsa
ssh-copy-id user@localhost

Gebruiker vervangen door uw gebruikersnaam


Antwoord 18

Kortom, het is geen fout, het is een waarschuwing in het Hadoop-cluster.
Hier werken we alleen de omgevingsvariabelen bij.

export HADOOP_OPTS = "$HADOOP_OPTS"-Djava.library.path = /usr/local/hadoop/lib
export HADOOP_COMMON_LIB_NATIVE_DIR = "/usr/local/hadoop/lib/native"

Antwoord 19

Geverifieerde oplossing van eerdere berichten:

1) Gecontroleerd dat de libhadoop.so.1.0.0die bij de Hadoop-distributie is geleverd, is gecompileerd voor mijn machinearchitectuur, namelijk 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) -Djava.library.path=<path>toegevoegd aan HADOOP_OPTin hadoop-env.sh:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.library.path=/opt/hadoop-2.6.0/lib/native"

Hierdoor verdween de vervelende waarschuwing inderdaad.


Antwoord 20

Ten eerste: u kunt de glibc-versie wijzigen. CentOS biedt traditioneel veilige software, het betekent ook dat de versie oud is, zoals glibc,protobuf …

ldd --version
ldd /opt/hadoop/lib/native/libhadoop.so.1.0.0

Je kunt de versie van de huidige glibc vergelijken met de benodigde glibc.

Ten tweede: als de versie van de huidige glibc oud is, kunt u de glibc bijwerken.
Glibc downloaden

Als de versie van de huidige glibc-id juist is, kunt u een native woord toevoegen aan uw HADOOP_OPTS

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

Antwoord 21

De native hadoop-bibliotheek wordt alleen ondersteund op *nix-platforms. De bibliotheek werkt niet met Cygwin of het Mac OS X-platform.

Refs: https: // Hadoop .apache.org / documenten / stroom / Hadoop-project-dist / Hadoop-Common / NativeLibraries.html

Als u Windows of Mac OS X gebruikt, moet u uw platform wijzigen in * NIX.


22

Voor het installeren van Hadoop is het zoooooo veel gemakkelijker installeren van de gratis versie van Cloudera. Het komt met een mooie GUI die het eenvoudig maakt om knooppunten toe te voegen, er is geen compileren of vullen met afhankelijkheden, het komt met dingen zoals bijenkorf, varken, enz.

http://www.cloudera.com/content/support/en/ downloads.html

De stappen zijn:
1) Downloaden
2) Voer het uit
3) Ga naar web-GUI (1.2.3.4:7180)
4) Voeg extra nodes toe in de web-gui (installeer de cloudera-software NIET op andere nodes, het doet het allemaal voor je)
5) Ga in de web-GUI naar Home, klik op Hue en Hue Web UI. Dit geeft je toegang tot Hive, Pig, Sqoop etc.

Other episodes