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:
[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)
Leider habe ich die Antwort genau dort dumm übersehen und mich ins Gesicht gestarrt, als ich mich darauf konzentrierte: "Ist diese Bibliothek 32 pr 64 Bit?":
`GLIBC_2.14' not found (required by ./libhadoop.so.1.0.0)
Also, Lektion gelernt. Wie auch immer, der Rest hat mich zumindest dazu gebracht, die Warnung unterdrücken zu können. Also fuhr ich fort und tat alles, was in den anderen Antworten empfohlen wurde, um den Bibliothekspfad unter Verwendung der Umgebungsvariablen HADOOP_OPTS ohne Erfolg bereitzustellen. Also habe ich mir den Quellcode angesehen. Das Modul, das den Fehler generiert, gibt Ihnen den Hinweis ( 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, auf nach 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 eine Protokollierung auf Debug-Ebene - lassen Sie uns diese aktivieren, um zu sehen, ob wir zusätzliche Hilfe erhalten. Dazu fügen Sie der Datei $ HADOOP_CONF_DIR / log4j.properties die folgende Zeile hinzu:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
Dann habe ich einen Befehl ausgeführt, der die ursprüngliche Warnung generiert, wie stop-dfs.sh, und diesen 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 enthüllt (dasselbe, was der vorherige ldd-Befehl 'versucht' hat, 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 dies herauszufinden:
[hadoop@VMWHADTEST01 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 nervige Warnung vorerst nur zu unterdrücken (aber ich plane, in Zukunft aus Quellen zu bauen). Ich kaufe mit denselben Protokollierungsoptionen, die wir zum Abrufen der Debug-Meldung verwendet haben, außer jetzt, mache sie einfach auf ERROR-Level.
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 dieses Zeug herausfinden können, wenn Sie einige einfache logische Schritte unternehmen.