引言:
大数据应用中,我认为最核心的两个点就是 “存储” 和 “计算”, 在现在的大数据计算中,各种计算引擎的出现,迭代优化 使得数据计算能够快速的产生结果,但是数据存储以及数据格式,始终属于最为基本的,合理的数据存储以及数据格式,配合适合的计算引擎,能够使数据计算得到最大的提升,并且减少磁盘开销;
这里,我使用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表,并没有指定数据格式,可以看出 TEXTFILE 就是作为最基本的数据格式类型,下面开始导入数据;
使用TEXTFILE的数据格式,导入的数据大小为18.1M;
SEQUENCEFILE
创建 sequencefile 格式的表;
导入数据 查看数据大小;
在使用sequencefile 格式的数据 大小为 19.6M ,竟然比文本的数据还要大,搞笑了~~~
RCFILE
创建rc 格式表 并导入数据;
查看文件大小;
嗯,用rcFile格式之后,文件大小小了10% 左右,嗯,终于少了~~~
ORC
好了,重头戏开始了;创建ORC格式表,并导入数据;
查看文件大小。
嗯,OMG~~ 这么小了么。发生了啥呢,别急后面细细说来;
PARQUET
创建 PARQUET 格式表,导入数据
查看文件大小
嗯,PARQUET 格式的数据,虽然小了,但是好像和ORC对比起来,没减少多少嘛~ ,其实ORC的数据格式是自带压缩的,默认采用了ZLIB 的压缩格式,所以,如果我们 让没有压缩格式的PARQUET 和带了 压缩 的ORC 对比,似乎不怎么公平;下面个PARQUET 来个压缩试试
PARQUET (有压缩)
首先,我们先设置 PARQUET 的压缩格式;
然后在创建一张 parquert 表,从新测试看看;
查看文件大小
在采用了 压缩之后的 parquet 大小还是看的下去的;那么好奇的小伙伴,可能对 不压缩的ORC 敢兴趣了,下面我们就来试试看不压缩的ORC,怎么样;
ORC (不压缩)
创建一张数据格式为ORC 并且指定ORC的压缩格式为空的表;
查看文件大小;
嗯,嗯,嗯,还是比较厉害的啊~~
总结
对比数据
数据格式 | 文件大小 |
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 明显优于别的格式数据;这两种也是工作中,常用的两种格式;