Как оказалось, Pig действительно правильно отправляет EOF внешним командам, поэтому у вас есть возможность передавать все через внешний скрипт. Если не не работает, то, возможно, у вас проблема с отладкой конфигурации.
Вот как начать. Определите внешнюю команду следующим образом, используя любой интерпретатор и скрипт, который вам нужен:
DEFINE UPLOAD_RESULTS `env GEM_PATH=/usr/lib/ruby/gems/1.9.0 ruby1.9 /home/hadoop/upload_results.rb`;
Поток результатов через ваш скрипт:
/* Write our results to our Ruby script for uploading. We add
a trailing bogus DUMP to make sure something actually gets run. */
empty = STREAM results THROUGH UPLOAD_RESULTS;
DUMP empty;
Из Ruby вы можете группировать входные записи в блоки по 1024:
STDIN.each_line.each_slice(1024) do |chunk|
# 'chunk' is an array of 1024 lines, each consisting of tab-separated
# fields followed by a newline.
end
Если это не сработает, внимательно проверьте следующее:
- Работает ли ваш скрипт из командной строки?
- При запуске из Pig, есть ли в вашем скрипте все необходимые переменные окружения?
- Ваши действия по загрузке в EC2 работают правильно?
Некоторые из них трудно проверить, но если какой-либо из них не работает, вы можете легко потратить много времени на отладку.
Обратите внимание, однако, что вы должны строго рассмотреть альтернативные подходы, рекомендованные Мэттом Келси.