STOREコマンドを使用して豚のスクリプトを開発するとき、私はすべての実行のための出力ディレクトリを削除する必要がありますまたはスクリプトが停止しています:PigでHDFSにSTORE(上書き)する方法は?
2012-06-19 19:22:49,680 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 6000: Output Location Validation Failed for: 'hdfs://[server]/user/[user]/foo/bar More info to follow:
Output directory hdfs://[server]/user/[user]/foo/bar already exists
だから私はへのイン豚ソリューションを探していますディレクトリを自動的に削除します。また、ディレクトリがコール時に存在しない場合は、チョークしません。
豚ラテン語のリファレンスでは、シェルコマンドの呼び出し元fsが見つかりました。残念ながら、何かエラーが発生すると、Pigスクリプトは中断します。だから私は使用できません。ディレクトリが存在しないと壊れてしまいますので、使用できません。再利用することはできません。再帰的に削除してください。現時点では私は私がテストされ、ブレークまたはそう私は思っていないはずである
fs -test -e foo/bar
を使用することを考えました。しかし、Pigは、存在しないディレクトリ上のtest
のリターンコードを失敗コードとして再度解釈し、中断します。
は私の問題に対処し、STOREコマンドのオプションパラメータOVERWRITEまたはFORCE_WRITEを示唆豚のプロジェクトのためのJIRA ticketがあります。とにかく、私はPig 0.8.1を必要に応じて使用しています。そのようなパラメータはありません。
の場合、これは確かにいいですが、それはアトミックではありません。個々のファイルのために、私は私のスクリプトの先頭にこれを追加すること巻き上げます。私はむしろ3つのステップでそれをやります:1) 'foobar-tmp'に格納する2)rmf foo/bar 3)mv 'foobar-tmp' to foo/bar –
@MiguelPing:私の初期の問題だが、 'foo/bar'の代わりに' foobar-tmp'のために。最初に格納すると、暫定的にマップ/リダクションに起因するわかりにくいエラーが発生する可能性があります。あなたのソリューションがあなたの側で動作する場合は、サンプルスクリプトを使って答えに変えて、豚のバージョン番号を提供できますか? – valid
@ invalid私のソリューションはあなたのものと似ていますが、私はちょうど 'rmf'と' STORE'(例えば、例外)の間に何かが起きたときにデータを失わないことを保証するための追加ステップを追加しました。豚のスクリプトはいつでも失敗する可能性があるので、私の解決策はそれほど重要ではありませんが、少なくともデータを失う危険はありません。 –