博客
关于我
Apache Hudi和Presto的前世今生
阅读量:435 次
发布时间:2019-03-06

本文共 2114 字,大约阅读时间需要 7 分钟。

Apache Hudi与Presto集成深度解析

Apache Hudi(Hadoop数据湖 Unified)作为一款专为大规模数据集设计的分布式数据湖存储系统,已成为企业构建和管理PB级数据湖的重要工具。Hudi通过引入upserts、deletes和增量查询等原语,将流式处理的能力引入批处理领域,为企业提供了更快、更更新鲜的数据访问体验。

1. Apache Hudi概述

Hudi的核心设计目标是为企业构建和管理PB级数据湖。在数据组织和存储方面,Hudi采用了一种创新的模型,将数据文件写入到一个更受管理的存储层中,该层能够与主流查询引擎(如Presto)进行有效的互操作。此外,Hudi在项目演变中积累了丰富的经验,为数据湖的管理和扩展提供了坚实的基础。

2. Hudi的核心特性

Hudi通过以下两个主要原语实现流式处理与批处理的结合:

  • 记录级别更新/删除:支持更新或删除特定记录,使用文件/记录级别索引提供事务保证,查询时可获取最新提交的快照以生成结果。
  • 增量查询:支持从指定时间点开始对表中所有更新、插入、删除记录进行增量查询。

这些特性使得数据工程师无需重写整个表或重新加载所有数据,仅需处理更新和删除的记录即可显著提升处理效率。

3. Hudi表类型

Hudi支持两种主要表类型,适用于不同的数据访问和存储需求:

3.1 Copy On Write (COW) 表

  • 数据存储格式:列式存储格式(如Parquet)。
  • 特点:
    • 在写入时同步更新版本/重写数据。
    • 适合需要最新数据访问的场景,但可能带来较高的延迟和I/O开销。

3.2 Merge On Read (MOR) 表

  • 数据存储格式:结合列式存储格式(Parquet)和行存储格式(Avro)。
  • 特点:
    • 增量写入到delta文件中,后续通过压缩操作与基础Parquet文件合并。
    • 提供较低的数据延迟和I/O开销,但Parquet文件大小通常较大。

4. Hudi查询类型

Hudi提供三种主要查询类型,满足不同的数据访问需求:

4.1 快照查询

  • 查询特定提交/压缩版本的表的最新快照。
  • 对于Merge On Read表,通过合并基础Parquet文件和增量delta文件提供近实时数据(通常在分钟级别)。
  • 对于Copy On Write表,直接提供最新版本的Parquet数据。

4.2 增量查询

  • 查询从指定时间点以来新写入的数据。
  • 适用于需要处理数据变更流的场景,如ETL/派生管道。

4.3 读优化查询

  • 查询特定提交/压缩版本的表的最新快照。
  • 仅提供最新版本的基础/列式数据文件。
  • 与非Hudi表相同的列式查询性能。

5. Presto与Hudi集成

Presto作为一款高性能的查询引擎,与Hudi的集成是数据湖生态系统的重要组成部分。随着时间的推移,Presto对Hudi表的支持能力不断增强。

5.1 早期集成方案

  • Hudi最初通过自定义注解和inputformat实现与Presto的集成。
  • 提供了基本的COW表支持,并能读取MOR表的优化查询(仅从基础Parquet文件获取数据)。

5.2 移除InputFormat.getsplits()

  • 该方法存在以下缺陷:
    • 对NameNode的RPC调用次数过多,可能导致背压。
    • 冗余地扫描和复用Hudi表的分区文件。
  • 解决方案:
    • 通过在Hudi表中添加编译时依赖项,优化切片加载逻辑。
    • 在Presto的DirectoryLister接口中引入PathFilter,提供定制化的文件过滤逻辑。

5.3 Presto支持MOR表查询

  • 后续版本中,Presto增强了对MOR表的支持。
  • 通过引入新的InputFormatRecordReader类,实现对MOR表中更新鲜数据的访问。
  • 在Hive中,通过自定义切片加载器和记录读取器,支持对MOR表的实时查询。

6. Hudi与Presto的未来计划

Hudi与Presto的集成仍有诸多值得探索的领域:

6.1 引导表支持

  • 提供对外部数据引导表的支持,允许用户在不重写数据集的情况下迁移至Hudi表。
  • 利用现有的MOR查询支持,实现高效的数据迁移。

6.2 时间点查询

  • 在Presto中支持Hudi表的时间点查询。
  • 通过在metastore中注册增量表,结合查询谓词获取详细信息。
  • 在Spark中已有增量查询实现,Presto需要类似的支持。

6.3 压缩和优化

  • 优化Hudi的listStatus操作,减少对云/对象存储的大量元数据查询。
  • 提供更高效的文件切片和元数据管理机制,提升查询性能。

6.4 索引优化

  • 提供记录级别索引支持,减少查询开销。
  • 探索在Presto查询规划中利用索引信息的方法。

7. 总结

Apache Hudi为大规模数据湖的管理提供了强大的基础支持,而Presto作为一款高性能查询引擎,是连接数据湖和用户需求的重要桥梁。随着两者的深度集成,企业能够更高效地处理和分析数据,实现实时数据访问和快速决策。

如需了解更多技术细节或参与Hudi与Presto的集成项目,请访问Apache Hudi官方文档或参与开源社区讨论。

转载地址:http://ihcyz.baihongyu.com/

你可能感兴趣的文章
npm start运行了什么
查看>>
npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
查看>>
npm 下载依赖慢的解决方案(亲测有效)
查看>>
npm 安装依赖过程中报错:Error: Can‘t find Python executable “python“, you can set the PYTHON env variable
查看>>
npm.taobao.org 淘宝 npm 镜像证书过期?这样解决!
查看>>
npm—小记
查看>>
npm上传自己的项目
查看>>
npm介绍以及常用命令
查看>>
NPM使用前设置和升级
查看>>
npm入门,这篇就够了
查看>>
npm切换到淘宝源
查看>>
npm切换源淘宝源的两种方法
查看>>
npm前端包管理工具简介---npm工作笔记001
查看>>
npm包管理深度探索:从基础到进阶全面教程!
查看>>
npm升级以及使用淘宝npm镜像
查看>>
npm发布包--所遇到的问题
查看>>
npm发布自己的组件UI包(详细步骤,图文并茂)
查看>>
npm和package.json那些不为常人所知的小秘密
查看>>
npm和yarn清理缓存命令
查看>>
npm和yarn的使用对比
查看>>