我正在浏览一些与HDFS架构和Apache紧缩PTable相关的文档。根据我的理解,当我们生成PTable时,数据会内部存储在HDFS中的Data节点之间。
这意味着,如果我有带有<K1,V1>,<K2,V2>,<K1,V3>,<K3,V4>,<K2,V5>
的PTable和HDFS中的两个数据节点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>>
。同样,这些对将被分配到不同的数据节点。
现在,我怀疑如何将Collection值(V1,V3 of K1)
存储在生成的PTable中?该数据也将分布在各个节点上吗,即
或者,V1和V3仅存储在一个节点中。
如果密钥的所有收集值都存储在一个节点(未分布)中,那么对于大型数据集,对每个密钥的收集值的处理是否会变慢?
最佳答案
同一键的所有值都将在一个节点中。这通常是map reduce的概念-而不是紧缩。
原因是您希望将所有项目放在一个地方-这是您要实现的本地化。
关于hadoop - Apache Crunch PTable collectValues如何在内部工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36890242/