Ich sende meine mapreduce-Jobs von einer Java-Anwendung, die unter Windows läuft, an den Hadoop-2.2-Cluster, der auf ubuntu läuft. In Hadoop 1.x funktionierte das wie erwartet, aber auf Hadoop 2.2 erhalte ich einen seltsamen Fehler:
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.native.NativeIO $ Windows.access0 (Ljava / lang / String; I) Z
Ich habe die erforderlichen Windows-Bibliotheken (hadoop.dll und winutils.exe) kompiliert und kann über Code auf die hdfs zugreifen und die Cluster-Informationen mit der hadoop-API lesen. Nur die Job-Einreichung funktioniert nicht.
Jede Hilfe wird angekündigt.
Lösung : Ich habe es selbst herausgefunden, der Pfad, wo die Windows-Hadoop-Binärdateien gefunden werden können, muss der PATH-Variable von Windows hinzugefügt werden.
Dieser Fehler tritt im Allgemeinen auf, weil die Binärdateien in Ihrem% HADOOP_HOME% \ bin-Ordner nicht übereinstimmen. Also, was Sie tun müssen, ist Hadoop.dll und winutils.exe speziell für Ihre Hadoop-Version zu bekommen.
Rufen Sie hadoop.dll und winutils.exe für Ihre spezifische Hadoop-Version auf und kopieren Sie sie in Ihren% HADOOP_HOME% \ bin-Ordner.