ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第九章 压缩和存储 【文件存储类型、压缩方式的选择】

2022-02-08 18:02:52  阅读:275  来源: 互联网

标签:存储 string 第九章 压缩 -- user home orc log


 1. 结论

  存储格式一般选择 : orc 和 parquet

  压缩方式一般选择 : snappy(不可切片)、lzo(可切片)

  注意: 当读取单个大文件时,要选择lzo方式

 

 2. hive 支持的文件存储格式

    行式存储 : textfile、sequencefile

    列式存储 : orc、parquet

 

 3. 行式存储、列式存储 说明

-- 数据表
channel credit_date   score
huawei  2021-08-01      5
huawei  2021-08-01      5
huawei  2021-08-03      12
huawei  2021-08-04      25
huawei  2021-08-02      1
huawei  2021-08-07      7
huawei  2021-08-08      10
huawei  2021-08-06      33
vivo    2021-09-01      1
vivo    2021-09-02      2
vivo    2021-09-04      5
vivo    2021-09-09      9
vivo    2021-09-07      77
vivo    2021-09-08      10
vivo    2021-09-11      3

-- 行式存储
huawei,2021-08-01,5,huawei,2021-08-01,5...vivo,2021-09-01,1

-- 列式存储
huawei,huawei,huawei,vivo,vivo,2021-08-01,2021-08-01,...5,5,12
View Code

 

 4. 行式存储、列式存储 原理

https://blog.csdn.net/m0_37657725/article/details/98354168?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=2

5. 行式存储 优缺点
    优点:
1. 快速加载数据
2. 快速定位数据
根据 某个字段查找某行数据时
只需要定位字段的位置,其与字段的位置都在目标字段的相邻位置
列式存储则需要每个位置去聚合所有字段
缺点:
1. 无法快速查询数据,特别是只查询表中的少数列时
2. 压缩不充分,一行数据中,字段数据类型不一致,压缩时无法统一压缩算法

6. 列式存储 优缺点
优点:
1. 减少数据读取量(只读取需要的列)
2. 压缩比更高(同列数据类型 必相同)
缺点:
1.查询多个字段时,无法快速定位到记录,需要跨block扫描数据(无法保证同一行数据存储在同一个block上)

7. 测试textfile、orc、Parquet 对比磁盘开销(不使用压缩)
1. textfile 示例
-- 建表
create table home.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;
-- load 数据
load data local inpath '/root/log.data' into table home.log_text ;
-- 查看文件大小(HDFS)
dfs -du -h /user/hive/warehouse/home.db/log_text;
18.1 M  54.4 M  /user/hive/warehouse/home.db/log_text/log.data
-- 源文件大小
[root@gaocun ~]# du -h log.data
18.1    log.data
-- 说明
只是将文件拷贝到hdfs,并未压缩


2.orc 示例
-- 建表
create table home.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
tblproperties("orc.compress"="NONE"); -- 设置 orc 存储不使用压缩
;
-- insert 数据到 log_orc
insert into table home.log_orc  select * from home.log_text ;
-- 查看文件大小(HDFS)
dfs -du -h /user/hive/warehouse/home.db/log_orc;
7.7 M  23.1 M  /user/hive/warehouse/home.db/log_orc/000000_0
-- 源文件大小
[root@gaocun ~]# du -h log.data
18.1    log.data



3.parquet 示例
-- 建表
create table home.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
;
-- insert 数据到 log_parquet
insert into table home.log_parquet  select * from home.log_text ;
-- 查看文件大小(HDFS)
dfs -du -h /user/hive/warehouse/home.db/log_parquet;
13.1 M  39.3 M  /user/hive/warehouse/home.db/log_parquet/000000_0
-- 源文件大小
[root@gaocun ~]# du -h log.data
18.1    log.data
View Code
8. 测试textfile、orc、Parquet 对比压缩算法
-- 测试textfile、orc、Parquet 对比压缩算法
结论:
    源文件 log.data 18.1M
    orc-none : 7.7 M
    orc-zlib : 2.8 M
    orc-snappy : 3.7 M
    parquet-zlib : (不支持)
    parquet-snappy : 6.4 M
压缩比 : zlib > snappy

说明 : 项目中 hive表中数据存储格式一般选择为: orc 和 parquet
            压缩方式 : snappy、lzo

orc 支持压缩方式 : None、Zlib(默认使用)、Snappy
parquet 支持压缩方式 : Uncompress(默认使用,不压缩)、Snappy、Gzip、Lzo
当读取单个大文件时,要使用 Lzo方式(文件可切分)








1.orc-zlib 示例
-- 建表
create table home.log_orc_zlib (
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"="zlib"); -- 设置 orc 存储使用zlib压缩
;
-- insert 数据到 log_orc_zlib
insert into table home.log_orc_zlib  select * from home.log_text ;
-- orc 使用压缩
dfs -du -h /user/hive/warehouse/home.db/log_orc_zlib;
2.8 M  8.3 M  /user/hive/warehouse/home.db/log_orc_zlib/000000_0
-- orc 不使用压缩
dfs -du -h /user/hive/warehouse/home.db/log_orc;
7.7 M  23.1 M  /user/hive/warehouse/home.db/log_orc/000000_0
-- 源文件大小
[root@gaocun ~]# du -h log.data
18.1    log.data

2.orc-snappy 示例
-- 建表
create table home.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"); -- 设置 orc 存储使用 snappy 压缩
;
-- insert 数据到 log_orc_snappy
insert into table home.log_orc_snappy  select * from home.log_text ;
-- orc 使用压缩
dfs -du -h /user/hive/warehouse/home.db/log_orc_snappy;
3.7 M  11.2 M  /user/hive/warehouse/home.db/log_orc_snappy/000000_0
-- orc 不使用压缩
dfs -du -h /user/hive/warehouse/home.db/log_orc;
7.7 M  23.1 M  /user/hive/warehouse/home.db/log_orc/000000_0
-- 源文件大小
[root@gaocun ~]# du -h log.data
18.1    log.data

ZLIB 比 Snappy 压缩的还小。原因是 ZLIB 采用的是 deflate 压缩算法。比 snappy 压缩的 压缩率高




3.parquet-snappy 示例
-- 建表
create table home.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.compression"="snappy"); -- 设置 orc 存储使用 snappy 压缩
;
-- insert 数据到 log_orc_snappy
insert into table home.log_parquet_snappy  select * from home.log_text ;
-- parquet 使用压缩
dfs -du -h /user/hive/warehouse/home.db/log_parquet_snappy;
6.4 M  19.2 M  /user/hive/warehouse/home.db/log_parquet_snappy/000000_0
-- parquet 不使用压缩
dfs -du -h /user/hive/warehouse/home.db/log_orc;
7.7 M  23.1 M  /user/hive/warehouse/home.db/log_orc/000000_0
-- 源文件大小
[root@gaocun ~]# du -h log.data
18.1    log.data
View Code

 

 







标签:存储,string,第九章,压缩,--,user,home,orc,log
来源: https://www.cnblogs.com/bajiaotai/p/15872278.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有