我正在阅读一些与hdfs体系结构和apachecrunch ptable相关的文档。根据我的理解,当我们生成ptable时,数据是跨hdfs中的数据节点内部存储的。
这意味着,如果我能接受 <K1,V1>,<K2,V2>,<K1,V3>,<K3,V4>,<K2,V5>
以及hdfs中的两个数据节点d1和d2。假设每个数据节点有能力容纳3对。所以d1会保持 <K1,V1>,<K2,V2>,<K1,V3>
d2将保持 <K3,V4>,<K2,V5>
.
如果我在这个ptable上收集值,我将在内部运行另一个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条答案
按热度按时间piv4azn71#
同一个键的所有值都将位于一个节点中。一般来说,这是map reduce的概念,而不是crunch的概念。理由是你希望所有的项目都在一个地方-这就是你想要实现的本地化。