Ich konfiguriere derzeit Hadoop auf einem Server, auf dem CentOs ausgeführt werden . Wenn ich start-dfs.sh
oder stop-dfs.sh
starte, wird folgende Fehlermeldung angezeigt:
WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek für Ihre Plattform kann nicht geladen werden. Verwenden Sie gegebenenfalls integrierte Java-Klassen
Ich verwende Hadoop 2.2.0.
Bei einer Online-Suche wurde der folgende Link aufgerufen : http://balanceandbreath.blogspot.ca/2013/01/utilnativecodeloader-unable-to-load.html
Der Inhalt des /native/
Verzeichnisses auf hadoop 2.x scheint jedoch unterschiedlich zu sein, sodass ich nicht sicher bin, was ich tun soll.
Ich habe auch diese beiden Umgebungsvariablen hinzugefügt in hadoop-env.sh
:
export HADOOP_OPTS = "$ HADOOP_OPTS -Djava.library.path = / usr / local / hadoop / lib /"
export HADOOP_COMMON_LIB_NATIVE_DIR = "/ usr / local / hadoop / lib / native /"
Irgendwelche Ideen?
Antworten:
Ich gehe davon aus, dass Sie Hadoop unter 64-Bit-CentOS ausführen. Der Grund, warum Sie diese Warnung gesehen haben, ist, dass die native Hadoop-Bibliothek
$HADOOP_HOME/lib/native/libhadoop.so.1.0.0
tatsächlich auf 32 Bit kompiliert wurde.Auf jeden Fall ist es nur eine Warnung und hat keinen Einfluss auf die Funktionen von Hadoop.
Wenn Sie diese Warnung entfernen möchten, laden Sie den Quellcode von Hadoop herunter, kompilieren Sie ihn
libhadoop.so.1.0.0
auf einem 64-Bit-System neu und ersetzen Sie den 32-Bit-System.Hier finden Sie Schritte zum Neukompilieren des Quellcodes für Ubuntu:
Viel Glück.
quelle
hadoop-common-project/hadoop-common
und dieshadoop-hdfs-project/hadoop-hdfs
reicht aus.Hängen Sie einfach Wort nativer zu Ihrem
HADOOP_OPTS
wie folgt aus :PS: Danke Searene
quelle
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:
Und ich weiß, dass es 64-Bit ist:
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?":
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 ):
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:
Dann habe ich einen Befehl ausgeführt, der die ursprüngliche Warnung generiert, wie stop-dfs.sh, und diesen Goodie erhalten:
Und die Antwort wird in diesem Ausschnitt der Debug-Nachricht enthüllt (dasselbe, was der vorherige ldd-Befehl 'versucht' hat, mir zu sagen:
Welche Version von GLIBC habe ich? Hier ist ein einfacher Trick, um dies herauszufinden:
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.
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.
quelle
Ich hatte das gleiche Problem. Es wird gelöst, indem folgende Zeilen hinzugefügt werden
.bashrc
:quelle
In meinem Fall habe ich nach dem Erstellen von hadoop auf meinem 64-Bit-Linux-Mint-Betriebssystem die native Bibliothek in ersetzt
hadoop/lib
. Trotzdem bleibt das Problem bestehen. Dann fand ich heraus, dass der Hadoophadoop/lib
nicht auf den zeigtehadoop/lib/native
. Also habe ich einfach den gesamten Inhalt von der nativen Bibliothek in die übergeordnete verschoben. Und die Warnung ist einfach weg.quelle
Das würde auch funktionieren:
quelle
Nach einer kontinuierlichen Recherche, wie von KotiI vorgeschlagen, wurde das Problem gelöst.
Prost
quelle
Befolgen Sie für Benutzer unter OSX, auf denen Hadoop über Homebrew installiert ist, die folgenden Schritte, indem Sie den Pfad und gegebenenfalls die Hadoop-Version ersetzen
dann aktualisiere hadoop-env.sh mit
quelle
quelle
@zhutoulala - FWIW Ihre Links funktionierten für mich mit Hadoop 2.4.0, mit einer Ausnahme musste ich maven sagen, dass er die Javadocs nicht bauen soll. Ich habe auch den Patch im ersten Link für 2.4.0 verwendet und es hat gut funktioniert. Hier ist der Maven-Befehl, den ich ausgeben musste
Vergessen Sie nach dem Erstellen und Verschieben der Bibliotheken nicht, hadoop-env.sh zu aktualisieren :)
Ich dachte, das könnte jemandem helfen, der auf die gleichen Straßensperren wie ich stößt
quelle
Verschieben Sie Ihre kompilierten nativen Bibliotheksdateien in einen
$HADOOP_HOME/lib
Ordner.Legen Sie dann Ihre Umgebungsvariablen fest, indem Sie die
.bashrc
Datei bearbeitenStellen Sie sicher, dass sich Ihre kompilierten nativen Bibliotheksdateien im
$HADOOP_HOME/lib
Ordner befinden.es sollte funktionieren.
quelle
quelle
Diese Zeile hier:
Nach KunBetters Antwort hat es für mich funktioniert. Hängen Sie es einfach an die .bashrc-Datei an und laden Sie den .bashrc-Inhalt neu
quelle
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
und es bei mir funktioniert.Diese Zeile hier:
Aus KunBetters Antwort geht hervor, wo das Geld ist
quelle
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
undexport LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
Ich hatte das gleiche Problem mit JDK6, ich habe das JDK in JDK8 geändert, das Problem wurde gelöst. Versuchen Sie, JDK8 zu verwenden !!!
quelle
Zusätzlich zu der von @zhutoulala akzeptierten Antwort gibt es hier ein Update, damit es mit der neuesten stabilen Version (2.8) auf ARMHF-Plattformen (Raspberry Pi 3 Modell B) funktioniert. Zuerst kann ich bestätigen, dass Sie native Bibliotheken auf 64-Bit-ARM neu kompilieren müssen. Andere Antworten, die hier auf dem Festlegen einiger Umgebungsvariablen basieren, funktionieren nicht. Wie in der Hadoop-Dokumentation angegeben, sind die vorgefertigten nativen Bibliotheken 32-Bit.
Die im ersten Link ( http://www.ercoppa.org/posts/how-to-compile-apache-hadoop-on-ubuntu-linux.html ) angegebenen Schritte auf hoher Ebene sind korrekt. Unter dieser URL http://www.instructables.com/id/Native-Hadoop-260-Build-on-Pi/ erhalten Sie weitere Details zu Raspberry Pi, jedoch nicht zu Hadoop Version 2.8.
Hier sind meine Hinweise für Hadoop 2.8:
Die Patch-Methode für CMake-Dateien muss geändert werden. Außerdem sind zu patchende Dateien nicht gleich. Leider gibt es auf JIRA keinen akzeptierten Patch für 2.8. Unter dieser URL ( https://issues.apache.org/jira/browse/HADOOP-9320 ) müssen Sie den von Andreas Muttscheller vorgeschlagenen Patch kopieren und in Ihren Namensknoten einfügen:
Sobald der Build erfolgreich ist:
Ersetzen Sie den Inhalt des Verzeichnisses lib / native Ihrer Hadoop-Installation durch den Inhalt dieses Archivs. Die Warnmeldung beim Ausführen von Hadoop sollte verschwinden.
quelle
Für die Installation von Hadoop ist es soooooo viel einfacher, die kostenlose Version von Cloudera zu installieren. Es kommt mit einer schönen GUI, die es einfach macht, Knoten hinzuzufügen, es gibt kein Kompilieren oder Stöbern mit Abhängigkeiten, es kommt mit Sachen wie Bienenstock, Schwein usw.
http://www.cloudera.com/content/support/en/downloads.html
Schritte sind: 1) Download 2) Führen Sie es aus 3) Gehen Sie zur Web-GUI (1.2.3.4:7180) 4) Fügen Sie zusätzliche Knoten in der Web-GUI hinzu (installieren Sie die Cloudera-Software NICHT auf anderen Knoten, sie erledigt alles für Sie). 5) Gehen Sie in der Web-GUI zu Home und klicken Sie auf Hue und Hue Web UI. Dies gibt Ihnen Zugang zu Hive, Pig, Sqoop usw.
quelle
Verifiziertes Mittel aus früheren Beiträgen:
1) Überprüft, ob die
libhadoop.so.1.0.0
mit der Hadoop-Distribution gelieferte Version für meine Maschinenarchitektur kompiliert wurde, die x86_64 lautet:2) hinzugefügt ,
-Djava.library.path=<path>
umHADOOP_OPT
inhadoop-env.sh
:Dies ließ die nervige Warnung tatsächlich verschwinden.
quelle
Erstens: Sie können die glibc-Version ändern. CentOS bietet gelegentlich sichere Software. Dies bedeutet auch, dass die Version alt ist, z. B. glibc, protobuf ...
Sie können die Version des aktuellen Glibc mit dem benötigten Glibc vergleichen.
Zweitens: Wenn die Version des aktuellen Glibc alt ist, können Sie den Glibc aktualisieren. Downloaden Sie Glibc
Wenn die Version der aktuellen glibc-ID richtig ist, können Sie ein Wort an Ihr HADOOP_OPTS anhängen
quelle
Ich benutze kein CentOS. Folgendes habe ich in Ubuntu 16.04.2, hadoop-2.7.3, jdk1.8.0_121. Führen Sie start-dfs.sh oder stop-dfs.sh ohne Fehler erfolgreich aus:
Ersetzen Sie / j01 / sys / jdk, / j01 / srv / hadoop durch Ihren Installationspfad
Ich habe auch das folgende einmalige Setup unter Ubuntu durchgeführt, wodurch die Notwendigkeit, beim Ausführen von start-dfs.sh mehrmals Kennwörter einzugeben, entfällt:
Ersetzen Sie den Benutzer durch Ihren Benutzernamen
quelle
Grundsätzlich handelt es sich nicht um einen Fehler, sondern um eine Warnung im Hadoop-Cluster. Hier aktualisieren wir nur die Umgebungsvariablen.
quelle