一、Hive的压缩方式
1、Hive底层默认是MaReduce,Hive的压缩实际上就是MapReduce的压缩
2、MapReduce压缩分为Map端结果文件压缩和Reduce端结果文件压缩
use myhive;
-- 开启Map输出阶段压缩
set hive.exec.compress.intermediate=true;
set mapreduce.map.output.compress=true;
set mapreduce.map.output.compress.codec= org.apache.hadoop.io.compress.SnappyCodec;
select count(1) from covid2;
-- 开启Reduce输出阶段压缩
-- 1)开启hive最终输出数据压缩功能
-- 2)开启mapreduce最终输出数据压缩
-- 3)设置mapreduce最终数据输出压缩方式
-- 4)设置mapreduce最终数据输出压缩为块压缩
set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress=true;
set mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
set mapreduce.output.fileoutputformat.compress.type=BLOCK;
-- 5)测试一下输出结果是否是压缩文件
insert overwrite local directory '/export/data/compress'
select * from covid2 ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
输出格式就成了snappy。
常用的压缩方式
二、Hive的存储格式
行存储:TextFile: 默认的文本存储,SequenceFile。
列存储:ORC,PARQUET。
1、注意,我们以后几乎所有的表存储都是列存储,因为列存储更符合我们的需求
2、我们项目中使用的列存储时ORC格式
3、一般的列存储在内部会有一些索引,可以提高查询的效率
-- TEXTFILE格式,默认格式,通过STORED AS
create table log_text (
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE ;
-- TEXTFILE 表文件的大小是: 18.13M
load data local inpath '/export/data/hivedatas/log.data' into table log_text ;
select * from log_text;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 存储数据格式为ORC,ORC自带压缩,默认压缩算法是ZLIB
create table log_orc(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS orc ;
-- ORC表文件的大小是: 2.78M
insert into table log_orc select * from log_text ;
select * from log_orc;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 存储数据格式为parquet
create table log_parquet(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS parquet ;
-- PARQUET表文件的大小是: 13.09M
insert into table log_parquet select * from log_text ;
select * from log_parquet;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
三、压缩方式和存储格式结合
理论上Hive支持的任何一个存储格式都可以和hive支持的任何一个压缩方式进行结合。
-- 使用纯ORC,不使用任何的压缩算法
create table log_orc_none(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS orc tblproperties ("orc.compress"="NONE");
insert overwrite table log_orc_none select * from log_text;
文件的大小是: -- 7.69M
select * from log_orc_none ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 使用ORC,使用SNAPPY压缩算法
create table log_orc_snappy(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS orc tblproperties ("orc.compress"="SNAPPY");
insert overwrite table log_orc_snappy select * from log_text;
文件的大小是: -- 3.75 MB
select * from log_orc_snappy ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 使用parquet,使用SNAPPY压缩算法
create table log_parquet_snappy(
track_time string,
url string,
session_id string,
referer string,
ip string,
end_user_id string,
city_id string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS parquet tblproperties ("parquet.compress"="SNAPPY");
insert overwrite table log_parquet_snappy select * from log_text;
文件的大小是: -- 13.09 MB
select * from log_parquet_snappy ;
免责申明:
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!
《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu
《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack