我想有效地对大数据集进行排序(即使用自定义分区器,如下所述:MapReduce 排序算法如何工作?),但我想用 hive 来做。
但是,Hive 手册指出“order by”是由单个 reducer 执行的。这让我感到惊讶,因为 pig 确实实现了与文章类似的东西 - pig impl
我是否遗漏了什么,或者蜂巢根本不是这项工作的合适锤子?
我想有效地对大数据集进行排序(即使用自定义分区器,如下所述:MapReduce 排序算法如何工作?),但我想用 hive 来做。
但是,Hive 手册指出“order by”是由单个 reducer 执行的。这让我感到惊讶,因为 pig 确实实现了与文章类似的东西 - pig impl
我是否遗漏了什么,或者蜂巢根本不是这项工作的合适锤子?
我认为 Hive 不是适合这项工作的工具。至少现在。它是为用作 OLAP/Report 工具而构建的,并且没有针对生成大型结果数据集进行优化,因为大多数分析查询会生成相对较小的结果集。结果-他们具有良好的TOP N能力,但总订单不佳。
以防万一您以前没有遇到过 - 我建议您查看 Hadoop 的 terasort 示例,该示例专门用于使用 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 框架在数据输入减速器之前完成的。