关于hadoop:Hadoop-入门笔记六-Hadoop常用文件存储格式

5次阅读

共计 4011 个字符,预计需要花费 11 分钟才能阅读完成。

一. 传统零碎常见文件存储格局

在 Windows 有很多种文件格式,例如:JPEG 文件用来存储图片、MP3 文件用来存储音乐、DOC 文件用来存储 WORD 文档。每一种文件存储某一类的数据,例如:咱们不会用文原本存储音乐、不会用文原本存储图片。windows 上反对的存储格局是十分的多。

1. 文件系统块大小

  • 在服务器 / 电脑上,有多种块设施(Block Device),例如:硬盘、CDROM、软盘等等
  • 每个文件系统都须要将一个分区拆分为多个块,用来存储文件。不同的文件系统块大小不同

2. Hadoop 中文件存储格局

在 Hadoop 中 ,没有默认的文件格式,格局的抉择取决于其用处。而抉择一种优良、适宜的数据存储格局是十分重要的。应用 HDFS 的应用程序(例如 MapReduce 或 Spark) 性能中的最大问题、瓶颈是在特定地位查找数据的工夫和写入到另一个地位的工夫 ,而且治理大量数据的解决和存储也很简单(例如:数据的格局会一直变动,原来一行有 12 列,前面要存储 20 列)
抉择适合的文件格式可能会带来一些显著的益处:

  1. 能够保障写入速度
  2. 能够保障读取速度
  3. 文件是可被切分的
  4. 对压缩反对敌对
  5. 反对 schema 的更改

    每种格局都有长处和毛病,数据处理的不 同阶段能够应用不同的格局才会更有效率。通过抉择一种格局,最大水平地施展该存储格局的劣势,最小化劣势。

    3. BigData File Viewer 工具

    1. 介绍
    • 一个跨平台(Windows,MAC,Linux)桌面应用程序,用于查看常见的大数据二进制格局,例如 Parquet,ORC,AVRO 等。反对本地文件系统,HDFS,AWS S3 等
      github 地址:https://github.com/Eugene-Mar…
    2. 性能介绍
    • 关上并查看本地目录中的 Parquet,ORC 和 AVRO,HDFS,AWS S3 等
    • 将二进制格局的数据转换为文本格式的数据,例如 CSV
    • 反对简单的数据类型,例如数组,映射,构造等
    • 反对 Windows,MAC 和 Linux 等多种平台
    • 代码可扩大以波及其余数据格式

4. Hadoop 丰盛的存储格局

1. Text File
  • 简介:
    文本文件在非 Hadoop 畛域很常见,在 Hadoop 畛域也很常见。 数据一行一行到排列,每一行都是一条记录。以典型的 UNIX 形式以换行符【\n】终止, 文本文件是能够被切分的,但如果对文本文件进行压缩,则必须 应用反对切分文件的压缩编解码器,例如 BZIP2。因为这些文件只是文本文件,压缩时会对所有内容进行编码。能够将每一行成为 JSON 文档,能够让数据带有构造
  • 利用场景:
    仅在须要从 Hadoop 中间接提取数据,或间接从文件中加载大量数据的状况下,才倡议应用纯文本格式或 CSV
  • 长处:
    简略易读、轻量级
  • 毛病:

    • 读写速度慢
    • 不反对块压缩,在 Hadoop 中对文本文件进行压缩 / 解压缩会有较高的读取老本,因为须要将整个文件全副压缩或者解压缩。
    • 不反对块压缩,在 Hadoop 中对文本文件进行压缩 / 解压缩会有较高的读取老本,因为须要将整个文件全副压缩或者解压缩。
2. Sequence File
  1. 简介
    Sequence 最后是为 MapReduce 设计的,因而 和 MapReduce 集成很好 , 在 Sequence File 中,每个 数据都是以一个 key 和一个 value 进行序列化存储 ,Sequence File 中的 数据是以二进制格局存储 ,这种格局所需的存储空间小于文本的格局。与文本文件一样,Sequence File 外部也 不反对对键和值的构造指定格局编码
  2. 利用场景
    通常把 Sequence file 作为 两头数据存储格局 。例如:将 大量小文件合并放入到一个 SequenceFIle 中
  3. 构造
  4. 长处:

    • 与文本文件相比更紧凑,反对块级压缩

      • 压缩文件内容的同时, 反对将文件切分
      • 序列文件在 Hadoop 和许多其余反对 HDFS 的我的项目反对很好,例如:Spark
      • 它是让咱们解脱文本文件迈出第一步
    • 它能够作为大量小文件的容器
  5. 毛病:

    • 对具备 SQL 类型的 Hive 反对不好,须要读取和解压缩所有字段
    • 不存储元数据,并且对 schema 扩大中的惟一形式是在开端增加新字段
    3. Avro File
    1. 简介
      Apache Avro 是与语言无关的序列化零碎,由 Hadoop 创始人 Doug Cutting 开发,vro 是 基于行的存储格局 ,它在 每个文件中都蕴含 JSON 格局的 schema 定义 ,从而进步了互操作性并容许 schema 的变动(删除列、增加列)。除了 反对可切分,反对压缩 ,Avro 是一种自描述格局,它 将数据的 schema 间接编码存储在文件 中,能够用来存储简单构造的数据 。Avro 能够进行疾速序列化,生成的序列化数据也比拟小
    2. 利用场景
      适宜于一次性须要将大量的列(数据比拟宽)、写入频繁的场景, 随着 更多存储格局的倒退,罕用于 Kafka 和 Druid 中
    3. 构造
      间接将一行数据序列化在一个 block 中
    4. 长处:

      • 如果只须要对数据文件中的多数列进行操作,行式存储效率较低, 例如:咱们读取 15 列中的 2 列数据,基于行式存储就须要读取数百万行的 15 列。而列式存储就会比行式存储形式高效
      • 列式存储因为是将同一列(类)的数据存储在一起,压缩率要比形式存储高
