我尝试在配置单元中运行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以及不同的示例类型,但是找不到一个模式或者什么触发了这个问题。如有任何建议,我们将不胜感激。
1条答案
按热度按时间tjvv9vkg1#
您可以启用debug来查找更多信息。但总的来说,当emr集群上出现调整大小(收缩)时,我也看到过类似的问题,因为没有足够的复制,导致预期hdfs分布式缓存文件的某些块从集群中删除。