我们实际上是在hadoop数据上进行未排序的连接吗?

时间:2015-01-23 17:53:08

标签: apache-pig apache-spark

  1. 两个大小为NM的数据集的原始联接为O(N*M)
  2. 两个数据集的排序为O(N*log(N)+M*log(M))
  3. 加入排序数据集是O(N+M)
  4. ERGO :对未排序的数据进行连接(假设数据集的大小不是指数不平衡的:M>>log(N)N>>log(M))是对{{{{{{ 3}}

    与此同时,TAOCPpig似乎都没有考虑过它。 他们甚至没有提到通过密钥对数据进行分区的简单想法,这会将节点间通信减少到0。

    我在这里缺少什么?为什么忽略这个问题?

    加入确实需要花费大量时间,所以加快速度并不是一个疯狂的想法。 (同样适用于group by,btw)。

    PS。我知道连接是以愚蠢的方式完成,但是通过排序。但是,这种方式是每次我都会加入;我不能对集合进行排序,然后让所有未来的连接从中受益。请注意,排序比排序连接更昂贵!请注意,传统的关系数据库很长一段时间都有这样的索引概念!

1 个答案:

答案 0 :(得分:0)

MapReduce作业的高级流程是Map - >随机 - >排序 - >减少。

MapReduce连接通常在reduce阶段完成,此时数据已经被排序。