結局のところ、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ブートストラップアクションは正しく機能していますか?
これらのいくつかは検証が困難ですが、いずれかが失敗した場合、デバッグにかなりの時間を簡単に浪費する可能性があります。
ただし、matkelceyが推奨する代替アプローチを強く検討する必要があることに注意してください。