Hive调优之 数据倾斜
程序员文章站
2022-05-01 13:03:17
...
解决方案:
小文件进行合并
不是map数越多越好。比如:一个任务有很多小文件(远远小于块大小128m),则每个小文件也会被当做一个块,用一个map任务来完成,而一个map任务启动和初始化的时间远远大于业务处理的时间,就会造成很大的资源浪费。而且,同时可执行的map数是受限的。
系统默认的格式CombineHiveInputFormat具有对小文件进行合并的功能。
hive-site.xml:
<property>
<name>hive.input.format</name>
<value>org.apache.hadoop.hive.ql.io.CombineHiveInputFormat</value>
</property>
在map执行前合并小文件,减少map数:
set hive.input.format= org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
复杂文件增加Map数
比如有一个127m的文件,正常会用一个map去完成,但这个文件只有一个或者两个小字段,却有几千万的记录,如果map处理的逻辑比较复杂,用一个map任务去做,肯定也比较耗时。
当input的文件都很大,任务逻辑复杂,map执行非常慢的时候,可以考虑增加Map数,来使得每个map处理的数据量减少,从而提高任务的执行效率。
通过设置最大切片值来改变map数。
合理设置Reduce数
reduce个数默认是-1,可以在hadoop的mapred-default.xml文件中,设置每个job的Reduce个数。
set mapreduce.job.reduces = 15;
上一篇: hive常见问题2
下一篇: [Spark共同好友查找]