【发布时间】:2017-04-05 17:37:17
【问题描述】:
我正在尝试在 Hive 中运行 UDF,它基本上应该使用表中的值作为另一个参数来扫描外部 csv 文件。 我使用的查询:
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
我尝试了各种 EMR 版本以及各种实例类型,但找不到模式或触发此问题的原因。任何建议将不胜感激。
【问题讨论】:
-
我在 EMR 上也面临同样的问题。你能修好它吗?我尝试了两种方法 - MyUDF("./MyFile.txt") 和 MyUDF("MyFile.txt")。我添加了一些日志记录以从 UDF 打印文件路径,它试图在“/user/home”目录中查找文件。
-
嗯,有点。我通过将 Hive 脚本复制并粘贴到终端窗口来运行我的作业。我的解决方法是 - 从另一个终端窗口运行相同的工作,然后它神奇地工作,仍然不清楚为什么它可能很重要......
标签: amazon-web-services hive emr udf