hive合并小文件

小文件的危害

1.小文件过多,占用HDFS中namenode的内存

2.小文件过多,启动过多的maptask,maptask的启动和调度消耗很多内存和时间,启动时间比job执行时间还长

针对问题2的解决方案

1.输入合并小文件,减小map数

方式1:通过设置参数来合并小文件

set mapred.max.split.size=256000000; 每个MAP最大输入大小

set mapred.min.split.size.per.node=100 000 000; 一个节点上split的至少的大小,决定了多个datanode上的文件是否需要合并

set mapred.min.split.size.per.rack=100 000 000;一个交换机下split的至少的大小,决定了多个交换机上的文件是否需要合并

set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;执行map前进行小文件合并

方式2:通过sql来合并小文件

新建一个中间表,通过insert overwrite table tmp_xxx select * from xxx;来减少小文件

你可能感兴趣的:(hive)