Apache Crunch PTable collectValues 在内部是如何工作的

How does Apache Crunch PTable collectValues work internally

我正在浏览一些与 HDFS 架构和 Apache crunch PTable 相关的文档。根据我的理解,当我们生成 PTable 时,数据在内部存储在 HDFS 的数据节点中。

这意味着,如果我在 HDFS 中有带 <K1,V1>,<K2,V2>,<K1,V3>,<K3,V4>,<K2,V5> 的 PTable 和两个数据节点 D1 和 D2。 假设每个数据节点有能力容纳 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>>。这些对将再次分布到不同的数据节点。

现在,我怀疑集合值 (V1,V3 of K1) 将如何存储在生成的 PTable 中?这些数据是否也会分布在节点之间,即 will

或者,V1和V3只存储在一个节点中。

如果一个key的所有集合值都存储在一个节点中(非分布式),那么对于大数据集,每个key的集合值的处理不会变慢吗?

同一个键的所有值将在一个节点中。这是 map reduce 的一般概念——而不是 crunch 的概念。 原因是您希望将所有项目放在一个地方 - 这就是您想要实现的本地化。