我試圖在Hive中運行UDF,它基本上應該使用表中的值作爲另一個參數來掃描外部csv文件。 查詢我使用:Hive無法從EMR上的分佈式緩存中找到文件
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;
結果是不穩定的,在某些情況下完全相同的查詢工作得很好,但在案件的80%左右,它返回例外:
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)
...
文件似乎被添加到分佈式緩存:
hive> list files;
/mnt/tmp/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx_resources/myfile.csv
我試着用variou EMR版本以及各種實例類型,並且找不到模式或觸發此問題的原因。任何建議將不勝感激。
我在EMR上也面臨同樣的問題。你能解決它嗎?我嘗試了兩種方式 - MyUDF(「./ MyFile.txt」)和MyUDF(「MyFile.txt」)。我添加了一些日誌來從UDF打印文件路徑,它試圖在「/ user/home」目錄中查找文件。 – Ajeet
好吧,那種。我通過複製並將Hive腳本粘貼到終端窗口來運行我的作業。我的工作是 - 從另一個終端窗口運行同樣的工作,然後它神奇地工作,仍然不清楚爲什麼它可能很重要... – Coppernick