Hadoop pig latin не удается выполнить потоковую передачу через скрипт python

#python #hadoop #apache-pig

#python #hadoop #apache-pig

Вопрос:

У меня есть простой скрипт на python (moo.py ), который я пытаюсь выполнить потоковой передачей, хотя

 import sys, os
for line in sys.stdin:
    print 1;
  

и я пытаюсь запустить этот скрипт pig

 DEFINE CMD `python moo.py` ship('moo.py');
data = LOAD 's3://path/to/my/data/*' AS (a:chararray, b:chararray, c:int, d:int);
res = STREAM data through CMD;
dump res;
  

когда я запускаю этот локальный скрипт pig (pig -x local), все в порядке,
но когда я запускаю его без -x local, он выводит эту ошибку

[основная] ОШИБКА org.apache.pig.tools.grunt.Ворчание — ОШИБКА 2017: Внутренняя ошибка при создании конфигурации задания.

[Файл журнала]

Вызвано: java.io.FileNotFoundException: File moo.py не существует.

есть идеи?

Ответ №1:

скорее всего, это проблема относительного пути.

попробуйте:

 DEFINE CMD `python moo.py` ship('/local/path/to/moo.py');
  

это также может быть проблемой с разрешением на чтение / запись / выполнение.

Ответ №2:

Проблема заключалась в том, что я использовал ship() функцию вместо cache() while ship() works file — передача локальных файлов от ведущего устройства к подчиненным cache() используется подчиненными устройствами для получения файлов из доступного места, такого как s3 на Amazon

надеюсь, это кому-нибудь поможет :]