2017-04-05 2 views
1

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.

+0

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

+0

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

Antwort

0

Sie könnten DEBUG aktivieren, um weitere Informationen zu finden. Aber im Allgemeinen habe ich ähnliche Probleme gesehen, als eine Größenanpassung (Verkleinerung) auf dem EMR-Cluster stattgefunden hat, die dazu geführt hat, dass bestimmte Blöcke der erwarteten HDFS-verteilte Cachedatei wegen zu geringer Replikation aus dem Cluster entfernt wurden.

+0

Danke, ich werde es versuchen. Der technische Support von AWS hat bisher vorgeschlagen, die Anweisung unmittelbar nach dem Hinzufügen von Dateien auszuführen, weil sie davon ausgehen, dass die Sitzung, in der externe Dateien hinzugefügt wurden, geschlossen werden könnte. Dateien werden in diesem Fall nicht angezeigt. Es klingt vernünftig, funktioniert aber in meinem Fall nicht – Coppernick

Verwandte Themen