4. RCFile
  1. 简介:
    RCFile 是 为基于 MapReduce 的数据仓库零碎设计的数据存储构造 。它 联合了行存储和列存储的长处 ,能够 满足疾速数据加载和查问 无效利用存储空间以及适应高负载的需要 。RCFile 是由二进制键 / 值对组成的 flat 文件 ,它与 sequence file 有很多相似之处, 在数仓中 执行剖析时,这种面向列的存储十分有用 。当咱们 应用面向列的存储类型时,执行剖析很容易
  2. 利用场景
    罕用在 Hive 中
  3. 构造

  • RCFile 可 将数据分为几组行 ,并且在其中 将数据存储在列中
  • RCFile 首先将行程度划分为行拆分(Row Group),而后以列形式垂直划分每个行拆分(Columns)。
  • RCFile 将行拆分的元数据存储为 record 的 key,并将行拆分的所有数据存储 value
  • 作为行存储,RCFile 保障同一行中的数据位于同一节点中
  • 作为列存储,RCFile 能够利用列数据压缩,并跳过不必要的列读取
  1. 长处

    • 基于列式的存储,更好的压缩比
    • 利用元数据存储来反对数据类型
    • 反对 Split
  2. 毛病:
    RC 不反对 schema 扩大,如果要增加新的列,则必须重写文件,这会升高操作效率
5. ORC File
  1. 简介
    Apache ORC(Optimized Row Columnar,优化行列)是Apache Hadoop 生态系统面向列的开源数据存储格局,它与 Hadoop 环境中的大多数计算框架兼容,ORC 代表“优化行列”,它 以比 RC 更为优化的形式存储数据,提供了一种十分无效的形式来存储关系数据,而后存储 RC 文件。ORC 将原始数据的大小最多缩小 75%,数据处理的速度也进步了
  2. 利用场景
    罕用在 Hive 中
  3. 构造
  4. 长处 ’
  5. 比 TextFile,Sequence File 和 RCFile 具备更好的性能
  6. 列数据独自存储
  7. 带类型的数据存储格局, 应用类型专用的编码器
  8. 轻量级索引
  9. 毛病
    与 RC 文件一样,ORC 也是不反对列扩大的

    6. Parquet File
    1. 简介

    Parquet File 是另一种 列式存储的构造 ,来自于 Hadoop 的创始人 Doug Cutting 的 Trevni 我的项目, 基于列的二进制存储格局,能够存储嵌套的数据结构, 当指定要应用列进行操作时,磁盘输出 / 输入操效率很高,Parquet 与 Cloudera Impala 兼容很好,并做了大量优化, 反对块压缩, 与 RC 和 ORC 文件不同,Parquet serdes 反对无限的 schema 扩大。在 Parquet 中,能够在构造的开端增加新列

    1. 构造

    1. 长处:

    非常适合进行压缩,具备杰出的查问性能,尤其是从特定列查问数据时,效率很高

    1. 毛病:

    Parquet 也具备压缩和查问性能方面的长处,与非列文件格式相比,写入速度通常较慢。

    5. Parent Vs ORC

    • ORC 文件格式压缩比 parquet 要高,parquet 文件的数据格式 schema 要比 ORC 简单,占用的空间也就越高
    • ORC 文件格式的读取效率要比 parquet 文件格式高
    • 如果数据中有嵌套构造的数据,则 Parquet 会更好
    • Hive 对 ORC 的反对更好,对 parquet 反对不好,ORC 与 Hive 关联严密
    • ORC 还能够反对 ACID、Update 操作等
    • Spark 对 parquet 反对较好,对 ORC 反对不好
    • 为了数据可能兼容更多的查问引擎,Parquet 也是一种较好的抉择

6. ProtoBuf 和 Thrift

因为 Protobuf 和 Thrift 是不可 split 的,因而它们在 HDFS 中并不风行

7. 新一代的存储格局 Apache Arrow

  1. Arrow 简介
    pache Arrow 是一个跨语言平台,是一种列式内存数据结构,次要用于构建数据系统。Apache Arrow 在 2016 年 2 月 17 日作为顶级 Apache 我的项目引入

    Apache Arrow 倒退十分迅速,并且在将来会有更好的倒退空间。它能够在零碎之间进行高效且疾速的数据交换,而无需进行序列化,而这些老本已与其余零碎(例如 Thrift,Avro 和 Protocol Buffers)相关联, 每一个零碎实现,它的办法(method)都有本人的内存存储格局,在开发中,70%-80% 的工夫节约在了序列化和反序列化上

    Arrow 促成了许多组件之间的通信。例如,应用 Python(pandas)读取简单的文件并将其转换为 Spark DataFrame。

    1. Arrow 是如何晋升数据挪动性能的

      • 利用 Arrow 作为内存中数据表示的两个过程能够将数据从一种办法“重定向”到另一种办法,而无需序列化或反序列化。例如,Spark 能够应用 Python 过程发送 Arrow 数据来执行用户定义的函数
      • 无需进行反序列化,能够间接从启用了 Arrow 的数据存储系统中接管 Arrow 数据。例如,Kudu 能够将 Arrow 数据间接发送到 Impala 进行剖析
      • Arrow 的设计针对嵌套结构化数据(例如在 Impala 或 Spark Data 框架中)的剖析性能进行了优化。
正文完
 0