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% 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.
Sie müssen "hcatalog-core" neu kompilieren, um Hadoop 2.0.0 zu unterstützen. Derzeit unterstützt "hcatalog-core" nur Hadoop 1.0