hadoop列式存储和行式存储

列式存储和行式存储的区别

hadoop列式存储和行式存储_第1张图片

  • 压缩比较

列式存储是按照列进行存储的,同一列的相邻的value的数据类型是一样,可以对value进行压缩。

行式存储按照行存储,一行中有多个字段,字段类型不一样,会导致压缩性能就较差

  • 读取比较

读取 select id, time from table;

行式存储:需要遍历每一行,再将id、time拼接出来

列式存储: 只需要读取id、time两列就好

但是对于select * from table

列实存储需要再拼接,所以效率会低一些。

但是在大数据领域下一般不会进行全表扫描,所以大多采用列式存储

为什么我们需要不同的文件存储格式呢?

不同的文件存储格式在存储大小、读取速率、写入速率会有不同的表现。而不同的场景下对这两者的要求是不同的,比如说在数据仓库通常是一次写入,多次读取的,对读取性能有更高的要求。所以需要有不同的文件存储格式满足不同的需求。

常见的行式存储格式:TextFile、SequenceFile、Avro

常见的列式存储格式有:ORC、RC file、parquet

ORC、RC file是结合了行、列存储的数据格式

  • TextFile

    常采用csv、json等固定长度的纯文本格式

    hive中表数据的默认存储格式,将所有的数据都存储为String类型,不便于数据的解析,却比较通用。不具备随机读写的能力,占用空间较大

  • SequenceFile

    按行存储二进制键值对数据,HDFS自带

    二进制文件,将 序列化到文件中,二进制的可读性就不好

    可用于hadoop中小文件的打包存档

    支持记录压缩、块压缩

  • Avro

    一个序列化系统。基于行存储

    序列化:将内存中的对象转为字节序列,便于网络中的传输。

    反序列化:将字节序列转为内存中的对象。

    用Json格式存储数据定义(表的描述、字段、字段类型),二进制格式存储数据

    通用的数据格式

    可压缩

    可读性就较低

    自带RPC

  • Parquet

    按照列进行存储,spark sql的默认数据源格式,列式存储的优缺点。即读取某一列的数据较快

  • RC file

    先划分行集合,在行集合中存储列式数据,加入轻量级索引,允许跳过行。

  • ORC FIle

    RC的优化版本

hadoop列式存储和行式存储_第2张图片

ORC 文件格式将行集合存储在一个文件中,并且在集合中,行数据以列格式存储

ORC 文件包含称为stripe的行数据组和File footer(文件页脚)中的辅助信息 。默认stripe大小为 250 MB。大stripe大小支持从 HDFS 进行大量、高效的读取。

在Hive中常用的使用方式:一般读入源文件为Avro格式,在Hive中的中间过程可以使用ORC存储,而最后保存也选择Avro格式保存。因为Avro格式比较通用,而ORC格式在很多地方并不能使用。

差异

  • 读取(速度从高到低排序)

Avro:查询随时间变化,支持扩展字段

Parquet:适合在宽表上查询少数列

Parquet & ORC:以牺牲性能为代价,优化读取能力

TextFile:可读性最佳,但是文件读取速度慢

  • Hive查询(速度从高到低排序)

ORC**(常用):几乎专门为Hive定制的格式,速度很快
Parquet
(常用)**
Text
Avro**(常用)**:占地小,节省磁盘空间,也是比较通用的格式
SequenceFile:占地小,节省磁盘空间;本身是为了MR的k、v对设计,而非Hive,所以对于Hive来说速度最慢。

总结:常用的格式是AVRO 、Parquet、ORC;Parquet、ORC是列式存储格式,Avro是行式存储格式。

对比Avro和Parquet:

1.Parquet由于是列式存储格式,所以在读取查询效率比较高。

2.在模式演变方面,Avro比 PARQUET 成熟得多。Parquet 仅支持模式追加,而 Avro支持功能强大的模式演变,即添加或修改列。也就是说在写操作上,Avro表现更好。

3.Avro是ETL操作的理想选择,需要查询所有的列

ORC和Parquet的比较

Parquet更能存储嵌套数据

ORC更能进行谓词下推

ORC支持ACID属性

ORC压缩效率更高

参考文章:
https://blog.csdn.net/JacksonKing/article/details/126076959?ops_request_misc=%7B%22request%5Fid%22%3A%22166806028916800186597123%22%2C%22scm%22%3A%2220140713.130102334%E2%80%A6%22%7D&request_id=166806028916800186597123&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-126076959-null-null.142v63control,201v3control,213v2t3_control1&utm_term=hadoop%20ORC&spm=1018.2226.3001.4187

(65条消息) Hadoop文件存储格式_赵昕彧的博客-CSDN博客_hadoop文件存储格式

(65条消息) 行式数据和列式数据对比 存储压缩性能_回忆美好的博客-CSDN博客_列式存储压缩

你可能感兴趣的:(hadoop,大数据,hive)