事實證明,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引導程序操作是否正常工作?
其中一些很難驗證,但是如果它們中的任何一個都失敗了,那麼很容易就會浪費很多時間進行調試。
但是,請注意,您應該強烈考慮mat kelcey推薦的替代方法。
來源
2011-07-21 11:28:45
emk
事實證明,豬_does_發送EOFs。請參閱下面的接受答案。 – emk