栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

hive调优学习笔记

hive调优学习笔记

大表 、 大表 SMB Join

SMB Join Sort Merge Bucket Join

测试大表直接 JOIN
insert overwrite table jointable
select b.id, b.t, b.uid, b.keyword, b.url_rank, b.click_num, b.click_url
from bigtable a join bigtable 2 b
on a .id = b .id

测试结果 
Time taken: 72.289 seconds

创建分桶表 1
create table bigtable_buck1(
id bigint,
t bigint,
uid string,
keyword string,
url_rank int,
click_num int,
click_url string)
clustered by(id)
sorted by(id)
into 6 buckets
row format delimited fields terminated by t';
load data local inpath '/opt/module/data/bigtable' into table
bigtable_buck1;
创建分桶表 2 分桶数和第一张表的分桶数为倍数关系
create table bigtable_buck2(
id bigint,
t bigint,
uid string,
keyword string,
url_rank int,
click_num int,
click_url string)
clustered by(id)
sorted by(id)
into 6 buckets
row format delimited fields terminated by ' t';
load data local inpath '/opt/module/data/bigtable' into table
bigtable_buck2;
设置参数
#强制在Map端做bucket join,强制hive的reducer数目为分桶数
set hive.optimize.bucketmapjoin = true;
#强制在Map端做Sorted bucket Join
set hive.optimize.bucketmapjoin.sortedmerge = true;
set
hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;

测试结果
Time taken: 34.685 seconds

insert overwrite table jointable
select b.id, b.t, b.uid, b.keyword, b.url_rank, b.click_num, b.click_url
from b igtable_buck1 s
join bigtable_buck2 b
on b.id = s.id;
数据倾斜 单表数据倾斜优化 使用参数

当任务中存在GroupBy操作同时聚合函数为 count或sum,可以设置参数来处理数据倾斜

#是否在 Map 端执行聚合 
set hive.map.aggr = true;
#在 Map 端进行聚合操作的条目数目
set hive.groupby.mapaggr.checkinterval = 100000;
#有数据倾斜的时候进行负载均衡
set hive.groupby.skewindata = true;

会生成两个MR Job,作用等同于通过随机数打散(distributer by rand((x))

多个Key同时导致数据倾斜,增加Reduce个数 Join数据倾斜优化 使用参数
#join的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
set hive.skewjoin.key = 100000;
#如果是join过程出现倾斜应该设置为true
set hive.optimize.skewjoin = false;

如果开启了,在Join过程中Hive会将计数超过阈值hive.skewjoin.key(默认100000)的倾斜key对应的行临时写进文件中,然后再启动另一个job做map join生成结果。通过hive.skewjoin.mapjoin.map.tasks参数还可以控制第二个job的mapper数量,默认10000。

set hive.skewjoin.mapjoin.map.tasks=10000;

该参数优化原理等同于将热点key单独拎出来计算,再与其它计算结果合并。

总结:
1、单表:加大reduce并发;set hive.groupby.skewindata = true ; distributer by rand((x)
2、多表:set hive.optimize.skewjoin = true; 热点key可以过滤便先过滤掉(如null); 热点key on rand(x)(如null);热点key单独拎出来计算(如 非null值倾斜)
如果是大小表join倾斜,用map join

其它优化参数说明 调整分片大小

根据computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))公式,
调整maxSize = 64MB,即可将分片大小调整为64MB;或者调整minSize = 512MB,即可将分片大小调整为512MB

调整reduce个数

(1)每个Reduce处理的数据量默认是256MB
set hive.exec.reducers.bytes.per.reducer=256000000
(2)每个任务最大的reduce数,默认为1009
set hive.exec.reducers.max=1009
(3)计算reducer数的公式
N=min(参数2,总输入数据量/参数1)(参数2 指的是上面的1009,参数1值得是256M)

hive架构


解析器(SQL Parser)
将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
编译器(Physical Plan)
将AST编译生成逻辑执行计划。
优化器(Query Optimizer)
对逻辑执行计划进行优化。
执行器(Execution)
把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/747602.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号