問題タブ [hadoop-partitioning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hadoop - 可変長/区切りなしのバイナリ ファイルを使用した Hadoop での分割
オープン ストリート マップ データの Hadoop ベースのインジェスターに取り組み始めたところです。いくつかの形式がありますが、私はプロトコル バッファ ベースの形式をターゲットにしています (注意 - 純粋な pb ではありません)。
カスタムレコードリーダー/入力形式で可変長エンコーディングを処理するのではなく、ファイルをシーケンスファイルに事前に分割する方が効率的であるように見えますが、サニティチェックが必要です。
形式については、 PBF 形式の説明で詳しく説明されていますが 、基本的には [BlobHeader,Blob] ブロックのコレクションです。
Blobヘッダーがあります
次に、Blob (サイズはヘッダーの datasize パラメーターで定義されます)
明らかにブロブに取り掛かると、より多くの構造があります-しかし、私はそれをマッパーで処理します-私がやりたいことは、最初はマッパーごとに1つのブロブを持つことです(後でマッパーごとにブロブの倍数になる可能性があります)。
他の入力形式/レコードリーダーの一部は、「十分に大きい」分割サイズを使用し、区切り記号まで後方/前方にシークしますが、ブロブ/ヘッダーのオフセットを知らせる区切り記号がないため、インデックスがないためです。それらのいずれかを指しています-最初にファイルをストリーミングしないと、分割ポイントを取得する方法がわかりません。
これで、実際にディスクからファイル全体を読み取る必要がなくなります。ヘッダーの読み取りから始め、その情報を使用して BLOB をシークし、それを最初の分割ポイントとして設定してから繰り返すことができます。しかし、それは私が思いつくことができるシーケンスファイルへの事前分割に代わる唯一の方法です.
これを処理するより良い方法はありますか?そうでない場合は、2つの提案について考えてください。
java - -libjars を使用した MapReduce ストリーミング ジョブ、カスタム パーティショナーが失敗する: 「クラスが見つかりません」
MapReduce ストリーミング ジョブにカスタム (Java) パーティショナーを接続しようとしています。私はこのコマンドを使用しています:
その重要な部分は NumericPartitioner.jar ファイルです。このファイルは、コマンドが実行されているのと同じフォルダー (Hadoop ルート インストールから下のレベル) にあります。コードは次のとおりです。
それでも、上記のコマンドを実行しようとすると、次のようになります。
ここで何が起こっているのですか? mapReduce でパーティショナーを見つけるにはどうすればよいですか?
hadoop - パーティショナーまたは MultipleOutputs
Partitioner と MultipleOutputs についてご意見をお聞かせください。
次のようなキーを含むファイルがあるとします
2 つのファイルが必要です。1 つは で始まるキーを含むファイル0:
で、もう1 つは で始まるキーを含むファイルです1:
。どのアプローチを使用する必要がありますか:
1) キーを解析し、getPartition() に対して 0 または 1 を返すカスタム パーティショナーを使用します。
2)キーを解析し、MultipleOutputs.write のパラメーター に対してorを指定することにより、reduce フェーズでMultipleOutputs.writeを使用します。zero
one
namedOutput
どちらの方がよいですか?私にとっては、レデューサーは単一のファイルを処理するため、1) の方が優れています。
java - Hadoop のデフォルトのハッシュ パーティショナーによって同じレデューサーに送られる 2 つの異なるキーは?
私たちが知っているHadoop
ように、異なるものから来る同じキーが同じmappers
に送信されることを保証しますreducer
。
しかし、2 つの異なるキーが同じハッシュ値を持つ場合、それらは間違いなく同じ メソッドreducer
に送られます 。このロジックを担当するのはどの部分ですか?reduce
どうもありがとう!
hadoop - 不均衡な負荷を処理するためにレデューサーに割り当てる Hadoop の方法 - CustomPartition
複数の出力で出力する必要があるマップ レデューサー ジョブがあります。この例のように multipleOutputFormat を使用しています: http://grepalex.com/2013/05/20/multipleoutputs-part1/
課題は次のとおりです。
- パーティショナーが各レデューサーに 1 つのキーを送信すると (キーが個別の出力ファイルを参照すると仮定)、多くのデータを含む一部のレデューサーは永遠にかかります。
- パーティショナーが各レデューサーをランダムに (theKey+randomNumber) 送信すると、多くのレデューサーが複数の出力に書き込み、IO の問題が発生します。
解決策として:
オプション 1: 重量に応じてキーをレデューサーに割り当てます。したがって、すべてのレデューサーの負荷は同じです。(1 つの大きなキーが 5 つの異なるレデューサーに送信され、6 つの小さなキーが単一のレデューサーに送信されます)
オプション 2: 重みに応じてキーを再度割り当てますが、リデューサーがキーを 1 つしか取得できないことを確認します。(1 つの大きなキーは 5 つの異なるキーに送信されますが、6 つの小さなキーは別のレデューサーにも送信されます)
長所短所:
- オプション 1: バランスの取れたレデューサーがありますが、一部のレデューサーは異なるファイル (小さなキー) に書き込みます。
- オプション 2: 不均衡なレデューサーがありますが、レデューサーの最大負荷を制限し、各レデューサーは独自のファイルに書き込みます。
これらのオプションは両方とも、妥当な時間内に実行されます。どちらと一緒に行くべきかについてアドバイスが必要です。
ありがとう
hadoop - ハイブを使用して大きな範囲のパーティション内のデータを選択する
ハイブを使用して大きな範囲のパーティション内のデータを選択する際に問題が発生しました
実行したいHQLは次のとおりです。
「cdate」はテーブル RAW_TABLE のパーティションです
しかし、ジョブIDを指定した後、スタックします
それを次のように変更したら:
それからそれは仕事を始めます
最初の HQL を実行するのに役立つソリューションはありますか?
助けてくれてありがとう!
hadoop - map reduce の map 関数によるファイル
各マップ関数を介して一連のファイルを何らかの形で渡すことは可能ですか? 要件は、異なる 2 操作に対して各ファイルを並行して処理することです。私は map reduce がまったく初めてで、プログラミング言語として Java を使用しています。
java - 同じファイルの分割でマップ分割を提供する
マッパーに供給されたファイルの各行を同じファイルの分割で提供するにはどうすればよいですか?
基本的に私がやりたいことは
Javaでmap reduceを使用してこれを行うことはできますか?