引言:

大数据应用中,我认为最核心的两个点就是 “存储” 和 “计算”, 在现在的大数据计算中,各种计算引擎的出现,迭代优化 使得数据计算能够快速的产生结果,但是数据存储以及数据格式,始终属于最为基本的,合理的数据存储以及数据格式,配合适合的计算引擎,能够使数据计算得到最大的提升,并且减少磁盘开销;

这里,我使用Hive作为计算引擎,来说明 数据格式对存储的重要性;

常见的数据存储格式

在hive中,提供的以下几种数据的存储格式:

: SEQUENCEFILE
  | TEXTFILE    -- (Default, depending on hive.default.fileformat configuration)
  | RCFILE      -- (Note: Available in Hive 0.6.0 and later)
  | ORC         -- (Note: Available in Hive 0.11.0 and later)
  | PARQUET     -- (Note: Available in Hive 0.13.0 and later)
  | AVRO        -- (Note: Available in Hive 0.14.0 and later)
  | JSONFILE    -- (Note: Available in Hive 4.0.0 and later)
  | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

其中,TEXTFILE是最最基本的格式,也是默认的格式,后面我们会针对其余几种数据格式来做测试,让数据来说话!!!

hive存储类型 hive推荐的存储格式_数据格式

验证

文本格式

hive存储类型 hive推荐的存储格式_列式存储_02


hive存储类型 hive推荐的存储格式_HIVE_03


上述两幅图中,创建了一种基本的hive表,并没有指定数据格式,可以看出 TEXTFILE 就是作为最基本的数据格式类型,下面开始导入数据;

hive存储类型 hive推荐的存储格式_列式存储_04

hive存储类型 hive推荐的存储格式_hive存储类型_05

使用TEXTFILE的数据格式,导入的数据大小为18.1M;

SEQUENCEFILE

创建 sequencefile 格式的表;

hive存储类型 hive推荐的存储格式_数据格式_06

导入数据 查看数据大小;

hive存储类型 hive推荐的存储格式_HIVE_07

hive存储类型 hive推荐的存储格式_数据_08

在使用sequencefile 格式的数据 大小为 19.6M ,竟然比文本的数据还要大,搞笑了~~~

RCFILE

创建rc 格式表 并导入数据;

hive存储类型 hive推荐的存储格式_数据格式_09

查看文件大小;

hive存储类型 hive推荐的存储格式_hive存储类型_10

嗯,用rcFile格式之后,文件大小小了10% 左右,嗯,终于少了~~~

ORC

好了,重头戏开始了;创建ORC格式表,并导入数据;

hive存储类型 hive推荐的存储格式_HIVE_11

查看文件大小。

hive存储类型 hive推荐的存储格式_数据格式_12

嗯,OMG~~ 这么小了么。发生了啥呢,别急后面细细说来;

PARQUET

创建 PARQUET 格式表,导入数据

hive存储类型 hive推荐的存储格式_HIVE_13

查看文件大小

hive存储类型 hive推荐的存储格式_数据格式_14

嗯,PARQUET 格式的数据,虽然小了,但是好像和ORC对比起来,没减少多少嘛~ ,其实ORC的数据格式是自带压缩的,默认采用了ZLIB 的压缩格式,所以,如果我们 让没有压缩格式的PARQUET 和带了 压缩 的ORC 对比,似乎不怎么公平;下面个PARQUET 来个压缩试试

PARQUET (有压缩)

首先,我们先设置 PARQUET 的压缩格式;

hive存储类型 hive推荐的存储格式_HIVE_15

然后在创建一张 parquert 表,从新测试看看;

hive存储类型 hive推荐的存储格式_hive存储类型_16

查看文件大小

hive存储类型 hive推荐的存储格式_HIVE_17

在采用了 压缩之后的 parquet 大小还是看的下去的;那么好奇的小伙伴,可能对 不压缩的ORC 敢兴趣了,下面我们就来试试看不压缩的ORC,怎么样;

ORC (不压缩)

创建一张数据格式为ORC 并且指定ORC的压缩格式为空的表;

hive存储类型 hive推荐的存储格式_HIVE_18

查看文件大小;

hive存储类型 hive推荐的存储格式_hive存储类型_19

嗯,嗯,嗯,还是比较厉害的啊~~

总结

对比数据

数据格式

文件大小

TEXTFILE

18.1M

RCFILE

17.9 M

SEQUENCEFILE

19.6 M

ORC(有压缩)

2.8 M

ORC(无压缩)

7.7 M

PARQUET(有压缩)

3.9 M

PARQUET(无压缩)

13.1 M

上表发现,如果从存储的角度对比 ORC 和 PARQUET 明显优于别的格式数据;这两种也是工作中,常用的两种格式;