hadoop常见的文件格式及压缩算法是什么_位图文件格式

hadoop常见的文件格式及压缩算法是什么_位图文件格式前言 该文章中将会整理一些大数据中常见的文件格式及压缩算法的理论知识,作为后期实践的理论指导。理论+实践才会更方便用这些文件格式和压缩算法。 目前hadoop中常见的文件格式有textfile、seq

Hadoop常见的文件格式及压缩算法

前言

 该文章中将会整理一些大数据中常见的文件格式及压缩算法的理论知识,作为后期实践的理论指导。理论+实践才会更方便用这些文件格式和压缩算法。
    目前hadoop中常见的文件格式有textfile、sequencefile、avro、rcfile、orcfile、parquet等,上述六种文件格式又可以划分为行式存储(textfile、sequencefile、avro)和列式存储(rcfile、orcfile、parquet)。那么什么是行式存储?什么又是列式存储呢?

一、行式存储及列式存储

1.行式存储

行式存储就是每一行的所有数据存在一个block中,各个block之间连续存储。

优点:

  • 因为每一行的所有字段都存在一起,因此对数据进行插入(INSERT)和修改(UPDATE)操作很方便。
  • 整表查询比较方便,可以很快将整张表组装出来。

缺点:

  • 查询(SELECT)时如果涉及到某条数据,需要把该行数据所有内容都读取到内存中,即使只SELECT一两个字段也要把整行数据都读进来。读取数据的时候硬盘寻址范围很大。
  • 要加速查询的话需要建立索引,建立索引需要花费很多时间。
  • 空值也要占固定的空间。

应用场景:

行式存储用于存储关系型数据,用于使用数据的时候需要经常用到数据之间的依赖关系的场景,即读取的时候需要整行数据或者整行中大部分列的数据,需要经常用到插入、修改操作,比如存储用户的注册信息等。

2.列式存储

列式存储就是每一列的所有数据存在一起,不同列之间可以分开存储。

优点:

  • 每一列单独存储,因此仅SELECT个别列的时候,可以仅读取需要的那几个列,相当于为每一列都建立了索引。因此硬盘寻道范围小。
  • 数据压缩。列式存储的时候可以为每一列创建一个字典,存储的时候就仅存储数字编码即可,降低了存储空间需求

缺点:

  • SELECT完成时,被选中的数据需要重新组装。
  • 插入(INSERT)和修改(UPDATE)操作比较麻烦。

应用场景:

列式存储适合分布式数据库和数据仓库,适合于对大量数据进行统计分析,列与列之间关联性不强,仅进行插入和读取操作的场景,如网站流量统计、用户行为分析等。

二、具体的文件格式

看完具体的大类划分,我们再看看具体的文件格式。

1. TextFile

默认格式,存储方式为行存储,数据不做压缩,磁盘开销大,数据解析开销大。可结合 Gzip、Bzip2 使用(系统自动检查,执行查询时自动解压),但使用 这种方式,压缩后的文件不支持 split,Hive 不会对数据进行切分,从而无法对数据进行并行操作。并且在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比 SequenceFile 高几十倍 。

2. SequenceFile

 hadoop常见的文件格式及压缩算法是什么_位图文件格式

SequenceFile 是 Hadoop API 提供的一种二进制文件支持,存储方式为行存储,其具有使用方便、可分割、可压缩的特点。SequenceFile 支持三种压缩选择:NONE,RECORD,BLOCK。Record 压缩率低,一般建议使用 BLOCK 压缩。优势是文件和 hadoop api 中的 MapFile 是相互兼容的 。

3. Avro

hadoop常见的文件格式及压缩算法是什么_位图文件格式

