ApachePig—我们真的在hadoop数据上进行未排序的连接吗?

iklwldmw  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(189)

两个大小的数据集上的原始连接 N 以及 MO(N*M) .
两个数据集的排序都是 O(N*log(N)+M*log(M)) 已排序数据集上的联接为 O(N+M) 因此:对未排序的数据执行连接(假设数据集的大小不是指数不平衡的: M>>log(N) 以及 N>>log(M) )是对道普的亵渎。
同时,Pig和Spark似乎都没有想到这一点。他们甚至没有提到按键对数据进行分区的简单想法,这会将节点间通信减少到0。
我错过了什么?为什么这个问题被忽视了?
连接确实需要相当长的时间,所以加速连接并不是一个疯狂的想法(同样的道理 group by ,顺便说一句)。
另外,我知道连接不是用愚蠢的方式完成的,而是用那种方式。但是,每次我执行连接时都会执行这种排序;我不能对集合进行一次排序,然后让所有将来的联接都从中受益。请注意,排序比排序后的联接更昂贵!请注意,传统的关系数据库早就有了索引的概念!

db2dz4w8

db2dz4w81#

mapreduce作业的高级流是map->shuffle->sort->reduce。
mapreduce连接通常在reduce阶段完成,此时数据已经被排序。

相关问题