我有250万行数据和6列。在hive上执行查询时,有时会有1个工作,有时会有2个工作。然而,这在我看来是完全随机的。什么是针对配置单元的措施,它为查询运行了多少个地图减少作业?
感谢您的回答!
更新
查询:
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个工作
答案 0 :(得分:1)
每个作业通常都有地图和缩小部分 查询引擎决定将在其自己的地图中生成多少个作业以及每个作业中将发生什么,并减少部分 在某些方面总会有优化尝试并尽可能少地执行任务。
执行第一个查询的(非常)简化示例:
第一份工作:Mappers将同时阅读表r
和g
应用过滤器g.genre='Action'
,然后,reducers将从映射器获取数据(由连接键title
分发)并执行加入。
第二个作业:第一个作业的中间输出是表格的连接数据,现在您要求它订购它,因此映射器将读取最后一个阶段的中间输出,单个(!)reducer将从映射器获取所有数据, reducer将对这些数据进行排序。
要确保每个查询生成多少个阶段(作业),您可以使用EXPLAIN
命令here