2012-05-13 8 views
1

私は500万レコード(A)と40Kレコード(B)に一致するスクリプトを持っています。一致するものがあれば、メールは非同期的にキューに入れられます。hadoopアーキテクチャを提案する

Aの特定の属性がBと一致する場合に一致します。現在、このスクリプトは完了するまでに約1日かかります。

私はhadoopを使ってこの時間を3〜4時間と言いたいと思っています。

私はファイルにAを格納し、このファイルはMapperに入力されると思います。減速機をなくすことができます。

ディスクの読み込みを最小限に抑えるため、またはディスクの読み込みを行わないために、Bのストレージ戦略はどのようにすべきですか?私はどこにそれを保存する必要があります。 memcache、hdfsなど。 Memcacheは、実行時にディスクアクセスを排除するため、良い選択肢と思われます。しかし、提案は歓迎されます。

私はhadoopを初めて使っています。だから、このシナリオではどのようなアプローチが推奨されますか。

答えて

3

私は適切な答えを与えることができません....
あなたのBファイルは、マッパーのメモリにそれらを入れるのに十分小さいですか?
その場合、Hadoopには分散キャッシュと呼ばれるメカニズムがあります。これにより、クラスタ内のすべてのノードにファイルを配布することができます。あなたの場合、Bをキャッシュファイルにして、configure()を使ってメモリにロードし、マッパーで使用することができます。

DistributedCache.addCacheFile(/*B's path*/); //in run()

+0

ヘンリー:正しく回答したと思います。分散キャッシュは、デフォルトで最大10GBのデータをキャッシュするように設定されています。 –

関連する問題