2013-04-21 5 views
6

Wenn ich ausführen:Sqoop Hive verlassen mit Status 1

sqoop import --connect jdbc:mysql://localhost/testdb --table test --hive-table test --hive-import -m 1 

erhalte ich folgende Fehlermeldung:

13/04/21 16:42:50 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 1 
    at org.apache.sqoop.hive.HiveImport.executeExternalHiveScript(HiveImport.java:364) 
    at org.apache.sqoop.hive.HiveImport.executeScript(HiveImport.java:314) 
    at org.apache.sqoop.hive.HiveImport.importTable(HiveImport.java:226) 
    at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:415) 
    at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:476) 
    at org.apache.sqoop.Sqoop.run(Sqoop.java:145) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) 
    at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:181) 
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:220) 
    at org.apache.sqoop.Sqoop.runTool(Sqoop.java:229) 
    at org.apache.sqoop.Sqoop.main(Sqoop.java:238) 

ich für sie Google versucht, aber keine Lösung gefunden. Ich habe Hadoop lokal pseudo-verteilt eingerichtet. Hive läuft gut ... Ich habe den eingebetteten Metastore benutzt. Irgendwelche Ideen, wie das zu beheben? Danke, Diddy

+0

Bitte teilen Sie die gesamte Protokollausgabe mit Parameter --verbose. –

+0

Hier finden Sie das Protokoll: [pastpin] (http://www.pastebin.com/HRMZiygh) – Diddy

+0

... einige weitere Informationen: Export von MySQL direkt zu hdfs funktioniert ohne Probleme, es ist nur, wenn ich versuche, in Bienenstock zu exportieren dass ich diesen Fehler bekomme. Mein Gefühl ist, dass dies nichts mit fehlendem mysql-Treiber oder unzureichenden Rechten an der mysql-Tabelle zu tun hat. – Diddy

Antwort

9

Basierend auf dem log scheint es, dass Sie folgende Ausnahme treffen sind:

13/04/22 18:34:44 INFO hive.HiveImport: Exception in thread "main" java.lang.NoSuchMethodError: org.apache.thrift.EncodingUtils.setBit (BIZ) B

Ich habe dieses Problem bereits gesehen, als Benutzer HBase und Hive in "inkompatiblen" Versionen verwendeten. Die Inkompatibilität kann im Allgemeinen auf mehreren Ebenen sein, aber diese besondere ist, wenn HBase und Hive unterschiedliche Sparversionen verwenden. Da Sqoop dem Klassenpfad sowohl HBase- als auch Hive-Gläser hinzufügt, kann nur eine Sparset-Version aktiv sein und somit funktioniert das "zweite" Werkzeug (normalerweise Hive) nicht richtig.

Haben Sie HBase und Hive auf der Schachtel, in der Sie Sqoop ausführen, zufällig installiert? Wenn ja, können Sie die Sparversion überprüfen, die jedes Projekt verwendet? Suchen Sie einfach nach "* Sparsamkeit * .jar". Wenn die Antwort auf beide Fragen positiv ist, könnten Sie HBASE_HOME möglicherweise auf etwas nicht vorhandenes setzen, um zu erzwingen, dass Sqoop HBas Version der Sparsamkeit nicht lädt.

+0

Vielen Dank für Ihre Hilfe! Ja, ich habe sowohl HBase als auch Hive in meiner lokalen Entwicklungsumgebung eingerichtet. Meine Suche ergab, dass hbase-0.94.6.1 libhtrift-0.8.0.jar verwendet, während hive-0.10.0 libthrift-0.9.0.jar verwendet. Gemäß Ihrer Empfehlung habe ich HBASE_HOME auf einen nicht existierenden Pfad gesetzt und ... ausgezeichnet, jetzt funktioniert alles! Nochmals vielen Dank für Ihre massive Hilfe! – Diddy

0

Es kann sein, Berechtigungsproblem für mysql-Tabelle oder Sie fehlen mysql-Anschluss jar in Hive-Bibliothek. Bitte teilen gesamte Ausgabe des Befehls

+0

Vielen Dank für Ihre Antwort. Den Protokoll-Auszug finden Sie hier: http://pastebin.com/HRMZiygh. Ich kann ohne Probleme nach HDFS exportieren, nur nicht in Hive, also ist das Problem nicht mit einem fehlenden Treiber oder MySQL-Berechtigungen. – Diddy

0

Ich konfrontiert den gleichen Fehler, dies würde definitiv mit libhtrift-0.8.0.jar und libthrift-0.9.0.jar in HBase bzw. Bienenstock verbunden sein. Also habe ich einfach meinen HBASE_HOME auf den unbekannten Ort gerichtet und führe meinen Bash aus. Dann ist es in Ordnung.

Aber hier ist ein Problem, das ich mit Hive konfrontiert ist die Tabelle, die ich versucht zu importieren, die jetzt fehlgeschlagen ist, sagt die Tabelle bereits beendet, aber es tatsächlich nicht. Ich denke, dass die metasore db-Dateien bereits geschrieben haben, also muss ich den Namen der Tabelle ändern und den Befehl wiederholen, falls wir den ganzen Ordner von metastoredb nicht löschen wollen.

2

Ich stimme Jarek Jarcec Cechos Antwort zu.

Eine andere Problemumgehung besteht darin, libthrift*.jar Datei von $HIVE_HOME/lib zu $SQOOP_HOME/lib zu kopieren.