当前位置:   article > 正文

Hive参数与优化_hive alter table concatenate

hive alter table concatenate

参考资料:

Hive SQL 参数与性能调优

小文件优化

小文件过多的影响:

(1)小文件过多会导致namenode元数据特别大,占用过多内存,严重影响HDFS性能

(2)对Hive来说,在进行查询时,每个小文件都会当成一个块,启动一个Map任务来完成。如果文件过多的话,Map任务启动和初始化的时间可能远远大于逻辑处理的时间,就会造成很大的资源浪费。同时可执行的Map数量是受限的。

解决方法:

1. 使用 hive 自带的 concatenate 命令,自动合并小文件

  1. # 对于非分区表
  2. alter table A concatenate;
  3. # 对于分区表
  4. alter table B partition(day=20201224) concatenate;

注意:
1、concatenate 命令只支持 RCFILE 和 ORC 文件类型。
2、使用concatenate命令合并小文件时不能指定合并后的文件数量,但可以多次执行该命令。
3、当多次使用concatenate后文件数量不在变化,这个跟参数 mapreduce.input.fileinputformat.split.minsize=256mb 的设置有关,可设定每个文件的最小size。

2. 调整参数减少Map数量

设置map输入合并小文件的相关参数:

  1. # 执行Map前进行小文件合并
  2. # CombineHiveInputFormat底层是 Hadoop的 CombineFileInputFormat 方法
  3. # 此方法是在mapper中将多个文件合成一个split作为输入
  4. set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; -- 默认
  5. # 每个Map最大输入大小(这个值决定了合并后文件的数量)
  6. set mapred.max.split.size=256000000; -- 256M
  7. # 一个节点上split的至少的大小(这个值决定了多个DataNode上的文件是否需要合并)
  8. set mapred.min.split.size.per.node=100000000; -- 100M
  9. # 一个交换机下split的至少的大小(这个值决定了多个交换机上的文件是否需要合并)
  10. set mapred.min.split.size.per.rack=100000000; -- 100M

设置map输出和reduce输出进行合并的相关参数:

  1. #设置map端输出进行合并,默认为true
  2. set hive.merge.mapfiles = true;
  3. #设置reduce端输出进行合并,默认为false
  4. set hive.merge.mapredfiles = true;
  5. #设置合并文件的大小
  6. set hive.merge.size.per.task = 256*1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/977017
推荐阅读
相关标签
  

闽ICP备14008679号