Avro格式是Hadoop的一种基于行的存储格式,被广泛用作序列化平台。Avro格式以JSON格式存储模式,使其易于被任何程序读取和解释。数据本身以二进制格式存储,使其在Avro文件中紧凑且高效。Avro格式是语言中立的数据序列化系统。它可以被多种语言处理(目前是C、C++、C#、Java、Python和Ruby)。Avro格式的一个关键特性是对随时间变化的数据模式的强大支持,即模式演变。Avro处理模式更改,例如缺少字段、添加的字段和更改的字段。Avro格式提供了丰富的数据结构。例如,您可以创建包含数组、枚举类型和子记录的记录。

4. RCFile

hadoop常见的文件格式及压缩算法是什么_位图文件格式

RCFile是为基于MapReduce的数据仓库系统设计的数据存储结构。它结合了行存储和列存储的优点,可以满足快速数据加载和查询,有效利用存储空间以及适应高负载的需求。RCFile是由二进制键/值对组成的flat文件,它与sequence file有很多相似之处,在数仓中执行分析时,这种面向列的存储非常有用。当我们使用面向列的存储类型时,执行分析很容易。缺点是RC不支持schema扩展,如果要添加新的列,则必须重写文件,这会降低操作效率。

5. OrcFile

 hadoop常见的文件格式及压缩算法是什么_位图文件格式

Apache ORC是Apache Hadoop生态系统面向列的开源数据存储格式,它与Hadoop环境中的大多数计算框架兼容,ORC代表“优化行列”,它以比RC更为优化的方式存储数据,提供了一种非常有效的方式来存储关系数据,然后存储RC文件。ORC将原始数据的大小最多减少75%,数据处理的速度也提高了。

6. Parquet

hadoop常见的文件格式及压缩算法是什么_位图文件格式

与以行方式存储数据的传统方法相比,Parquet文件格式在存储和性能方面更高效。这对于从“宽”(具有许多列)表中读取特定列的查询特别有用,因为只读取需要的列,并且最小化 IO。Parquet的独特功能之一是它也可以以柱状方式存储具有嵌套结构的数据。这意味着在 Parquet 文件格式中,即使是嵌套字段也可以单独读取,而无需读取嵌套结构中的所有字段。Parquet 格式使用记录分解和组装算法以柱状方式存储嵌套结构。

三、压缩算法

压缩格式

工具

算法

文件扩展名

是否可切分

default/deflate

deflate

.deflate

gzip

gzip

deflate

.gz

bzip2

bzip2

bzip2

.bz2

lzo

lzop

lzo

.lzo

lz4

lz4

.lz4

snappy

snappy

.snappy

四、总结

Hadoop支持的文件格式和压缩算法非常多,每种文件格式和压缩算法都有自己独特的特点和一定的应用场景。下一期我们讲讲这些内容,并选择合适的文件格式和压缩算法组合,作为默认的文件格式和压缩算法。

如有错误,不吝指正。

参考文章

  1. https://zhuanlan.zhihu.com/p/459444652
  2. https://www.51cto.com/article/615292.html
  3. https://segmentfault.com/a/1190000040823167
  4. https://blog.csdn.net/longyanchen/article/details/97160466

原文地址:https://www.cnblogs.com/tangshanqun/archive/2022/08/20/16602547.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4881.html

(0)
上一篇 2023-06-01
下一篇 2023-06-01

相关推荐

  • Python Renames:轻松更改文件名的利器

    Python Renames:轻松更改文件名的利器对于一个Python工程师来说,更改文件名是一个经常会遇到的问题。虽然更改文件名对于普通用户来说似乎是一个简单的任务,但是想要以编程的方式实现更改文件名就需要使用Python。

    2024-01-10
    111
  • Python 偏函数

    Python 偏函数函数是Python中重要的概念之一,它为我们提供了封装代码的能力,增加了代码的可读性和复用性。Python中的函数还有一个非常强大的功能就是偏函数。

    2024-07-23
    34
  • 初识Oracle数据库基础笔记

    初识Oracle数据库基础笔记初识Oracle数据库基础知识点笔记

    2023-04-15
    149
  • 如何查看Python版本号

    如何查看Python版本号在使用Python进行编程的时候,我们需要经常查看Python版本号,确定系统内安装的Python版本是否符合我们的需求。然而,有时候我们并不知道如何查看Python的版本号。接下来,我们将从多个方面阐述如何查看Python版本号。

    2024-09-06
    23
  • Python中闭包的使用

    Python中闭包的使用在Python中,闭包是一个函数和其相关的引用环境组合而成的实体。通俗点讲,闭包就是相互嵌套的函数,其中内部函数可以引用外部函数的变量。

    2024-04-20
    82
  • Python多行字符串示例

    Python多行字符串示例Python是一种简单易学、功能强大的高级编程语言,其代码简洁易懂、可读性强等特点,使得Python成为了最受欢迎的编程语言之一。而Python多行字符串也是Python编程中常用的技巧之一,本篇文章旨在通过丰富的内容和示例,帮助读者更好地理解和使用Python多行字符串。

    2024-08-11
    32
  • Python中if-else语句的用途以及如何在pandas中使用

    Python中if-else语句的用途以及如何在pandas中使用条件语句,即if-else语句,是编程语言中的常见语句之一,它的目的是根据某个条件执行代码块中的语句。在Python中,if-else语句同样被使用。

    2024-01-13
    103
  • Python中定义一个圆的用语

    Python中定义一个圆的用语在Python中,有一些基本的数学概念需要了解。首先,圆是一个几何图形,它由一组点构成,这些点与一个特定的点(圆心)之间的距离相等。半径是连接圆心和圆上的任何一个点的线段的长度。直径是连接圆上任意两点的线段的长度,其等于半径的两倍。周长是圆的周长,即圆周上的点到圆心的距离之和。

    2023-12-07
    122

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注