Ich bin im Spar-Server-Modus. Ich habe eine UDF in einer JAR-Datei, die ich benutze, indem ich
benutze %Vor%Beim Ausführen des Befehls create temporary function erhalte ich jedoch einen Fehler
Abfrage hat Code ungleich Null zurückgegeben: 9, Ursache: FAILED: Ausführungsfehler, Geben Sie Code 1 von org.apache.hadoop.hive.ql.exec.FunctionTask
zurück
Ich habe überprüft, dass der Name & amp; Pfad des Jars und dass der Benutzer, der den Hive-Server ausführt, über alle richtigen Berechtigungen verfügt, um auf das JAR zuzugreifen. Was komisch ist, ist, wenn ich im CLI-Modus den Hive starte und genau die gleichen Befehle ausführe, dann funktioniert alles. Irgendwelche Ideen, warum sich Hive CLI anders verhalten als der Hive-Sparsamkeits-Server?
Das Problem wurde mit den folgenden Schritten behoben:
1) Platzieren Sie jedes UDF-JAR in / usr / lib / hive / auxlib
2) Geben Sie den Pfad zu jedem jar in der Datei hive-site.xml für die Eigenschaft hive.aux.jars.path an (Beispiel: file: ///usr/lib/hive/auxlib/jar1.jar,file: / //usr/lib/hive/auxlib/jar2.jar)
3) Erstellen Sie ein Skript, um eine Sammelanforderung an den Hive-Server zu senden, um die temporäre Funktion func_name als 'com.test.udf.ClassName' für jede UDF zu starten, nachdem der Hive-Server gestartet wurde
Edit: Für Hive 0.9, egal was ich getan habe, Hiveserver konnte keine jars im auxlib-Verzeichnis finden. Um dies auf Hiveserver 0.9 zu ermöglichen, musste ich das jar einfach in dem Verzeichnis ablegen, das durch den Klassenpfad von Hive angegeben wurde.
Nachdem ich eine Weile damit gespielt habe, habe ich es zum Laufen gebracht, indem ich die .class-Datei in eine Verzeichnisstruktur eingefügt habe, die mit ihrem Paket übereinstimmt, und sie von dort in die .jar-Datei hinzufüge. Als Referenz habe ich den gesamten Prozess einschließlich des Kompilierens und Einfügens in den Hive eingeschlossen.
javac -classpath $CLASSPATH Lower.java
. Hinweis: Der CLASSPATH wurde wie folgt definiert: CLASSPATH=$(ls $HIVE_HOME/lib/hive-serde-*.jar):$(ls $HIVE_HOME/lib/hive-exec-*.jar):$(ls $HADOOP_HOME/hadoop-core-*.jar)
, wie beschrieben hier .
jar -cf lower.jar com/example/hive/udf/Lower.class
jar -tf lower.jar
. Sie sollten eine Zeile wie diese sehen: com/example/hive/udf/Lower.class
. Sie können auch die Option --auxpath an den Befehl hive übergeben Bienenstock --auxpath /path-to-/hive-examples.jar
oder
durch Festlegen der Umgebungsvariable HIVE_AUX_JARS_PATH.
Tags und Links hadoop user-defined-functions hive