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

相关推荐

  • postgres安装[亲测有效]

    postgres安装[亲测有效]软件下载地址 http://www.postgres.cn/v2/download 软件安装参考文档 http://www.postgres.cn/docs 安装过程 将安装包解压到opt/postg

    2023-04-20
    98
  • 让字符串替换变得更容易——Python replace方法

    让字符串替换变得更容易——Python replace方法在Python中,字符串在日常的开发中经常会被使用到。对于字符串的操作,特别是对字符串的替换操作,通常需要我们使用Python内置的replace方法。本文将详细阐述Python中replace方法的使用方法、注意事项以及使用场景,帮助读者更好地掌握replace方法的用法。

    2024-01-31
    59
  • Redis内存_redis内存管理

    Redis内存_redis内存管理Redis内存消耗:自身内存 + 对象内存 + 缓冲内存 + 内存碎片 自身内存:Redis进程自身内存占用量很小,大约在3.8M左右。 对象内存:sizeof(keys) + sizeof(val…

    2023-04-01
    124
  • 用Python的Tkinter模块创建GUI窗口

    用Python的Tkinter模块创建GUI窗口图形用户界面(Graphical User Interface, GUI)是现代计算机上最流行的应用程序类型之一。它提供了一种直观和易于使用的界面,可以帮助用户更好地与计算机交互和控制应用程序。Python是一个强大的编程语言,它支持多种GUI工具包,其中Tkinter是一个Python标准库,它提供了创建GUI应用程序的基本工具。在本文中,我们将详细讨论使用Python的Tkinter模块创建GUI窗口的方法,从而帮助您掌握它。

    2024-02-25
    72
  • 利用Python实现字符串操作

    利用Python实现字符串操作Python是一门简单易学、功能强大的编程语言,被广泛应用于各种领域,特别是在数据分析、人工智能等领域。字符串是编程中经常用到的一种数据类型,而Python的字符串操作非常简单高效。本文将从选取、拼接、格式化、查找、替换等多个方面,介绍在Python中如何进行字符串操作。

    2024-03-14
    33
  • Mysql Explain详解「建议收藏」

    Mysql Explain详解「建议收藏」Explain简介 本文主要讲述如何通过 explain 命令获取 select 语句的执行计划,通过 explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些…

    2023-03-03
    106
  • sqlserver row_number_row_number() over order by

    sqlserver row_number_row_number() over order by语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说ROW_NUMBER()从1开始,为每一条分组记录返回一个数字,这里的ROW

    2023-04-30
    97
  • jdbc begin transaction failed_sql报错

    jdbc begin transaction failed_sql报错运维管理postgresql 时难免不会遇到一些疑难问题,遇到这里问题时怎么处理呢。 一、分析是整库异常还是个别进程异常 二、首先收集信息 确认好异常类别后,可以进行收集相应的信息了 整库异常 1….

    2023-03-20
    118

发表回复

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