Hive支持的存储数据的格式主要有:

Hive支持的存储数据的格式主要有 存储形式
TEXTFILE 行式存储
SEQUENCEFILE 行式存储
ORC 列式存储
PARQUET 列式存储

列式存储和行式存储


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

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

TEXTFILE和SEQUENCEFILE的存储格式都是基于行存储的;
ORC和PARQUET是基于列式存储的。

TEXTFILE格式

默认格式,数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。

ORC格式

Orc (Optimized Row Columnar)是hive 0.11版里引入的新的存储格式。
可以看到每个Orc文件由1个或多个stripe组成,每个stripe250MB大小,这个Stripe实际相当于RowGroup概念,不过大小由4MB->250MB,这样能提升顺序读的吞吐率。每个Stripe里有三部分组成,分别是Index Data,Row Data,Stripe Footer:

一个orc文件可以分为若干个Stripe
一个stripe可以分为三个部分
indexData:某些列的索引数据
rowData :真正的数据存储
StripFooter:stripe的元数据信息
1)Index Data:一个轻量级的index,默认是每隔1W行做一个索引。这里做的索引只是记录某行的各字段在Row Data中的offset。

2)Row Data:存的是具体的数据,先取部分行,然后对这些行按列进行存储。对每个列进行了编码,分成多个Stream来存储。

3)Stripe Footer:存的是各个stripe的元数据信息
每个文件有一个File Footer,这里面存的是每个Stripe的行数,每个Column的数据类型信息等;每个文件的尾部是一个PostScript,这里面记录了整个文件的压缩类型以及FileFooter的长度信息等。在读取文件时,会seek到文件尾部读PostScript,从里面解析到File Footer长度,再读FileFooter,从里面解析到各个Stripe信息,再读各个Stripe,即从后往前读。

PARQUET格式

Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目。
Parquet文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的数据和元数据,因此Parquet格式文件是自解析的。
通常情况下,在存储Parquet数据的时候会按照Block大小设置行组的大小,由于一般情况下每一个Mapper任务处理数据的最小单位是一个Block,这样可以把每一个行组由一个Mapper任务处理,增大任务执行并行度。Parquet文件的格式如下图所示。

上图展示了一个Parquet文件的内容,一个文件中可以存储多个行组,文件的首位都是该文件的Magic Code,用于校验它是否是一个Parquet文件,Footer length记录了文件元数据的大小,通过该值和文件长度可以计算出元数据的偏移量,文件的元数据中包括每一个行组的元数据信息和该文件存储数据的Schema信息。除了文件中每一个行组的元数据,每一页的开始都会存储该页的元数据,在Parquet中,有三种类型的页:数据页、字典页和索引页。数据页用于存储当前行组中该列的值,字典页存储该列值的编码字典,每一个列块中最多包含一个字典页,索引页用来存储当前行组下该列的索引,目前Parquet中还不支持索引页。

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

从存储文件的压缩比和查询速度两个角度对比。
存储文件的压缩比测试:
测试数据 参见log.data 此原始数据19M
TextFile
(1)创建表,存储数据格式为TEXTFILE

create table log_text2 (
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)向表中加载数据

load data local inpath '/export/servers/hivedatas/log.data' into table log_text1 ;

(3)查看表中数据大小

dfs -du -h /user/hive/warehouse/myhive.db/log_text;


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


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

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)向表中加载数据

insert into table log_orc select * from log_text1 ;

(3)查看表中数据大小

dfs -du -h /user/hive/warehouse/myhive.db/log_orc;


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


Parquet
(1)创建表,存储数据格式为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 ;

(2)向表中加载数据

insert into table log_parquet select * from log_text ;

(3)查看表中数据大小

dfs -du -h /user/hive/warehouse/myhive.db/log_parquet;


13.1 M /user/hive/warehouse/log_parquet/123456_0
存储文件的压缩比总结:
ORC > Parquet > textFile

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

1)TextFile

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

1 row selected (5.97 seconds)
1 row selected (5.754 seconds)
2)ORC

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

1 row selected (5.967 seconds)
1 row selected (6.761 seconds)
3)Parquet

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

1 row selected (6.7 seconds)
1 row selected (6.812 seconds)

存储文件的查询速度总结:
TextFile >ORC> Parquet

存储和压缩结合

官网:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC
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)

创建一个非压缩的的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 into table log_orc_none select * from log_text1 ;

查看插入后数据
dfs -du -h /user/hive/warehouse/myhive.db/log_orc_none;

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

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

建表语句

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 into table log_orc_snappy select * from log_text1 ;

查看插入后数据

dfs -du -h /user/hive/warehouse/myhive.db/log_orc_snappy ;


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

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


2.8 M /user/hive/warehouse/log_orc/123456_0
比Snappy压缩的还小。原因是orc存储文件默认采用ZLIB压缩。比snappy压缩的小。

