欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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数。
Hive调优之 数据倾斜

合理设置Reduce数

reduce个数默认是-1,可以在hadoop的mapred-default.xml文件中,设置每个job的Reduce个数。

set mapreduce.job.reduces = 15;
相关标签: # Hive