Hive的十四种调优方式:

10 篇文章 0 订阅
8 篇文章 0 订阅

Hive的十四种调优方式:

第一种调优方式:fetch(hive可以避免MapReduce)对于hive可以简单地读取employee对应的储存目录下的文件,然后输出查询结果到控制台.修改hive.fetch.task.conversion默认是more,老版本为minimal,修改为more即可

第二种:本地模式(在hive输入数据量是非常小的情况下,可以通过本地模式处理单台机器上所有的任务,设置hive.exec.mode.local.auto)的值为true,在让hive在适当的时候自动启动这个优化,可以设置最大输入数据量为134217728,即128M,还有设置local mr的最大输入文件个数,当输入文件个数小于这个值是采用local mr的方式,默认是4

第三种:表的优化
1.小表join大表
将key相对分散,并且数据量小的表join的左边,这个可以有效减少内存溢出错误发生的几率,在进一步可以使用group让小的维度表(1000条以下的记录条数)先进内存,在map端完成reduce
2.多个表关联时,最好分拆成小段,避免大sql(无法控制中间job)
3.大表join大表
(1)过滤掉为空key的值
(2)空key转换,对应的数据不是异常数据是,必须要包含join的结果中,此时我们可以表a中key为空的字段赋一个随机的值,是的数据随机地分到不同的reduce上.

第四种:group的调优
	(1)是否在Map端进行聚合,默认为True
	set hive.map.aggr = true;
	(2)在Map端进行聚合操作的条目数目
    set hive.groupby.mapaggr.checkinterval = 100000;
	(3)有数据倾斜的时候进行负载均衡(默认是false)
    set hive.groupby.skewindata = true;
     (4)开启Mapjoin功能
     set hive.auto.convert.join=true;默认为true
     group By在默认情况下,map阶段同一key数据分发给一个reduce,当一个key数据过大时,就倾斜了.
     1)开启Map端聚合参数设置
     (1)是否在map端进行聚合,默认为true
     (2)在map端进行聚合操作的条目数目
     (3)有数据倾斜的时候,进行负载均衡

第五种:count distinct  尽量转换成  count  group  by来完成

第六种:避免笛卡尔积,任何时候都要避免join的时候后面的on条件无效或者不带on条件

第七种优化:使用分,列裁剪,不要使用select  *  如果查询的是分区表,一定要记得带上分区条件

第八种调优:动态的分区调整,就是以第一个表的分区规则,来对应第二个表的分区规格,将第一个表的所有分区,全部拷贝到第二个表中,第二个表在加载数据的时候,不需要指定分区了,直接用第一个表的分区即可.
(1)开启动态分区功能
(2)设置为非严格模式
(3)在所有执行mr的节点上,最大一共可以创建多少个动态分区
(4)在每个执行mr的节点上,最大可以创建多少个动态分区
(5)整个mr job中,最大可以创建多少个hdfs文件
(6)当有空分区生成是,是否抛出异常,一般不需要设置


第九种调优:设置hive输入数据的小文件的合并,设置map的个数以及reduce个数
1)	参数设置(下面的API属于hadoop低版本的API)
set mapred.max.split.size=112345600;
set mapred.min.split.size.per.node=112345600;
set mapred.min.split.size.per.rack=112345600;
set hive.input.format= org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
对于一个文件,大小为120M是,但是包含几千万的记录,如果用1个map去处理这个任务,肯定比较耗时,这种情况下,我们要考虑将这个一个文件合理拆分成多个,这样就可以用多个map去完成,对于map 的数量控制需要按实际情况去处理.是大数据量利用合适的map数,使单个map任务处理合适的数据量
2)reduce个数
调整reduce个数方法一
每个reduce处理的数据量默认是256MB
每个任务最大的reduce数默认是1009
计算reduce数的公式
n=min(reduce数,总输入数据量 / 参数1每个reduce处理的默认数据量)
调整reduce个数方法二
在hadoop的mapred-default.xml文件中修改
设置每个job的reduce个数
set mapreduce.job.reduces=15;
处理大数据量利用合适的reduce数,使单个reduce任务处理数据量大小要合适

第十种调优:hive任务的并行执行,设置hive.exec.parallel值为true,就可以开启并发执行,但在共享集群汇总,如果job中并行阶段增多,那么集群的利用率就会增加.set.hive.exec.parallel.thread.number=16;同一个生气了允许醉的并行度

第十一种调优:设置hive的严格模式 set hive.mapred.mode=strict
1)对于分区表,除非where语句汇总含有分区字段过滤条件来限制范围,否则不允许执行
2)对于使用了order by语句的查询,要求必须使用limit语句
3)限制笛卡尔积的查询

第十二种调优:设置jvm的重用    set
jvm重用可以使得jvm实例在同一个job中重新使用N次
mapred.job.reuse.jvm.num.tasks=10;

第十三种调优:关闭推测执行

第十四种调优:压缩和文件存储格式,压缩使用snappy 文件存储格式使用ORC
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值