存储方式和压缩总结:

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

Hive的数据存储格式相关推荐

  1. Hive(数据仓库)数据压缩、数据存储格式

    7.hive的数据压缩 在实际工作当中,hive当中处理的数据,一般都需要经过压缩,前期我们在学习hadoop的时候,已经配置过hadoop的压缩,我们这里的hive也是一样的可以使用压缩来节省我们的 ...

  2. 关于Hive中的存储格式及压缩格式详解

    最近面试,遇到了关于Hive的数据存储格式的问题,回答不尽人意,抽时间总结多看看关于Hive存储格式和压缩格式的内容. Hive底层数据是以HDFS文件的形式存储在Hadoop中的,选择一个合适的文件 ...

  3. Hive常见的存储格式的区别与应用场景

    Hive常见的存储格式的区别与应用场景 一.文件存储格式 行存储和列存储 1.TextFile 2.sequencefile 3.RC 4.orc(工作中常用) 5.parquet 二.四种存储格式分 ...

  4. 认识Hive,以及Hive的数据定义与数据操作,hive的数据查询和hive函数

    认识Hive 为什么要出现hive 前面知识我们讲到mapreudce计算框架,各位需要通过java编码的形式来实现设计运算过程,这对各位的编程能力提出了更高的要求,难道没有门槛更低的方式来实现运算的 ...

  5. hive 插入数据映射到hbase_年薪50万都难招的大数据工程师,凭什么?

    回顾2018年,降薪.裁员.互联网寒冬似乎成为主旋律,那实际上资本市场萎缩了吗? 其实不然,2018年6月,蚂蚁金服还获得140亿融资,而热度较高的大数据行业,在2018年的融资额达到1273.1亿元 ...

  6. 大数据培训Hive的数据存储与压缩

    行存储与列存储 当今的数据处理大致可分为两大类,联机事务处理 OLTP(on-line transaction processing)联机分析处理 OLAP(On-Line Analytical Pr ...

  7. 【hive】Hive常见的存储格式的区别与应用场景

    Hive常见的存储格式的区别与应用场景 一.文件存储格式 行存储和列存储 1.TextFile 2.sequencefile 3.RC 4.orc(工作中常用) 5.parquet 二.四种存储格式分 ...

  8. 从Hive导出数据到Oracle数据库--Sqoop

    首先解释一下各行代码: sqoop export # 指定要导入到Oracle的那张表(通常与hive中的表同名) --table TABLE_NAME # host_ip:导入oracle库所在的i ...

  9. hive导出数据到本地文件报错解决方法

    hive导出数据到本地文件报错解决方法 参考文章: (1)hive导出数据到本地文件报错解决方法 (2)https://www.cnblogs.com/yaopeiyun/p/12232251.htm ...

最新文章

  1. LSGO:祝大家新年快乐!
  2. 批量离线下载迅雷快传资源
  3. solr elasticsearch比较
  4. XML Schema语法规则
  5. Python标准库参考-sched
  6. 运维日常操作--linux命令
  7. FIR滤波器窗函数设计法——汉明窗设计实例
  8. freeswitch 使用ipset和iptables阻止国外ip扫描端口
  9. android8 fat分区,MTK 6577+Android EMMC分区布局
  10. 非常详细的STM32 CAN通信的贴子,从总线细节到编程实现
  11. 带你玩转kubernetes-k8s(第61篇-Kubernetes之资源紧缺时的Pod驱逐机制)
  12. 在VS2005和2008的对话框里,添加了一个MSCOMM通信控件,怎么mscomm.h和mscomm.cpp没有自动出现?
  13. 【机器学习】多项式回归
  14. uni.navigateBack直接返回到首页
  15. 中粤拼音在线转换_【PPT技巧】添加拼音小妙招
  16. centos上通过ll或者du命令查看文件的大小
  17. 考研倒计时html页面
  18. 一元函数黄金分割求最优解中循环的两种写法
  19. 【论文阅读】Density estimation using Real NVP
  20. [青少年CTF]-MISC WP(一)

热门文章

  1. 史上最简单的扫雷(C语言实现)
  2. word删除目录、封面页码
  3. 快速开发平台 WebBuilder 的 JNDI 配置
  4. 节后上班第一天图鉴来袭,请对号入座!
  5. 护士常用计算机,临床护理中常见数值一览表,护士必备哦!
  6. 【案例 6-5】 模拟百度翻译器
  7. Java Map 键值对排序 按key排序和按Value排序
  8. 淘票票sign----js生成(1:淘票参数 n = this.params 2021年12月6日15:51:06)
  9. mongodb 集群分片布署
  10. 63岁雅虎女掌门巴茨:爱爆粗口铁娘子