0

我正在阅读一些与 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值的处理会不会变慢?

4

1 回答 1

0

同一键的所有值都将在一个节点中。这是一般地图减少的概念 - 而不是紧缩。原因是您希望将所有项目集中在一个地方——这就是您想要实现的本地化。

于 2017-03-03T11:18:03.687 回答