hive的调优(笔记四)

本文详细介绍了如何对Hive执行语句进行优化,包括开启本地模式、设置map和reduce任务数量、join原则等,并探讨了不同文件存储格式如textfile、sequencefile、rcfile、orcfile和parquet的特性及压缩方式,提供了实际测试数据以对比各种格式的性能表现。
摘要由CSDN通过智能技术生成


一、对执行语句进行调优

1.开启本地模式,对语句执行时间进行优化

set hive.exec.mode.local.auto=true;

2.测试fetch,对语句执行时间进行优化

①set hive.fetch.task.conversion=none;//都转为mr

②set hive.fetch.task.conversion=minimal;//直接获取数据,不
转为mr(但是filter会转化(where子句))

③set hive.fetch.task.conversion=more;//直接查,不走mr(是简单查询,没有函数,没有orderby)

3.执行计划

explain (extended|dependency|authorization) select * from hive_produce;

extended:显示抽象语法树,详细执行计划

dependency:要依赖的输入数据,分为两部分

authorization:这个语句用来表达当前用户对哪些inputs有读操作,对哪些outputs有写操作

4.设置map任务数量

任务数量主要决定因素:input文件总个数,input的文件大小,集群设置的文件块大小

//设置最大切面值为100个字节,观察map任务数

set mapreduce input.fileinputformat split maxsize=100;

5.设置reduce个数

①计算reduece个数
Ⅰ.每个Reduce处理的数据量默认是256MB
hive.exec.reducers.bytes.per.reducer=256000000
Ⅱ.每个任务最大的reduce数,默认是1009
hive.exec.reducers.max=1009
Ⅲ.计算reducer数的公式
N=min(参数2,总输入数据量/参数1)

②.调整reduce个数
在Hadoop的mapred-default.xml文件中修改,设置每个job的Reduce数量
set mapreduce.job.reduces=15;
③reduce个数并不是越多越好

有几个reduce就会有几个输入文件,过多的启动和初始化reduce会消耗时间和资源

6.join原则

尽量采用小表join大表
多个表关联时,最好分拆成小段,避免大sql(无法控制中间Job)
大表Join大表的时,主要要考虑空值情况。

7.小文件合并:

默认值 : HiveInputFormat,没有合并,只能文本操作
set hive.input.format
=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

8. jvm重用:

jvm重用: set mapred.job.reuse.jvm.num.tasks=400;

9. 开启 mapjoin

set hive.auto.convert.join = true;

10.空值处理

  1. 过滤掉空值( 先判断空值的占比 )
  2. 生成随机数

二、对文件存储格式进行调

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值