我想对一个大数据集进行高效排序(即使用自定义分区器,就像这里描述的那样:MapReduce排序算法是如何工作的?),但是我想用hive来做。
然而,Hive手册指出"order by"是由单个reducer执行的。这让我很惊讶,因为pig确实实现了与本文类似的东西——pig impl
是我错过了什么,还是蜂巢根本不适合这项工作?
我认为Hive不适合这项工作。至少现在是这样。它被构建为OLAP/Report工具,因此没有被优化为生成大型结果数据集,因为大多数分析查询生成相对较小的结果集。因此,他们有很好的TOP N能力,但总订单不好。
如果您以前没有遇到过,我建议您查看一下Hadoop的terassort示例,该示例专门针对使用MR. http://hadoop.apache.org/common/docs/r0.20.1/api/org/apache/hadoop/examples/terasort/package-summary.html
在Hive中不可能使用多个reducer来进行总排序。它还没有实现- https://issues.apache.org/jira/browse/HIVE-1402 .
如果你想要高效的总排序,使用pig比编写自定义MR作业更容易。
Hive生成MapReduce作业来执行查询。在您的特殊情况下,实际的排序是由Hadoop MapReduce框架在数据被输入到reducer之前完成的。