GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Hadoop Die native Hadoop-Bibliothek für Ihre Plattformwarnung kann nicht geladen werden

Ich nehme an, Sie führen Hadoop auf 64-Bit-CentOS aus. Der Grund, warum Sie diese Warnung gesehen haben, ist die native Hadoop-Bibliothek $HADOOP_HOME/lib/native/libhadoop.so.1.0.0 wurde tatsächlich auf 32 Bit kompiliert.

Wie auch immer, es ist nur eine Warnung und hat keinen Einfluss auf die Funktionen von Hadoop.

So können Sie diese Warnung beseitigen, indem Sie den Quellcode von Hadoop herunterladen und libhadoop.so.1.0.0 neu kompilieren auf einem 64-Bit-System, dann ersetzen Sie das 32-Bit-System.

Schritte zum Neukompilieren des Quellcodes sind hier für Ubuntu enthalten:

  • http://www.ercoppa.org/Linux-Compile-Hadoop-220-fix-Unable-to-load-native-hadoop-library.htm

Viel Glück.


Ich hatte das gleiche Problem. Es wird durch Hinzufügen der folgenden Zeilen in .bashrc gelöst :

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

Die Antwort hängt davon ab ... Ich habe gerade Hadoop 2.6 von Tarball auf 64-Bit CentOS 6.6 installiert. Die Hadoop-Installation wurde tatsächlich mit einer vorgefertigten nativen 64-Bit-Bibliothek geliefert. Für meine Installation ist es hier:

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

Und ich weiß, dass es 64-Bit ist:

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

Leider habe ich dummerweise die Antwort übersehen, die mir direkt ins Gesicht starrte, als ich mich auf „Ist diese Bibliothek 32 oder 64 Bit?“ konzentrierte:

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

Also, Lektion gelernt. Jedenfalls führte der Rest zumindest dazu, dass ich die Warnung unterdrücken konnte. Also fuhr ich fort und tat alles, was in den anderen Antworten empfohlen wurde, um den Bibliothekspfad mit der Umgebungsvariablen HADOOP_OPTS ohne Erfolg bereitzustellen. Also habe ich mir den Quellcode angeschaut. Das Modul, das den Fehler generiert, teilt Ihnen den Hinweis mit (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

Also, ab hier, um zu sehen, was es tut:

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

Ah, es gibt einige Debug-Level-Protokolle - schalten wir das ein, um zu sehen, ob wir zusätzliche Hilfe bekommen. Dies geschieht durch Hinzufügen der folgenden Zeile zur Datei $HADOOP_CONF_DIR/log4j.properties:

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

Dann habe ich einen Befehl ausgeführt, der die ursprüngliche Warnung generiert, z. B. stop-dfs.sh, und dieses Goodie erhalten:

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)

Und die Antwort wird in diesem Ausschnitt der Debug-Nachricht offenbart (dasselbe, was der vorherige ldd-Befehl 'versuchte', mir zu sagen:

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

Welche Version von GLIBC habe ich? Hier ist ein einfacher Trick, um das herauszufinden:

[[email protected] hadoop]$ ldd --version
ldd (GNU libc) 2.12

Ich kann mein Betriebssystem also nicht auf 2.14 aktualisieren. Die einzige Lösung besteht darin, die nativen Bibliotheken aus Quellen auf meinem Betriebssystem zu erstellen oder die Warnung zu unterdrücken und sie vorerst einfach zu ignorieren. Ich habe mich dafür entschieden, die lästige Warnung vorerst einfach zu unterdrücken (aber plane, in Zukunft aus Quellen zu bauen).

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

Ich hoffe, dies hilft anderen zu erkennen, dass ein großer Vorteil von Open-Source-Software darin besteht, dass Sie diese Dinge herausfinden können, wenn Sie einige einfache logische Schritte unternehmen.


Hängen Sie einfach das Wort nativ an zu Ihrem HADOOP_OPTS so:

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

PS:Danke Searene


Linux
  1. Schreiben! – Ablenkungsfreie Schreib-App für Ihre Produktivität

  2. So wählen Sie die beste Cloud-Hosting-Plattform für Ihre Analysesoftware aus

  3. So laden Sie das SELinux-Modul für Oracleasm

  4. Wozu dient die .la-Datei von libtool?

  5. Python-Bibliothek für das Linux-Prozessmanagement

So konfigurieren Sie Openbox für Ihren Linux-Desktop

12 Erweiterungen für Ihren GNOME-Desktop

20 Schritte, um Ihren PC für die Linux-Installation vorzubereiten

So überprüfen Sie Ihre Serverlast unter Linux

So überprüfen Sie Ihre Serverlast im Linux-System

Beste KDE-Linux-Distributionen für Ihren Desktop