为什么要合并小文件
1.每个文件在NameNode中的存储信息大约占150字节,会影响NameNode存储其他有用的文件信息,因为NameNode的容量是固定的
2.如果文件过小,每个文件的大小远低于128M,每个文件作为一个分片输入,就会对应相应数量的MapTask,浪费资源,效率低下,因为MapTask的开启也是耗时的
如果输入是小文件,需要合并输入的话
hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
如果是合并输出的大量小文件的话
Map输出合并(默认就是true,可以不用设置):
hive.merge.mapfiles=true
Reduce输出合并:
hive.merge.mapredfiles=true
合并文件的大小:
hive.merge.size.per.task=256000000