2016-04-27 8 views
0

私は、HDFSアーキテクチャとApache crunch PTableに関連するいくつかのドキュメントを調べていました。私の理解に基づいて、PTableを生成すると、データは内部でHDFSのDataノードに格納されます。Apache Crunch PTableのcollectValuesは内部的にどのように動作しますか

これは、<K1,V1>,<K2,V2>,<K1,V3>,<K3,V4>,<K2,V5>でPTableがあり、HDFSに2つのデータノードD1とD2があるとします。 各データノードに3つのペアを保持する容量があるとします。したがってD1は<K1,V1>,<K2,V2>,<K1,V3>を保持し、D2は<K3,V4>,<K2,V5>を保持します。

このPTableでcollectValuesを実行すると、内部的にPTableからこれらの値を取得し、<K,Collection<V>>のペアを生成する別のmap-reduceジョブを実行しています。だから最後に私は、<K1,Collection<V1,V3>>, <K2,Collection<V2,V5>> and <K3,Collection<V4>>を持っています。そして、これらのペアは、異なるデータノードに分配されます。

ここで、コレクション値(V1,V3 of K1)は、生成されたPTableにどのように格納されるのでしょうか?このデータは、すなわち、

  • V1が

  • V3がD2

に格納され、または、V1及びV3をに格納されているであろうD1に格納される、あまりにノードに分散されます1つのノードのみ。

キーのすべてのコレクション値が1つのノード(分散されていない)に格納されている場合、大きなデータセットの場合、各キーの収集値の処理が遅くなりませんか?

答えて

0

同じキーの値はすべて1つのノードになります。これは一般的に地図縮約の概念であり、危機ではありません。 理由はです。すべてのアイテムを1か所にまとめたいと思っています。これは達成したいローカリゼーションです。

+0

@Ronにお返事ありがとうございます。 同じノード内の大きな値のデータセットの処理は、より効率的ではないか、またはそれらの値が分散されていますか? 理由は私たちがパイプラインの実行時間を短縮するために数ヶ月前に要求していたので、この理論に基づいてcollectValues関数を削除しました。 これは、収集値を実行するために1時間かかっていたフェーズを回避するのに役立ちました。 しかし、私はcollectValuesを削除してから考えていました。私たちの値はノード全体に分散されるようになり、実行時間をより長くする必要がありました。 – shubh586

+0

変更したcollectValuesを削除した場合は、パイプラインの計画全体を(収集する必要がない場合)実行しないでください。 収集の動機は、同じキーのすべてのアイテムを1つの場所で処理できるようにすることです。必要がない場合は実行しないでください。 – ronhash

関連する問題