Hadoop 入门笔记六 : Hadoop常用文件存储格式
一. 传统系统常见文件存储格式
在Windows有很多种文件格式,例如:JPEG文件用来存储图片、MP3文件用来存储音乐、DOC文件用来存储WORD文档。每一种文件存储某一类的数据,例如:我们不会用文本来存储音乐、不会用文本来存储图片。windows上支持的存储格式是非常的多。
1. 文件系统块大小
- 在服务器/电脑上,有多种块设备(Block Device),例如:硬盘、CDROM、软盘等等
- 每个文件系统都需要将一个分区拆分为多个块,用来存储文件。不同的文件系统块大小不同
选择合适的文件格式可能会带来一些明显的好处:
- 可以保证写入速度
- 可以保证读取速度
- 文件是可被切分的
- 对压缩支持友好
- 支持schema的更改
文章图片
每种格式都有优点和缺点,数据处理的不同阶段可以使用不同的格式才会更有效率。通过选择一种格式,最大程度地发挥该存储格式的优势,最小化劣势。
3. BigData File Viewer工具1. 介绍- 一个跨平台(Windows,MAC,Linux)桌面应用程序,用于查看常见的大数据二进制格式,例如Parquet,ORC,AVRO等。支持本地文件系统,HDFS,AWS S3等
github地址:https://github.com/Eugene-Mar...
- 打开并查看本地目录中的Parquet,ORC和AVRO,HDFS,AWS S3等
- 将二进制格式的数据转换为文本格式的数据,例如CSV
- 支持复杂的数据类型,例如数组,映射,结构等
- 支持Windows,MAC和Linux等多种平台
- 代码可扩展以涉及其他数据格式
- 一个跨平台(Windows,MAC,Linux)桌面应用程序,用于查看常见的大数据二进制格式,例如Parquet,ORC,AVRO等。支持本地文件系统,HDFS,AWS S3等
- 简介:
文本文件在非Hadoop领域很常见,在Hadoop领域也很常见。? 数据一行一行到排列,每一行都是一条记录。以典型的UNIX方式以换行符【\n】终止,文本文件是可以被切分的,但如果对文本文件进行压缩,则必须使用支持切分文件的压缩编解码器,例如BZIP2。因为这些文件只是文本文件,压缩时会对所有内容进行编码。可以将每一行成为JSON文档,可以让数据带有结构 - 应用场景:
仅在需要从Hadoop中直接提取数据,或直接从文件中加载大量数据的情况下,才建议使用纯文本格式或CSV
- 优点:
简单易读、轻量级 - 缺点:
- 读写速度慢
- 不支持块压缩,在Hadoop中对文本文件进行压缩/解压缩会有较高的读取成本,因为需要将整个文件全部压缩或者解压缩。
- 不支持块压缩,在Hadoop中对文本文件进行压缩/解压缩会有较高的读取成本,因为需要将整个文件全部压缩或者解压缩。
- 简介
Sequence最初是为MapReduce设计的,因此和MapReduce集成很好,在Sequence File中,每个数据都是以一个key和一个value进行序列化存储,Sequence File中的数据是以二进制格式存储,这种格式所需的存储空间小于文本的格式。与文本文件一样,Sequence File内部也不支持对键和值的结构指定格式编码 - 应用场景
通常把Sequence file作为中间数据存储格式。例如:将大量小文件合并放入到一个SequenceFIle中
文章图片
- 结构
文章图片
- 优点:
- 与文本文件相比更紧凑,支持块级压缩
- 压缩文件内容的同时,支持将文件切分
- 序列文件在Hadoop和许多其他支持HDFS的项目支持很好,例如:Spark
- 它是让我们摆脱文本文件迈出第一步
- 它可以作为大量小文件的容器
- 与文本文件相比更紧凑,支持块级压缩
- 缺点:
- 对具有SQL类型的Hive支持不好,需要读取和解压缩所有字段
- 不存储元数据,并且对schema扩展中的唯一方式是在末尾添加新字段
- 简介
Apache Avro是与语言无关的序列化系统,由Hadoop创始人 Doug Cutting开发,vro是基于行的存储格式,它在每个文件中都包含JSON格式的schema定义,从而提高了互操作性并允许schema的变化(删除列、添加列)。 除了支持可切分,支持压缩,Avro是一种自描述格式,它将数据的schema直接编码存储在文件中,可以用来存储复杂结构的数据。Avro可以进行快速序列化,生成的序列化数据也比较小 - 应用场景
适合于一次性需要将大量的列(数据比较宽)、写入频繁的场景,随着更多存储格式的发展,常用于Kafka和Druid中 - 结构
直接将一行数据序列化在一个block中
文章图片
- 优点:
- 如果只需要对数据文件中的少数列进行操作,行式存储效率较低,例如:我们读取15列中的2列数据,基于行式存储就需要读取数百万行的15列。而列式存储就会比行式存储方式高效
- 列式存储因为是将同一列(类)的数据存储在一起,压缩率要比方式存储高
- 简介:
RCFile是为基于MapReduce的数据仓库系统设计的数据存储结构。它结合了行存储和列存储的优点,可以满足快速数据加载和查询,有效利用存储空间以及适应高负载的需求。RCFile是由二进制键/值对组成的flat文件,它与sequence file有很多相似之处,在数仓中执行分析时,这种面向列的存储非常有用。当我们使用面向列的存储类型时,执行分析很容易 - 应用场景
常用在Hive中 - 结构
文章图片
- RCFile可将数据分为几组行,并且在其中将数据存储在列中
- RCFile首先将行水平划分为行拆分(Row Group),然后以列方式垂直划分每个行拆分(Columns)。
- RCFile将行拆分的元数据存储为record的key,并将行拆分的所有数据存储value
- 作为行存储,RCFile保证同一行中的数据位于同一节点中
- 作为列存储,RCFile可以利用列数据压缩,并跳过不必要的列读取
- 优点
- 基于列式的存储,更好的压缩比
- 利用元数据存储来支持数据类型
- 支持Split
- 缺点:
RC不支持schema扩展,如果要添加新的列,则必须重写文件,这会降低操作效率
- 简介
Apache ORC(Optimized Row Columnar,优化行列)是Apache Hadoop生态系统面向列的开源数据存储格式,它与Hadoop环境中的大多数计算框架兼容,ORC代表“优化行列”,它以比RC更为优化的方式存储数据,提供了一种非常有效的方式来存储关系数据,然后存储RC文件。ORC将原始数据的大小最多减少75%,数据处理的速度也提高了 - 应用场景
常用在Hive中 - 结构
文章图片
- 优点'
- 比TextFile,Sequence File 和 RCFile 具备更好的性能
- 列数据单独存储
- 带类型的数据存储格式,使用类型专用的编码器
- 轻量级索引
- 缺点
与RC文件一样,ORC也是不支持列扩展的
6. Parquet File- 简介
- 结构
文章图片
- 优点:
- 缺点:
5. Parent Vs ORC- ORC文件格式压缩比parquet要高,parquet文件的数据格式schema要比ORC复杂,占用的空间也就越高
- ORC文件格式的读取效率要比parquet文件格式高
- 如果数据中有嵌套结构的数据,则Parquet会更好
- Hive对ORC的支持更好,对parquet支持不好,ORC与Hive关联紧密
- ORC还可以支持ACID、Update操作等
- Spark对parquet支持较好,对ORC支持不好
- 为了数据能够兼容更多的查询引擎,Parquet也是一种较好的选择
文章图片
7. 新一代的存储格式Apache Arrow
- Arrow简介
pache Arrow是一个跨语言平台,是一种列式内存数据结构,主要用于构建数据系统。Apache Arrow在2016年2月17日作为顶级Apache项目引入
文章图片
Apache Arrow发展非常迅速,并且在未来会有更好的发展空间。它可以在系统之间进行高效且快速的数据交换,而无需进行序列化,而这些成本已与其他系统(例如Thrift,Avro和Protocol Buffers)相关联,每一个系统实现,它的方法(method)都有自己的内存存储格式,在开发中,70%-80%的时间浪费在了序列化和反序列化上
文章图片
Arrow促进了许多组件之间的通信。 例如,使用Python(pandas)读取复杂的文件并将其转换为Spark DataFrame。
文章图片
- Arrow是如何提升数据移动性能的
- 利用Arrow作为内存中数据表示的两个过程可以将数据从一种方法“重定向”到另一种方法,而无需序列化或反序列化。 例如,Spark可以使用Python进程发送Arrow数据来执行用户定义的函数
- 无需进行反序列化,可以直接从启用了Arrow的数据存储系统中接收Arrow数据。 例如,Kudu可以将Arrow数据直接发送到Impala进行分析
- Arrow的设计针对嵌套结构化数据(例如在Impala或Spark Data框架中)的分析性能进行了优化。
- Arrow是如何提升数据移动性能的
推荐阅读
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- Android中的AES加密-下
- 【读书笔记】贝叶斯原理
- 【韩语学习】(韩语随堂笔记整理)
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 人性的弱点-笔记
- 读书笔记:博登海默法理学|读书笔记:博登海默法理学 —— 正义的探索(1)
- D034+3组苏曼+《写作这回事》读书笔记
- 《自我的追寻》读书笔记3
- 最有效的时间管理工具(赢效率手册和总结笔记)