避免mapper开启过多,导致导致的资源错配,
1、hive小文件问题
2、mr编程小文件问题
1、hive中的小文件问题
通过shell,产生100个小文件,目录 one100
[centos@s101 ~/one00]$ for((x=1;x<=100;x+=1)); do echo $x,tom$x,$x > $x.txt; done
建表
create table one100(id int,name string,age int)row format delimited fields terminated by ',';
load数据到表one100中
load data local inpath 'one00/*' into table one100;
配置:
set mapred.max.split.size;
默认256000000,每个map切片的最大值
set mapred.min.split.size.per.node;
默认1,每个节点切片的最小值
set mapred.min.split.size.per.rack;
每个机架切片的最小值
set hive.input.format;
默认org.apache.hadoop.hive.ql.io.CombineHiveInputFormat,hive输入格式
注意:第一个配置决定最终切片大小,间接决定mapper数,测试时,当以非本地模式运行时,才能看出实际有多少个map数
2、hadoop通过CombineTextinputFormat解决小文件问题
//设置组合文件输入格式,放置大量小文件。 job.setInputFormatClass(CombineTextInputFormat.class); CombineTextInputFormat.setMaxInputSplitSize(job , 200); //聚合文本输入个数的最大切片大小,单位字节
hadoop中默认是 TextInputFormat