Hive优化

Map和Reduce
启动和初始化map和reduce都会花费资源和时间
map个数,取决于切片数量
1当输入数据量少于参数(128m),只有一个map,不用调整,
若该表字段少,行数多,可以适当调高map数提高效率。
2若map数较多,查看到很多split大小是小于128,有小文件情况,这个时候除了jvm重启,考虑减少map数量参数设置。通过减少map数,减少资源启动优化。

reduce数
reduce,有多少个reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题;
使大数据量利用合适的reduce数;使单个reduce任务处理合适的数据量
特殊情况
hql导致只有一个reduce
order by
count(distinct )
笛卡尔积
或sql中限制分区count()但没有使用group by
这些情况reduce只有一个需要尽量避免。

hive系统会自动估算reduce
实际操作很少对reduce调整,无法准确调整出性能优化,如出现oom,内存溢出这种情况会适当提高reduce数

合理设置map个数
建议值
128MB~512MB/Task
调大map个数
调小mapred.max.split.size
调小map个数
调大mapred.max.split.size

合理设置reduce个数
reducers = Math.min(maxReducers, totalInputFileSize/bytesPerReducer)
maxReducers由参数hive.exec.reducers.max设置,默认999
bytesPerReducer由参数hive.exec.reducers.bytes.per.reducer 设置,默认1G

小文件合并——输入合并
set hive.input.format = org.apache.hadoop.hive.ql.io.combinehiveinputformat;
set mapred.max.split.size = 536870912; //512MB
set mapred.min.split.size = 134217728; //128MB

hive中在给旧表新增字段的时候,使用cascade和不使用cascade的区别:
增加列不带CASCADE,之前已存在的分区,该字段返回NULL,即使是使用OVERWRITE重新覆盖分区,仍为空。
如果添加列时增加关键字CASCADE,旧分区overwrite覆盖时会有数据

set livy.session.conf.spark.hadoop.hive.exec.dynamic.partition=true;
set livy.session.conf.spark.hadoop.hive.exec.dynamic.partition.mode=nonstrict;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值