私は、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つのノード(分散されていない)に格納されている場合、大きなデータセットの場合、各キーの収集値の処理が遅くなりませんか?
@Ronにお返事ありがとうございます。 同じノード内の大きな値のデータセットの処理は、より効率的ではないか、またはそれらの値が分散されていますか? 理由は私たちがパイプラインの実行時間を短縮するために数ヶ月前に要求していたので、この理論に基づいてcollectValues関数を削除しました。 これは、収集値を実行するために1時間かかっていたフェーズを回避するのに役立ちました。 しかし、私はcollectValuesを削除してから考えていました。私たちの値はノード全体に分散されるようになり、実行時間をより長くする必要がありました。 – shubh586
変更したcollectValuesを削除した場合は、パイプラインの計画全体を(収集する必要がない場合)実行しないでください。 収集の動機は、同じキーのすべてのアイテムを1つの場所で処理できるようにすることです。必要がない場合は実行しないでください。 – ronhash