2

ファイルを入力として受け取るhadoopアプリケーションと、いくつかのファイルを含む入力フォルダーを作成したいと思います。単一のファイルには、フォルダー内の他のファイルからレコードを選択して抽出する必要があるキーが含まれています。どうすればこれを達成できますか?

ちなみに、私は実行中のhadoop mapreduceアプリケーションを持っています。このアプリケーションは、フォルダーへのパスを入力として受け取り、処理を実行して、結果を別のフォルダーに書き込みます。

私は、ファイルを使用して、特定のディレクトリ内の他のファイルから選択して抽出する必要のあるキーを取得する方法に固執しています。キーを含むファイルは大きなファイルであるため、メインメモリに直接収めることはできません。どうすればいいですか?

どうも!

4

2 に答える 2

2

キーの数が多すぎてメモリに収まらない場合は、キー セットをブルーム フィルター (誤検知率を低くするのに適したサイズ) にロードしてから、ファイルを処理し、ブルーム フィルターのメンバーシップについて各キーを確認することを検討してください。 (Hadoop には BloomFilter クラスが付属しています。Javadoc を確認してください)。

また、2 番目の MR ジョブを実行して最終的な検証を行い (ほとんどの場合、reduce side join で)、最初のジョブからの誤検出出力を排除する必要があります。

于 2012-06-19T10:31:49.343 に答える
1

ジョブを実行する前に、最初に単一のファイルを読み取ります。必要なすべてのキーをジョブ構成に保存します。その後、フォルダーからファイルを読み取るジョブを作成できます。マッパー/リデューサーsetup(context)メソッドで、構成からキーを読み取り、それらをグローバルに保存して、mapまたはreduce.

于 2012-06-19T10:11:48.060 に答える