Hadoop常用文件存储格式
创作时间:
作者:
@小白创作中心
Hadoop常用文件存储格式
引用
CSDN
1.
https://m.blog.csdn.net/wangjian530/article/details/144987112
在大数据处理领域,选择合适的文件存储格式对于提高数据处理效率和存储空间利用率至关重要。本文将详细介绍Hadoop生态系统中常用的几种文件存储格式,包括它们的优缺点、适用场景以及具体实现方式。
0、行式存储与列式存储
- 行式存储(Row-Based):同一行数据存储在一起。
- 列式存储(Column-Based):同一列数据存储在一起。
优缺点
行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性。缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。行存储适合插入操作,不适合查询。
列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。列存储适合查询,不适合插入。
一、TextFile
- 文本格式是Hadoop生态系统内部和外部的最常见格式。
- 通常按行存储,以回车换行符区分不同行数据。
- 最大缺点是,它不支持块级别压缩,因此在进行压缩时会带来较高的读取成本。
- 解析开销一般会比二进制格式高,尤其是XML 和JSON,它们的解析开销比Textfile还要大。
- 易读性好。
二、Sequence File
- Sequence File,每条数据记录(record)都是以key、value键值对进行序列化存储(二进制格式)。
- 序列化文件与文本文件相比更紧凑,支持record级、block块级压缩。压缩的同时支持文件切分。
- 通常把Sequence file作为中间数据存储格式。例如:将大量小文件合并放入到一个Sequence File中。
2.1 Sequence File--record 、block
- record就是一个kv键值对。其中数据保存在value中。 可以选择是否针对value进行压缩。
- block就是多个record的集合。block级别压缩性能更好
三、Avro File
- Apache Avro是与语言无关的序列化系统,由Hadoop创始人 Doug Cutting开发
- Avro是基于行的存储格式,它在每个文件中都包含JSON格式的schema定义,从而提高了互操作性并允许schema的变化(删除列、添加列)。除了支持可切分以外,还支持块压缩。
- Avro是一种自描述格式,它将数据的schema直接编码存储在文件中,可以用来存储复杂结构的数据。
- Avro直接将一行数据序列化在一个block中。
- 适合于大量频繁写入宽表数据(字段多列多)的场景,其序列化反序列化很快。
四、RCFile
- Hive Record Columnar File(记录列文件),这种类型的文件首先将数据按行划分为行组,然后在行组内部将数据存储在列中。很适合在数仓中执行分析。且支持压缩、切分。
- 但不支持schema扩展,如果要添加新的列,则必须重写文件,这会降低操作效率。
五、ORC File
- ORC File(Optimized Row Columnar)提供了比RC File更有效的文件格式。它在内部将数据划分为默认大小为250M的Stripe。每个条带均包含索引,数据和页脚。索引存储每列的最大值和最小值以及列中每一行的位置。
- 它并不是一个单纯的列式存储格式,仍然是首先根据Stripe分割整个表,在每一个Stripe内进行按列存储。
- ORC有多种文件压缩方式,并且有着很高的压缩比。文件是可切分(Split)的。
- ORC文件是以二进制方式存储的,所以是不可以直接读取。
六、Parquet File
- Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目。
- Parquet文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的数据和元数据,因此Parquet格式文件是自解析的。
- 支持块压缩。
6.1 Parquet File--结构
- Parquet 的存储模型主要由行组(Row Group)、列块(Column Chuck)、页(Page)组成。
- 在水平方向上将数据划分为行组,默认行组大小与 HDFS Block 块大小对齐,Parquet 保证一个行组会被一个 Mapper 处理。行组中每一列保存在一个列块中,一个列块具有相同的数据类型,不同的列块可以使用不同的压缩。Parquet 是页存储方式,每一个列块包含多个页,一个页是最小的编码的单位,同一列块的不同页可以使用不同的编码方式。
- 文件的首位都是该文件的Magic Code,用于校验它是否是一个Parquet文件。
七、大数据新一代存储格式Apache Arrow
Apache Arrow是一个跨语言平台,是一种列式内存数据结构,主要用于构建数据系统。 Apache Arrow在2016年2月17日作为顶级Apache项目引入。
7.1 Arrow简介
Arrow促进了许多组件之间的通信。 极大的缩减了通信时候序列化、反序列化所浪费的时间。
- 利用Arrow作为内存中数据表示的两个过程可以将数据从一种方法“重定向”到另一种方法,而无需序列化或反序列化。 例如,Spark可以使用Python进程发送Arrow数据来执行用户定义的函数。
- 无需进行反序列化,可以直接从启用了Arrow的数据存储系统中接收Arrow数据。 例如,Kudu可以将Arrow数据直接发送到Impala进行分析。
- Arrow的设计针对嵌套结构化数据(例如在Impala或Spark Data框架中)的分析性能进行了优化。
热门推荐
Excel中号码排整齐的多种实用方法
网络关系图分析价值与关系网络可视化生成方法!
这就是性能巅峰?华硕天选3深度使用报告(全文)
家庭装修中的水电布局:打造安全、舒适与节能的居住环境
河南省渑池县:依托中药材资源优势 打造新的产业增长极
中醫詳解濕氣重原因、症狀、預防和改善方法
这套书可以搭建起孩子阅读的桥梁、成长的桥梁,亲子互动的桥梁
离婚时彩礼退还该怎么判?
桃花源记与陶渊明:梦幻乌托邦与现实的思考
胡则:北宋名臣的传奇人生
一文熟悉人形机器人之眼:机器视觉
中医提醒:当你不吃这些,脾胃就恢复了80%
Wi-Fi全屋覆盖必备教程:Mesh、AC+AP、无线中继全解析
《美国队长4》迎首映礼,新任美队亮相!全球首周末票房预测近2亿美元
“宠物窝招小猫安心睡,温馨秘籍大公开!”
鱼缸底滤的维护与保养:底滤鱼缸如何放水
夏季红木家具保养指南:温湿度控制与日常维护要点
别等大脑遭遇“堵塞”你再去治疗!远离6个不良习惯,预防脑梗塞
如何在代码评审中处理缺乏经验的问题
奇门遁甲知识:奇门盘解析是先看内因再看外因
梦见饮酒是什么意思,好不好?
荸荠的功效与作用:清热解毒、利尿消肿、增强免疫力
古龙,一位“新武侠”派的现代主义者
精打细算的年轻人,国庆假期疯狂“穷游”
经典音游太鼓达人游戏推荐(推荐十款高质量的音游作品)
用法:如何通过目标设定提升自我效能感?
吕祖灵签5签解签详解 签文分析
小叶丹:与红军歃血为盟的彝族英雄
电子烟的危害与争议:从成分到法律的全面解析
电子烟的危害有哪些?如何影响健康?