【hive 组件分析】

Hive常见优化点整理

hive架构图
hive生态图

hive动态分区开关

set hive.exec.dynamic.partition.mode=nonstrict;

hive并行执行

set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=16;

hive压缩

set mapreduce.map.output.compress= true 开启mapreduce中map输出压缩功能

set hive.exec.compress.intermediate=true: 开启传输数据压缩功能

set hive.exec.compress.output=true: 开启mapreduce最终输出数据压缩

set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec: 设置为Gzip格式压缩

set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec: 设置为SnappyCodec压缩

mapreduce split 分片设置

map小文件过多,导致启动的mapper数过多,占用集群资源,可以设置如下参数,将小文件进行合并,减少mapper的数目,

set mapred.max.split.size=1000; 指定split切片大小1000K,默认128M,
set mapred.min.split.size.per.node=400; 指定每个节点split的大小,超过这个值会进行新的split切分
set mapred.min.split.size.per.rack=200; 指定每个rack split 大小,超过这个值会进行新的split切分
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
默认为org.apache.hadoop.hive.ql.io.HiveInputFormat

mapreduce输出端配置

set hive.merge.mapfiles = true: 在Map-only的任务结束时合并小文件

set hive.merge.mapredfiles = true: 在Map-Reduce的任务结束时合并小文件

set hive.merge.size.per.task = 256*1000*1000: 合并文件的大小

set hive.merge.smallfiles.avgsize=16000000: 当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge

hive mapreduce reduce个数设置

set hive.exec.reducers.bytes.per.reducer=500000000: 设定一个reduce处理的数据量为500M
set hive.exec.reducers.max = 888: 设置一个MR最大的reduce数,默认为999
set mapred.reduce.tasks = 100 可以强制指定reduce个数

hive 数据倾斜

set hive.groupby.skewindata = true

hive分桶

分桶优点:
1、抽样查询 2、map-side join 两个对相同字段做了同样分桶规则的表关联,可以实现在map端join,提高效率。 3、控制文件数量

1、创建分区分桶表
create table t1(id int) partitioned by (statis_date string) clustered by(id) into 4 buckets;
2、准备数据
set hive.enforce.bucketing=true; // 强制分桶
insert into t1 partition(statis_date='20211101')select * from (
select 1 id union all
select 2 id union all
select 3 id union all
select 4 id union all
select 5 id union all
select 6 id union all
select 7 id union all
select 8 id ) tmp
cluster by id;
select columns from table tablesample(bucket x out of y on column);
-- x:表示从第几个分桶进行抽样
-- y:表示每隔几个分桶取一个分桶,必须为y的整数倍或者因子

3、例如下面从对表从桶1开始查,每次间隔1个桶,得到桶1和桶3的全部数据:
select id,statis_date from t1 tablesample(bucket 1 out of 2 on id);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值