Ich versuche, UDF in Hive auszuführen, die im Grunde durch externe CSV-Datei mit Wert aus Tabelle als ein weiteres Argument scannen sollte. Abfrage Ich benutze:Hive kann keine Datei aus dem verteilten Cache auf EMR finden
add jar s3://bucket_name/udf/hiveudf.jar;
add FILE hdfs:///myfile/myfile.csv;
CREATE TEMPORARY FUNCTION MyFunc AS '....udf.myUDF';
SELECT mydate, record_id, value, MyFunc('myfile.csv',value) from my_table;
Ergebnisse instabil sind und in einigen Fällen genau die gleiche Abfrage funktioniert ganz gut, aber in etwa 80% der Fälle gibt es Ausnahme:
java.io.FileNotFoundException: myfile.csv (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at java.io.FileReader.<init>(FileReader.java:58)
...
Datei scheint verteilten Cache hinzugefügt werden:
hive> list files;
/mnt/tmp/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_resources/myfile.csv
ich es mit variou versucht s Versionen von EMR sowie mit verschiedenen Instanztypen und konnte kein Muster finden oder was löst dieses Problem. Jede Beratung wird sehr geschätzt.
Ich habe auch das gleiche Problem auf EMR. Konnten Sie es reparieren? Ich habe beide Wege ausprobiert - MyUDF ("./ MyFile.txt") und MyUDF ("MyFile.txt"). Ich habe etwas Logging hinzugefügt, um den Dateipfad von UDF zu drucken. Es wird versucht, die Datei im Verzeichnis "/ user/home" zu finden. – Ajeet
Nun, irgendwie. Ich habe meine Jobs ausgeführt, indem ich das Hive-Skript in das Terminalfenster kopiert und eingefügt habe. Meine Arbeit war - habe denselben Job von einem anderen Terminalfenster aus ausgeführt und dann funktioniert es magisch, immer noch unklar, warum es wichtig sein könnte ... – Coppernick