Hadoop之存储格式

编程入门 行业动态 更新时间:2024-10-26 18:24:50

Hadoop之存储<a href=https://www.elefans.com/category/jswz/34/1771175.html style=格式"/>

Hadoop之存储格式

Hive中不同存储格式的使用

Hive Wiki 中 +DDL
在定义SQL语句之后,可以通过 [STORED AS file_format] 进行制定存储格式

file_format:: 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

从上面的存储格式的产生时间可以看出,后面的存储格式是优于一开始出现的存储格式的,当然也可以用 INPUTFORMAT 来指定自定义的存储格式


行式存储 VS 列式存储

对于行式存储来说,将每一行的数据存储在一起,每一行的数据可能数据类型不相同,压缩起来也会倒是压缩比不高,占用HDFS 上面的空间也会相对多一些,如果使用SQL语句进行查询的时候,select cloumna,columnb from table whre id = xxx ,使用行式存储会导致进行全变扫描,效率必然不高

对于列式存储来说,每一列的数据存储在一起,当查询某几列数据的时候,不用进行全表扫描,只需要查询出对应的几列数据就可以,但是当全表扫描的时候,效率会很低


配置压缩

Hive默认的存储格式是TextFile,对于每种存储格式的性能衡量主要从以下两个方面:

  • 存储(数据量)
  • 计算(时间、读取数据量)

HiveWiki中

通过设置参数:

  • SET hive.exec.compress.output=true;
  • SET mapreduce.output.fileoutputformat.compress=true
  • SET mapreduce.output.fileoutputformat.compress.codec=XXCodec

配置压缩:

在hadoop 的core-site.xml 中配置压缩参数

<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec</value>
</property><property><name>io.compression.codec.lzo.class</name><value>com.hadoop.compression.lzo.LzoCodec</value>
</property>

TextFile

纯文本形式的文件大小为18.1M,设置参数和Bzip2Codec后为3.6M

SequenceFile

不建议用SequenceFile
SequenceFile以Key-Value的方式进行组织数据,类似于二进制格式,SequenceFile比TextFile多了一些头信息还有其他一些信息,在占用空间上是要大于TextFile的,对于SequenceFile 通过load的方式是不能够加载数据到表中的,需要通过insert into tble as select 的方式来加载数据到表中,相对于同一份数据的TexeFile(18.1M)Sequence占用的空间是(19.6M)

以上的TextFile和SequenceFile是行式存储接下来介绍列式存储


存储角度对比文件格式

RCFile

RCFile是facebook开源的一个项目,是面向列式存储的,把一列的数据放到一起,同样的RCFile加载数据的时候也是需要用insert into tble as select 的方式。

存储层面上相对于TextFile的18.1M的大小,RCFile占用的空间是17.9M,节省大约10% 左右的空间

ORC File

ORC 的意思是优化后的列式存储,更加快速,占用空间更小,支持多种的数据类型,并且内置索引,比如 select name, age from student where id > 11,id 1到10 存储在一起,11 到20存储在一起,那么这里会直接到11到20的区域里面找数据

ORC File的存储形式是:

  • Index Data 用户存放索引数据
  • Row Data 用于存放真实的数据
  • Footer Data 存放其他的内容

相对于TextFile的18.1M ORC 所占用的空间是7.7M ,如果配置上zlib压缩,那么这里占用空间是2.8M

Parquet

Parquet 支持多种语言、多种协议,室友Twitter和cloudera公司联合开源的一款产品,在Hive 0.13 之后直接使用Sore AS Parquet 来指定存储为Parquet格式,相对于TextFile的18.1M的数据,Parquet所占用的空间是13.1M 如果加上gzip压缩,那么这里占用的空间是3.9M


计算角度对比各种格式

测试的话主要是用select count(*) from table where id=xxx

使用du -s 查看hdfs上面的数据量,在对比相同情况下使用SQL语句拉取的数据量

官方测试:

TextFileRCFileParquetORCFile
585G505G221G131G

连接:/

更多推荐

Hadoop之存储格式

本文发布于:2023-07-28 20:16:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1298320.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:格式   Hadoop

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!