4)针对Hive表小文件数合并处理(CombineFileInputFormat)1、输入阶段合并
- 需要更改Hive的输入文件格式即参hive.input.format,默认值是org.apache.hadoop.hive.ql.io.HiveInputFormat我们改成org.apache.hadoop.hive.ql.io.CombineHiveInputFormat。
- 这样比起上面对mapper数的调整,会多出两个参数是mapred.min.split.size.per.node和mapred.min.split.size.per.rack,含义是单节点和单机架上的最小split大小。如果发现有split大小小于这两个值(默认都是100MB),则会进行合并。具体逻辑可以参看Hive源码中的对应类。
- 直接将hive.merge.mapfiles和hive.merge.mapredfiles都设为true即可,前者表示将map-only任务的输出合并,后者表示将map-reduce任务的输出合并,Hive会额外启动一个mr作业将输出的小文件合并成大文件。
- 另外,hive.merge.size.per.task可以指定每个task输出后合并文件大小的期望值,hive.merge.size.smallfiles.avgsize可以指定所有输出文件大小的均值阈值,默认值都是1GB。如果平均大小不足的话,就会另外启动一个任务来进行合并。
HDFS小文件过多问题与处理实战操作就先到这里了,其实企业里基本上都是通过程序或者脚本去处理,这里只是通过命令去演示,其实原理都一样,只是客户端不一样,后面有时间单独会讲程序或者脚本去处理小文件,有疑问的小伙伴欢迎给我留言哦~
,