hive参数调优汇总

参考:http://blog.csdn.net/beckham008/article/details/23741151?utm_source=tuicool&utm_medium=referral

1.设置合理solt数

mapred.tasktracker.map.tasks.maximum 
每个tasktracker可同时运行的最大map task数,默认值2。

mapred.tasktracker.reduce.tasks.maximum
每个tasktracker可同时运行的最大reduce task数,默认值1。

2.配置磁盘块
mapred.local.dir
map task中间结果写本地磁盘路径,默认值${hadoop.tmp.dir}/mapred/local。
可配置多块磁盘缓解写压力。当存在多个可以磁盘时,Hadoop将采用轮询方式将不同的map task中间结果写到磁盘上。

3.配置RPC Handler数
mapred.job.tracker.handler.count
jobtracker可并发处理来自tasktracker的RPC请求数,默认值10。

4.配置HTTP线程数
tasktracker.http.threads
HTTP服务器的工作线程数,用于获取map task的输出结果,默认值40。

5.启用批调度

6.选择合适的压缩算法
Job输出结果是否压缩
mapred.output.compress 
是否压缩,默认值false。
mapred.output.compression.type
压缩类型,有NONE, RECORD和BLOCK,默认值RECORD。
mapred.output.compression.codec
压缩算法,默认值org.apache.hadoop.io.compress.DefaultCodec。

map task输出是否压缩
mapred.compress.map.output
是否压缩,默认值false
mapred.map.output.compression.codec
压缩算法,默认值org.apache.hadoop.io.compress.DefaultCodec。

7.设置失败容忍度
mapred.max.map.failures.percent
例如:set mapred.max.map.failures.percent=30; 
作业最多允许失败的map task比例,默认值0。
mapred.max.reduce.failures.percent
作业最多允许失败的reduce task比例,默认值0。
mapred.map.max.attempts
一个map task的最多重试次数,默认值4。
mapred.reduce.max.attempts
一个reduce task的最多重试次数,默认值4。

8.设置跳过坏记录
mapred.skip.attempts.to.start.skipping
当任务失败次数达到该值时,启用跳过坏记录功能,默认值2。
mapred.skip.out.dir
检测出的坏记录存放目录,默认值为输出目录的_logs/skip,设置为none表示不输出。
mapred.skip.map.max.skip.records
map task最多允许的跳过记录数,默认值0。
mapred.skip.reduce.max.skip.groups
reduce task最多允许的跳过记录数,默认值0。

9.配置jvm重用
mapred.job.reuse.jvm.num.tasks 
一个jvm可连续启动多个同类型任务,默认值1,若为-1表示不受限制。

10.配置jvm参数
mapred.child.java.opts
任务启动的jvm参数,默认值-Xmx200m,建议值-XX:-UseGCOverheadLimit -Xms512m -Xmx2048m -verbose:gc -Xloggc:/tmp/@[email protected]

11. map task调优
io.sort.mb
默认值100M
io.sort.record.percent
默认值0.05
io.sort.spill.percent
默认值0.80

12.reduce task调优
io.sort.factor
默认值10
mapred.reduce.parallel.copies
默认值5



=================================================================================
  1 .设置任务名称,方便查找监控 
  SET mapred.job.name=P_DWA_D_IA_S_USER_PROD; 
  
 
  2 .决定是否可以在 Map 端进行聚合操作 
  set hive.map.aggr=true; 
  
 
  3 .有数据倾斜的时候进行负载均衡 
  set hive.groupby.skewindata=true; 
  
 
  H iveQL 去重操作 
  和 SQL一样,HiveQL中同样支持DISTINCT操作,如下示例: 
  ( 1) SELECT count(DISTINCT uid) FROM log 
  ( 2) SELECT ip, count(DISTINCT uid) FROM log GROUP BY ip 
  ( 3) SELECT ip, count(DISTINCT uid, uname) FROMlog GROUP BY ip 
  ( 4) SELECT ip, count(DISTINCTuid), count(DISTINCT uname) FROMlog GROUP BY ip 
  
 
  当 我们使用Hive QL中的去重关键字DISTINCT时,需要注意的一点是: 
  在 多个列上进行的去重操作与hive环境变量hive.groupby.skewindata存在关系。 
  当 hive.groupby.skewindata=true时,hive不支持多列上的去重操作,并报错: 
  E rror in semantic analysis: DISTINCT on different columns notsupported with skew in data.  
  注 意:上面示例中的(3)不属于多列上的DISTINCT操作。 
  
 
  G roup By 语句 
  • Map 端部分聚合:
  • 并不是所有的聚合操作都需要在 Reduce 端完成,很多聚合操作都可以先在 Map 端进行部分聚合,最后在 Reduce端得出最终结果。
  • 基于 Hash
  • 参数包括:
  • hive.map.aggr = true 是否在 Map 端进行聚合,默认为True
  • hive.groupby.mapaggr.checkinterval =100000 在 Map 端进行聚合操作的条目数目
  • 有数据倾斜的时候进行负载均衡
  • hive.groupby.skewindata = false
  • 当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group ByKey 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce中),最后完成最终的聚合操作。
  4 .每个MapReduce作业的任务可以申请的内存资源数量 
  SET mapreduce.map.memory.mb=2048; 
  每 个MapReduce作业的map任务可以申请的内存资源数量 
  SET mapreduce.reduce.memory.mb=8192; 
  每 个MapReduce作业的reduce任务可以申请的内存资源数量 
  
  5.对于简单的不需要聚合的类似SELECT <col> from <table> LIMIT n语句,不需要起MapReduce job,直接通过Fetch task获取数据
set hive.fetch.task.conversion=more;
  
合并小文件
6. hive.merge.mapredfiles(默认为false)
正常的map-reduce job后,是否启动merge job来合并reduce端输出的结果,建议开启

set mapred.max.split.size=524288000;
set mapred.min.split.size.per.node=471859200;
set mapred.min.split.size.per.rack=471859200;
set hive.hadoop.supports.splittable.combineinputformat=true;     
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; 

注:第四个参数存在其他参数才能生效
  

7.设置参数不走map-reduce
set hive.fetch.task.conversion=more;
 
8.hive动态分区参数设置
ive.exec.dynamic.partition=true
默认值:false
描述:是否允许动态分区
hive.exec.dynamic.partition.mode=nonstrict
默认值:strict
描述:strict是避免全分区字段是动态的,必须有至少一个分区字段是指定有值的
设置如下参数配置动态分区的使用环境:
hive.exec.max.dynamic.partitions.pernode=100
默认值:100
描述:each mapper or reducer可以创建的最大动态分区数
hive.exec.max.dynamic.partitions=1000
默认值:1000
描述:一个DML操作可以创建的最大动态分区数
hive.exec.max.created.files=100000
默认值:100000
描述:一个DML操作可以创建的文件数

  =============================================================================================================

hive.exec.reducers.bytes.per.reducer
•默认值: 1000000000 (1G)
  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值