Hive 无法从 EMR 上的分布式缓存中找到文件



我正在尝试在 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 以及各种实例类型中尝试过,但找不到模式或触发此问题的原因。任何建议将不胜感激。

您可以启用 DEBUG 以查找更多信息。但总的来说,当 EMR 集群上出现调整大小(收缩(导致由于复制不足而从集群中删除某些预期 HDFS 分布式缓存文件块时,我看到了类似的问题。

最新更新