推荐
hive在什么情况下只能有一个reduce运行
有时不管怎么设置调整reduce个数的参数,任务中一直都只有一个reduce任务,此时所有数据都发往一个reduce会导致任务执行缓慢甚至失败,因此实际工作过程中要尽量避免这种情况的发生.
有以下情况会导致只有一个reduce执行任务:
1 使用udtf聚集函数却没带group by
比如
select count(id) from temp01;
最常见的情况是使用count distinct去重,在hive中要使用group by来代替count distinct去重.
2 用了Order by.
order by为了执行排序过程会将所有的结果数据分发到同一个Reducer中进行处理,改善方法是使用limit语句来缩短运行时间
3 笛卡尔积
使用join没带关联条件就会发生笛卡尔积,改善方法是加上on条件,注意hive的join on中只能用and而不能用or
本文总结了Hive调优手段,分析了导致只有一个Reduce任务执行的原因,包括使用UDTF未带GROUP BY、使用ORDER BY及笛卡尔积等情况,并提供了解决方案。
2525





