Hive не может найти файл из распределенного кеша в EMR

Я пытаюсь запустить UDF в Hive, который в основном должен сканировать внешний файл 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, а также с различными типами экземпляров и не смог найти шаблон или то, что вызывает эту проблему. Любые советы будут высоко оценены.


person Coppernick    schedule 05.04.2017    source источник
comment
Я также сталкиваюсь с той же проблемой на EMR. Вы смогли это исправить? Я пробовал оба способа - MyUDF(./MyFile.txt) и MyUDF(MyFile.txt). Я добавил журнал для печати пути к файлу из UDF, он пытается найти файл в /user/home dir.   -  person Ajeet    schedule 07.01.2018
comment
Ну типа. Я выполнял свои задания, копируя и вставляя сценарий Hive в окно терминала. Моя работа заключалась в том, чтобы запустить ту же работу из другого окна терминала, а затем она волшебным образом сработала, но до сих пор неясно, почему это может иметь значение...   -  person Coppernick    schedule 08.01.2018


Ответы (1)


Вы можете включить DEBUG, чтобы найти больше информации. Но в целом я видел подобные проблемы, когда в кластере EMR было изменение размера (сжатие), в результате чего определенные блоки ожидаемого файла распределенного кэша HDFS удалялись из кластера из-за недостаточной репликации.

person jc mannem    schedule 17.04.2017
comment
Спасибо, попробую. Техническая поддержка AWS до сих пор предлагала запускать оператор сразу после добавления файлов, поскольку они предполагают, что сеанс, в который были добавлены внешние файлы, может быть закрыт. В этом случае файлы не будут видны. Звучит разумно, но в моем случае не работает - person Coppernick; 18.04.2017