私はHadoop mapreduceストリーミングジョブを実行しています(マッパのみのジョブ)。場合によっては、私の仕事がstdoutに書き込んで、サイズがゼロでない出力ファイルが作成されます。場合によっては、私の仕事はstdoutに何も書き込まれませんが、依然としてサイズゼロの出力ファイルが作成されます。何もstdoutに書き込まれていないときにこのサイズのファイルを作成しないようにする方法がありますか?サイズゼロの出力ファイル
0
A
答えて
0
現在の出力フォーマットを拡張しても構わない場合は、データが書き込まれていないときにcommitTaskステージを '中断'するためにOutputCommitterをオーバーライドするだけで済みます。
すべての出力形式が空ファイル(たとえば、シーケンスファイルにはヘッダーを含む)のファイルバイトをゼロにしているわけではないので、出力ファイルのサイズを確認するだけでは不十分です。次のファイルのソースで
ルック:
- OutputCommitter - 基本抽象クラス
- FileOutputCommitter - それは開始するには良い場所ですので、ほとんどのFileOutputFormatsこのコミッターを使用しています。 (ないに何も書かれていなかった場合は、ファイルをコピー)あなたのロジックが最も可能性が高い
0
あなたがMultipleOutputsを使用しています行くところこれは、プライベートメソッドmoveTaskOutputs
に見て? 「はい」の場合、MultipleOutputsは、レデューサーが出力に何も書き込むことがない場合でも、デフォルトファイルを作成します。 あなたがLazyOutputFormat、ゼロサイズのファイルが作成されますを使用している場合でも、このデフォルトはゼロサイズの出力は、あなたが、私の経験からLazyOutputFormat.setOutputFormatClass()
を使用することができないようにするにはとき:レデューサーは書くためにいくつかのデータを持っている(ので、出力ファイルが作成されます)減速機は出力を書き込む前に殺されます。これはタイミングの問題だと思うので、HDFSには部分的な縮小出力ファイルしか存在しないか、またはまったく観察しないかもしれません。
例えば、レデューサーが10人の場合は、「n」(n < = 10)のファイル数しかなく、ファイルサイズが0バイトになるものもあります。
関連する問題
- 1. 入力ファイルと出力ファイル
- 2. ファイルへのPHPスクリプト出力の出力
- 3. パイプ出力からファイルへの出力
- 4. コンソール出力をC++のファイルに出力
- 5. EDIT:C++の入力ファイルと出力ファイル
- 6. Grepの - 入力ファイルも出力ファイル
- 7. ファイルへの入出力ファイル
- 8. GhostScriptの出力ファイル
- 9. 出力ファイルのスライシング
- 10. 、出力csvファイル
- 11. java:出力ファイル
- 12. ファイル入出力
- 13. ファイル:出力
- 14. ファイル出力
- 15. Webpack - 出力ファイル
- 16. Sinatra出力ファイル
- 17. スパーク:出力ファイル
- 18. MySQLが出力ファイルにエラーを出力
- 19. ファイル入力と出力
- 20. 理解ファイル入力出力
- 21. 出力ファイルに出力データを出力しています
- 22. Linuxのwgetファイルの出力
- 23. ファイルへのpopen()の出力
- 24. Pythonの出力ファイルのリダイレクト
- 25. ファイルへのGWT.logの出力
- 26. ファイルへのXprofの出力
- 27. Mpdf出力2ファイル
- 28. xsd.exe出力ファイル名
- 29. Cronジョブ出力ファイル
- 30. Python入出力ファイル
私はそうは思わない。 –