我正在浏览一些与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存储在D1中
  • V3被存储在D2中

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

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

    最佳答案

    同一键的所有值都将在一个节点中。这通常是map reduce的概念-而不是紧缩。
    原因是您希望将所有项目放在一个地方-这是您要实现的本地化。

    关于hadoop - Apache Crunch PTable collectValues如何在内部工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36890242/

    10-12 23:47