Hadoop: java.lang.IncompatibleClassChangeError: Gefundene Schnittstelle org.apache.hadoop.mapreduce.JobContext, aber Klasse wurde erwartet

9

Meine MapReduce-Jobs werden in Eclipse ordnungsgemäß ausgeführt, wobei alle möglichen Hadoop- und Hive-Dateien im Eclipse-Projekt als Abhängigkeiten enthalten sind. (Dies sind die Jars, die mit einem einzelnen Knoten, lokale Hadoop-Installation, kommen).

Aber wenn ich versuche, das gleiche Programm zu starten, das mit dem Maven-Projekt zusammengestellt wurde (siehe unten), bekomme ich:

%Vor%

Diese Ausnahme tritt auf, wenn das Programm mit dem folgenden Maven-Projekt zusammengestellt wird:

%Vor%

* Bitte geben Sie an, wo und wie Sie kompatible Hadoop-Gläser finden können. *

[update_1] Ich verwende Hadoop 2.2.0.2.0.6.0-101

Wie ich hier gefunden habe: Ссылка

Hadoop 1.0.3: JobContext ist eine Klasse

Hadoop 2.0.0: JobContext ist eine Schnittstelle

In meiner pom.xml habe ich drei Gläser mit Version 2.2.0

%Vor%

Die einzige Ausnahme ist hcatalog-core welche Version ist 0.12.0, ich konnte keine neuere Version dieses Jar finden und ich brauche es!

Wie kann ich herausfinden, welches dieser 4 Gläser java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected produziert?

Bitte geben Sie mir eine Idee, wie Sie das lösen können. (Die einzige Lösung, die ich sehe, ist, alles aus der Quelle zu kompilieren!)

[/ update_1]

Vollständiger Text meines MarReduce-Jobs:

%Vor%

Und Klasse für komplexen Schlüssel:

%Vor%     
dokondr 25.03.2014, 09:30
quelle

5 Antworten

10

Hadoop hat einen riesigen Code-Refactoring von Hadoop 1.0 nach Hadoop 2.0 durchgeführt. Ein Nebeneffekt Ist der gegen Hadoop 1.0 kompilierte Code nicht mit Hadoop 2.0 kompatibel und umgekehrt? Quellcode ist jedoch größtenteils kompatibel und daher muss Code nur mit dem Ziel neu kompiliert werden Hadoop-Verteilung.

Die Ausnahme " Found interface X, but class was expected " ist sehr häufig, wenn Sie gerade laufen Code, der für Hadoop 1.0 auf Hadoop 2.0 kompiliert wird oder umgekehrt.

Sie können die korrekte Hadoop-Version im Cluster finden und dann die Hadoop-Version in der Datei pom.xml angeben. Erstellen Sie Ihr Projekt mit der gleichen im Cluster verwendeten Version von hadoop und stellen Sie es bereit.

    
sachin 25.03.2014 10:33
quelle
1

Sie müssen "hcatalog-core" neu kompilieren, um Hadoop 2.0.0 zu unterstützen. Derzeit unterstützt "hcatalog-core" nur Hadoop 1.0

    
akshat thakar 13.08.2014 11:14
quelle
0

Offensichtlich haben Sie eine Versionsinkompatibilität zwischen Ihren Hadoop- und Hive-Versionen. Sie müssen Ihre Hadoop-Version oder Hive-Version aktualisieren (oder herabstufen).

Dies liegt an der Inkompatibilität zwischen Hadoop 1 und Hadoop 2.

    
Chiron 25.03.2014 10:21
quelle
0

Suchen Sie nach solchen Einträgen

%Vor%

in Ihrer pom.xml. Diese definieren die zu verwendende Hadoop-Version. Ändern Sie sie oder entfernen Sie sie gemäß Ihren Anforderungen.

    
nikoo28 05.06.2015 10:51
quelle
0

Auch ich habe dieses Problem durchgespielt. Wurde versucht, HCatMultipleInputs mit hive-hcatalog-core-0.13.0.jar zu verwenden. Wir verwenden hadoop 2.5.1.

Die folgende Codeänderung hat mir geholfen, das Problem zu beheben:

%Vor%     
Abhiram 09.10.2015 03:36
quelle

Tags und Links