我想有效地对大数据集进行排序(即使用自定义分区程序,如此处所述:How does the MapReduce sort algorithm work?),但我想用hive来完成。
但是,Hive手册指出“order by”由单个reducer执行。 这让我感到惊讶,因为猪确实实现了类似于文章的内容 - pig impl
我是否遗漏了某些东西,或者说蜂巢根本不适合这份工作?
答案 0 :(得分:2)
我认为Hive不适合这项工作。至少现在(是。它被构建为用作OLAP /报告工具,并且其未被优化以产生大的结果数据集,因为大多数分析查询产生相对小的结果集。结果 - 他们具有良好的TOP N能力,但不是很好的总订单。
如果您之前没有遇到过 - 我建议您查看Hadoop的terasort示例,该示例专门用于使用MR以最佳方式对大型数据集进行排序。 http://hadoop.apache.org/common/docs/r0.20.1/api/org/apache/hadoop/examples/terasort/package-summary.html
答案 1 :(得分:1)
在Hive中进行总排序不可能使用多个Reducer。它尚未实施 - https://issues.apache.org/jira/browse/HIVE-1402。
如果您想要有效的总排序,那么使用pig会更容易,而不是编写自定义MR作业。
答案 2 :(得分:0)
Hive生成用于执行查询的MapReduce作业。在您的特定情况下,实际排序由Hadoop MapReduce框架完成,然后将数据输入到reducer中。