Apache Crunch PTable collectValues如何在内部工作

时间:2016-04-27 12:45:05

标签: hadoop apache-crunch

我正在阅读一些与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中?这些数据是否也将分布在节点上,即

  • V1存储在D1

  • V3存储在D2

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

如果密钥的所有集合值都存储在一个节点(未分发)中,那么对于大型数据集,对每个密钥的收集值的处理是否会变慢?

1 个答案:

答案 0 :(得分:0)

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