前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2021年大数据Hive(十):Hive的数据存储格式

2021年大数据Hive(十):Hive的数据存储格式

作者头像
Lansonli
发布2021-10-11 15:38:51
1.5K0
发布2021-10-11 15:38:51
举报
文章被收录于专栏:Lansonli技术博客Lansonli技术博客

Hive的数据存储格式

Hive支持的存储数的格式主要有:TEXTFILE(行式存储) 、SEQUENCEFILE(行式存储)、ORC(列式存储)、PARQUET(列式存储)。

一、列式存储和行式存储

行存储的特点: 查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快。

列存储的特点: 因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。

相比于行式存储,列式存储在分析场景下有着许多优良的特性:

1)分析场景中往往需要读大量行但是少数几个列。在行存模式下,数据按行连续存储,所有列的数据都存储在一个block中,不参与计算的列在IO时也要全部读出,读取操作被严重放大。而列存模式下,只需要读取参与计算的列即可,极大的减低了IO开销,加速了查询。

2)同一列中的数据属于同一类型,压缩效果显著。列存储往往有着高达十倍甚至更高的压缩比,节省了大量的存储空间,降低了存储成本。

3)更高的压缩比意味着更小的数据空间,从磁盘中读取相应数据耗时更短。

4)自由的压缩算法选择。不同列的数据具有不同的数据类型,适用的压缩算法也就不尽相同。可以针对不同列类型,选择最合适的压缩算法。

TEXTFILE和SEQUENCEFILE的存储格式都是基于行存储的;

ORC和PARQUET是基于列式存储的。

​​​​​​​二、主流文件存储格式对比实验

从存储文件的压缩比和查询速度两个角度对比。

存储文件的压缩比测试:

1、TextFile

1)创建表,存储数据格式为TEXTFILE

代码语言:javascript
复制
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 ;

2)向表中加载数据

代码语言:javascript
复制
load data local inpath '/export/data/hivedatas/log.data' into table log_text ;

3)查看表中数据大小

代码语言:javascript
复制
hadoop fs  -du -h /user/hive/warehouse/myhive.db/log_text;    

18.1 M  /user/hive/warehouse/log_text/log.data

2、ORC

1)创建表,存储数据格式为OR

代码语言:javascript
复制
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 ;

2)向表中加载数据

代码语言:javascript
复制
insert into table log_orc select * from log_text ;

3)查看表中数据大小

代码语言:javascript
复制
hadoop fs  -du -h /user/hive/warehouse/myhive.db/log_orc;

2.8 M  /user/hive/warehouse/log_orc/123456_0

3、Parquet

1)创建表,存储数据格式为parquet

代码语言:javascript
复制
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 ;

2)向表中加载数据

代码语言:javascript
复制
insert into table log_parquet select * from log_text ;

3)查看表中数据大小

代码语言:javascript
复制
hdoop fs  -du -h /user/hive/warehouse/myhive.db/log_parquet;

13.1 M  /user/hive/warehouse/log_parquet/123456_0

存储文件的压缩比总结:

ORC >  Parquet > textFile

存储文件的查询速度测试:

代码语言:javascript
复制
1)TextFile

hive (default)> select count(*) from log_text;

_c0

100000

Time taken: 21.54 seconds, Fetched: 1 row(s)

2)ORC

hive (default)> select count(*) from log_orc;

_c0

100000

Time taken: 20.867 seconds, Fetched: 1 row(s)

3)Parquet

hive (default)> select count(*) from log_parquet;

_c0

100000

Time taken: 22.922 seconds, Fetched: 1 row(s)

存储文件的查询速度总结:

ORC > TextFile > Parquet

​​​​​​​三、存储和压缩结合

ORC存储方式的压缩:

Key

Default

Notes

orc.compress

ZLIB

high level compression (one of NONE, ZLIB, SNAPPY)

orc.compress.size

262,144

number of bytes in each compression chunk

orc.stripe.size

67,108,864

number of bytes in each stripe

orc.row.index.stride

10,000

number of rows between index entries (must be >= 1000)

orc.create.index

true

whether to create row indexes

orc.bloom.filter.columns

""

comma separated list of column names for which bloom filter should be created

orc.bloom.filter.fpp

0.05

false positive probability for bloom filter (must >0.0 and <1.0)

1、创建一个非压缩的的ORC存储方式

1)建表语句

代码语言:javascript
复制
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");

2)插入数据

代码语言:javascript
复制
insert into table log_orc_none select * from log_text ;

3)查看插入后数据

代码语言:javascript
复制
hadoop fs -du -h /user/hive/warehouse/myhive.db/log_orc_none;

7.7 M  /user/hive/warehouse/log_orc_none/123456_0

2、创建一个SNAPPY压缩的ORC存储方式

1)建表语句

代码语言:javascript
复制
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");

2)插入数据

代码语言:javascript
复制
insert into table log_orc_snappy select * from log_text ;

3)查看插入后数据

代码语言:javascript
复制
hadoop fs  -du -h /user/hive/warehouse/myhive.db/log_orc_snappy ;

3.8 M  /user/hive/warehouse/log_orc_snappy/123456_0

3、上一节中默认创建的ORC存储方式,导入数据后的大小为

2.8 M  /user/hive/warehouse/log_orc/123456_0

比Snappy压缩的还小。原因是orc存储文件默认采用ZLIB压缩。比snappy压缩的小。

4、存储方式和压缩总结:

在实际的项目开发当中,hive表的数据存储格式一般选择:orc或parquet。压缩方式一般选择snappy


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢大数据系列文章会每天更新,停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Hive的数据存储格式
    • 一、列式存储和行式存储
      • ​​​​​​​二、主流文件存储格式对比实验
        • 1、TextFile
        • 2、ORC
        • 3、Parquet
      • ​​​​​​​三、存储和压缩结合
        • 1、创建一个非压缩的的ORC存储方式
        • 2、创建一个SNAPPY压缩的ORC存储方式
        • 3、上一节中默认创建的ORC存储方式,导入数据后的大小为
        • 4、存储方式和压缩总结:
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档