我正在阅读一些与 HDFS 架构和 Apache crunch PTable 相关的文档。根据我的理解,当我们生成 PTable 时,数据内部存储在 HDFS 中的数据节点之间。
这意味着,如果我在 HDFS 中有<K1,V1>,<K2,V2>,<K1,V3>,<K3,V4>,<K2,V5>
两个数据节点 D1 和 D2 的 PTable。假设每个数据节点都可以容纳 3 对。所以 D1 将举行<K1,V1>,<K2,V2>,<K1,V3>
, D2 将举行<K3,V4>,<K2,V5>
。
如果我在此 PTable 上执行 collectValues,我将在内部运行另一个 map-reduce 作业以从 PTable 获取这些值并生成成对的<K,Collection<V>>
. 所以最后我会有,<K1,Collection<V1,V3>>, <K2,Collection<V2,V5>> and <K3,Collection<V4>>
. 再次,这些对将分布到不同的数据节点。
现在,我怀疑 Collection 值(V1,V3 of K1)
将如何存储在生成的 PTable 中?这些数据是否也会分布在节点上,即,将
V1 存储在 D1 中
V3 存储在 D2 中
或者,V1 和 V3 将仅存储在一个节点中。
如果一个key的所有collection值都存储在一个节点中(非分布式),那么对于大数据集,每个key的collection值的处理会不会变慢?