配置单元无法从emr上的分布式缓存中找到文件

goqiplq2  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(339)

我尝试在配置单元中运行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以及不同的示例类型,但是找不到一个模式或者什么触发了这个问题。如有任何建议,我们将不胜感激。

tjvv9vkg

tjvv9vkg1#

您可以启用debug来查找更多信息。但总的来说,当emr集群上出现调整大小(收缩)时,我也看到过类似的问题,因为没有足够的复制,导致预期hdfs分布式缓存文件的某些块从集群中删除。

相关问题