前面我们介绍过了,如何控制map 的数量,以及为什么要控制map 的数量,具体可以参考前面的文章,Hive进阶之优化map任务数量,最终我们得到了一个结论,那就是使大数据量利用合适的map数;使单个map任务处理合适的数据量,这个就可以作为我们调节map 任务数的原则。
今天我们看一下如何优化 reduce 任务数量
为什么要控制reduce 数量其实为什么要控制reduce 数量和为什么要控制map 数量是一样的,reduce 数量太少,每个reducer 处理的数据太多就会导致任务运行太慢,而且还会经常出现数据倾斜。
同理如果reduce 数量太多,就会导致每个reducer 的启动时间远大于数据处理时间,从而导致资源浪费,也就是reduce的个数设置其实对执行效率有很大的影响:
- 如果reduce太少: 如果数据量很大,会导致这个reduce异常的慢,从而导致这个任务不能结束,也有可能会OOM
- 如果reduce太多: 产生的小文件太多,合并起来代价太高,namenode的内存占用也会增大。
我们每次执行hive的hql时,shell里都会提示一段话,其实从这段话里面我们就能大致知道如何调节reduce的数量
Number of reduce tasks not s
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)