我有 250 万行数据和 6 列。在配置单元上执行查询时,我有时会得到 1 份工作,有时会得到 2 份工作。然而,这在我看来完全是随机的。 hive 为查询运行了多少 map reduce 作业的度量是什么?
我很感激你的回答!
更新
查询:
SELECT r.title, r.rank FROM ratings r JOIN genres g ON r.title=g.title WHERE g.genre='Action' ORDER BY r.rank DESC LIMIT 1;
-> 2 份工作
select distinct(genre) from genres
-> 1 份工作
最佳答案
每个作业通常都有一个 map 和一个 reduce 部分。
查询引擎决定将生成多少作业以及每个作业在其自己的 map 和 reduce 部分中会发生什么。
总会有一个优化,以尝试执行尽可能少的作业。
执行第一个查询的(非常)简化示例:
第一项工作:映射器将读取两个表 r
和 g
应用过滤器 g.genre='Action'
然后,reducer 将从映射器(由连接键 title
分配)获取数据并执行连接。
第二个作业:第一个作业的中间输出是现在您要求对其进行排序的表的连接数据,因此映射器将从最后一个阶段读取即时输出,单个(!)reducer 将从映射器获取所有数据, reducer 会对这些数据进行排序。
要确定每个查询生成多少阶段(作业),您可以使用 EXPLAIN
命令如解释 here
关于database - 决定查询使用多少 map reduce 作业的因素是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20456928/