Hive处理小文件

1、输入中小文件过多 
主要是通过参数调节
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat :设置Inputformat。
set mapred.max.split.size=256000000:用来设置每个Map最大的输入大小。
set mapred.min.split.size.per.node=100000000:用来设置每个map中从一个node读取的最小数据量。合并的时候,会优先把一个node下的数据合并到一个split里,这样比较容易保证数据节点和计算节点本地行。
set mapred.min.split.size.per.rack=100000000:用来设置每个map中从一个机架上读取的最小数据量。如果没法保证一个split中数据尽量在一个node上,会尽量保证数据在一个机架上。


2,输出小文件过多
2.1 只有map,没有reduce的场景
对于部分简单的sql查询,可能只有map阶段,没有reduce阶段。如下面的sql:insert overwrite table t1  elect  c1 from  t2 ;


方法1:还是用CombineInputformat,通过让一个map处理更多的数据量,一个map的结果会写到一个输出里。
方法2:参数调节。会单独起一个mapreduce任务完成小文件合并,会额外浪费一些集群资源。
set hive.merge.mapfiles = true  : 该参数默认为true,故无需设置
set hive.merge.size.per.task = 256000000 :设置每个task合并的size
set hive.merge.smallfiles.avgsize=16000000 :当map的平均输出大小小于该值时,才会启动第二轮的merge任务。


2.2  既有map,也有reduce场景
set hive.merge.mapredfiles = true :该参数默认为false,需要手动设置
set hive.merge.size.per.task = 256000000 
set hive.merge.smallfiles.avgsize=16000000 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值