MultipleTextOutputFormatが目立つように、新しいAPIに移行されていません。したがって、出力ディレクトリを選択して、その場で書かれているKey-Valueに基づいてfienameを出力する必要がある場合、新しいmapreduce APIを使用する代わりに何ができますか?新しいAPIでのMultipleTextOutputFormatの代替
と同様に答えて
私はAWS EMR Hadoop 1.0.3を使用しており、k/vペアに基づいて異なるディレクトリとファイルを指定することができます。 MultipleOutputs
クラスから以下の機能のいずれかを使用します。
public void write(KEYOUT key, VALUEOUT value, String baseOutputPath)
または
public <K,V> void write(String namedOutput, K key, V value,
String baseOutputPath)
旧write
方法は、地図出力キーと同じタイプであることをキーが必要です(場合にはこれを使用していますmapper)またはreduce出力キーと同じタイプ(これをレジューサーで使用している場合)。値も同様に入力する必要があります。
後者write
方法は、セットアップaddNamedOutput
機能を使用してMultipleObjects静的プロパティを指定したタイプに一致するように、キー/値の型が必要です。
public static void addNamedOutput(Job job,
String namedOutput,
Class<? extends OutputFormat> outputFormatClass,
Class<?> keyClass,
Class<?> valueClass)
ですから、Context
とは異なる出力タイプが必要な場合は使用しています後でwrite
メソッドを使用する必要があります。
異なる出力ディレクトリを取得するトリックは、このように、ディレクトリの区切りが含まれているbaseOutputPath
を渡すことです。私の場合は
multipleOutputs.write("output1", key, value, "dir1/part");
、これは「DIR1 /パート-R-00000」という名前のファイルを作成しました。
私は、すべてのbaseOutputPath
sは厳密-output
パラメータに渡されたパスに含まれている、..
ディレクトリが含まれていることbaseOutputPath
を使用して成功しませんでした。
MultipleOutputsの設定方法と使用方法の詳細については、私が見つけたコードを参照してください(私のものではありませんが、非常に参考になりました。 https://github.com/rystsov/learning-hadoop/blob/master/src/main/java/com/twitter/rystsov/mr/MultipulOutputExample.java
:Hadoop Reducer: How can I output to multiple directories using speculative execution?
基本的に、あなたの減速から直接HDFSに書き込むことができます - あなたは、あなたはあなたがOutputCommitter所有実装する必要があります、投機的実行を警戒すると一意にあなたのファイルに名前を付けるためにだけ必要がありますあなたが本当に動的な出力フォルダを持っているなら、これは最も難しい部分です - 各フォルダをステップして打ち切った/失敗したタスクに関連するattempsを削除する必要があります。これに対する簡単な解決策は、Hadoopのに変わり、最良の答えのために投機的実行に
これは簡単ではありません:P MultipleTextOutputFormatの回避策はありますか?あるいは、新しいAPIを使用してMultipleTextOutputFormatのようなものを実装できますか? – Amar
複数の出力のjavadocで述べたように、私は自分の仕事と減速機に以下のコードを追加しました。 ジョブ内: MultipleOutputs.addNamedOutput(job、namedoutputstring、outputformatclass、keyclass、valueclass); レデューサー内: mos = new Multiple Outputs
クリーンアップ()でmos.close()を忘れないでください。 –
をオフにすることである - 。決定的なガイド第3版を(PGを開始する253。)
HDG帳から抜粋 -
"旧MapReduce APIには、複数の出力を生成するための2つのクラスがあります:MultipleOutputFormatとMultipleOutputs一言で言えば、MultipleOutputsはより完全に機能しますが、MultipleOutputFormatは出力ディレクトリ構造とファイルの命名をより詳細に制御します。古いAPIで2つの複数の出力クラスの最高の機能を組み合わせています。
これは、MultipleOutputs APIを使用してディレクトリ構造、ファイルの命名および出力形式を制御する方法の例を示しています。
HTH。
MultipleOutputsは、キーと値のペアに基づいて、出力フォルダ名またはファイル名をオンザフライで決定できますか?私は親切に私に知らせる方法があれば、そうは思わない。 – Amar
ええ、私はそれを見つけることができませんでした! MultipleOutputsを使うと、あらかじめ定義された*ファイルパスの* set *だけに書き込むことができます。そして、 'run()'で 'MultipleOutputs.addNamedOutput()'を使ってこれを行います。この文を作るよりも私がここで何か不足している可能性があります。他の場所に簡単に見つかる*場合は、少なくともそれにリンクを張っている可能性があります。 – Amar
また、MultipleTextOutputFormatまたはMultipleOutputsのいずれかを使用したことが疑わしいです! MutipleTextOutputFormatと比較して、MultipleOutputs *を使用している間に出力の命名を制御することは少なくなりました。 – Amar
- 1. symfonyの代替新しいアクション
- 2. Json4s代替API
- 3. 代替ブラウザのAPIデザイナ
- 4. AndroidでのDOM APIの代替方法
- 5. Googleブログ検索APIの代替API
- 6. C#Windowsサービス代替 - 新しいトレンド
- 7. Railsの代替更新フォーム
- 8. longurl APIの代替手段ですか?
- 9. MONOの新しいRelicの代替品ですか?
- 10. Fancyuploadの新しい代替または新しいバージョンですか?
- 11. TrueCrypt代替APIを使用
- 12. RetrieveSharedPrincipalsAndAccessRequestのWeb APIの代替方法
- 13. Spark Dataframeのcount()APIの代替手段
- 14. FileReader HTML 5 APIの代替Flash
- 15. Azure Search API/SDKアナライザー属性の代替
- 16. 各dbus APIの代替GDBus APIは何ですか?
- 17. Snap SVGを使用している間の代替/代替イメージ
- 18. APIなしのiOSアプリ、代替品ですか?
- 19. 新しいユーザーの代替ユーザープリンシパル名を追加する方法
- 20. Javaで新しい代替コンストラクタを追加するには?
- 21. バルク挿入/更新のエンティティフレームワーク代替メソッド
- 22. APIレベルの代わりにisAttachedToWindow()の代替手段を使用します。
- 23. ajaxリフレッシュの代替コンポーネント代替
- 24. のNoSQL FREE代替(代替ravendbする)
- 25. FacebookファンのAPIの代替案は何ですか?
- 26. Android互換APIのPreferenceFragmentの代替手段ですか?
- 27. python re - 代替代替パターン
- 28. AuthChallengeParserの新しいクラスまたは代替とは何ですか?
- 29. Navicatの良い代替品
- 30. qtの良い代替品
キー/値のデータに基づいて 'baseOutputPath'を変更してテストしたところ、別のファイルに正常に出力されたことは忘れました。 – Eddified
私はあなたがそれを言いましたことをうれしく思います、私はそれを最終的に見つけました:) – Amar
"dir1/part"の部分のためにたくさんありがとう、それを考えなかったでしょう! – ssgao