Apache Paimon V0.9最新进展

news2024/11/15 23:22:23

摘要:本文整理自 Paimon PMC Chair 李劲松老师在 8 月 3 日 Streaming Lakehouse Meetup Online(Paimon x StarRocks,共话实时湖仓架构)上的分享。主要分享 Apache Paimon V0.9 的最新进展以及遇到的一些挑战。

一、Paimon:飞速发展的 2024

Paimon 诞生于 2022 年的 Flink 社区,并在 2023 年由 Flink Table Store 正式更名为 Apache Paimon,是一个完全由社区推动成长的项目。在短短不到3年的时间里,Paimon 已经有了飞速的发展,并且得到开源社区的一致认可,2023 年 Paimon 进入了 Apache 孵化器,并在 2024 年正式毕业成为了 Apache 顶级项目(TLP)。

如今,包括阿里在内的业界各公司都在积极拥抱 Apache Paimon 社区。2024年,阿里集团启动了Paimon 作为统一存储的 Alake 数据湖战役,目前各大业务方已经大规模上线了与 Paimon 相关的作业。这为阿里内部的业务带来了更加实时化、低成本和流批一体的湖上实时体验。阿里云在同一年启动了 Open Lake 战役,Paimon 与阿里内部各个计算引擎相结合,实现了高性能的读写操作。

目前来自国内各类规模的互联网公司以及其他行业的企业,已经将 Paimon 应用于生产环境中。这些公司通过使用 Paimon,不仅提高了业务的实时性和开放性,还实现了使用成本的降低。

二、Paimon:0.9 Features

预计在八月中下旬将发布 Apache Paimon V0.9 版本,包含如上图十几个新功能。

大致面临了三个核心挑战:

  1. 第一个是主键表,主键表是 Paimon 一个核心能力,它是区别于 Iceberg 最大一个特点,所以主键表 Native 化查询性能是比较关键的。在0.8版本中,我们引入了 Deletion Vectors,并将在 0.9 版本中进一步巩固这一功能,并且非主键表也支持轻量化的 DELETE & UPDATE。

  2. 第二个核心挑战是生态。随着 Paimon 的发展,我们已经看到它在包括阿里在内的各行各业中得到了广泛应用。然而,随着数据湖生态系统的扩展,特别是在国际市场的推广中,我们面临着一些问题。那么,如何才能构建一个更强大的生态系统呢?例如,在 0.9 版本中,我们引入了一个核心功能,即生成 Iceberg Snapshots,使得 Paimon 能够兼容 Iceberg 的生态系统。此外,我们还在与AI结合方面进行了相关尝试,例如 Paimon Python,以及 Paimon-Rust,从而更好地面向 AI 应用。

  3. 第三个核心挑战是应对各种业务需求。阿里云主要使用对象存储,这会导致较大的延迟问题。这迫使我们需要解决文件读取和碎片化文件读取的问题。因此,我们优化了对象存储文件 IO,引入了元数据缓存,并修改了默认文件格式与压缩算法。

三、挑战一:更新与查询时合并

Paimon 面临的第一个挑战是更新和查询时合并的“Trade-off”问题。常见的两种模式是 Merge On Read 和 Copy On Write。Merge On Read 模式下,更新速度很快,但查询速度较慢;而 Copy On Write模式下,更新速度较慢,但查询速度较快。目前,许多用户希望在更新和查询之间找到一个平衡点,即希望更新速度快的同时查询速度也不慢,而不是在这两种模式中进行权衡。

为了满足这一需求,从 0.8 版本开始,Paimon 引入了 Deletion Vectors。这是一种 Merge On Write 的模式,通过写时标记老文件哪些行被删除,实现快速更新,同时尽量不影响查询性能。

四、Deletion Vectors

(1)非主键表

Deletion Vectors 是在 Copy On Write 和 Merge On Read 的基础上实现的一种增量写入技术。

当进行数据更新时,Deletion Vectors 会标记出老文件哪些行的数据被删除,然后在读取数据时,这些标记会被用来过滤掉被删除的行。这样就实现了快速更新,这个就是 Deletion Vectors,一种简单且易于理解的技术。

对应到上图 Insert 就是写新的数据文件,Delete 就是标记老文件,哪些行被删除,Update 就是一个 Delete 和 Insert 的一个组合。通过这样的方式,在写入的时候成本高一点,但是查询的时候它的速度要快很多。

(2)主键表

那么如何在主键表中融入 Deletion Vectors?Paimon 在这里做出了一些创新的设计,比如如何在 LSM 结构中融入 Deletion Vectors 的维护,原理可以看上图右边的俩张图。

在 LSM 结构当中一般来说数据直接写到 Level 0 即可,但是如果有 Deletion Vectors,就需要在 Level 0 升级和写入 LSM 高层的时候,将它对应的增量数据在高层当中查出来。比如说查询 Level 3 文件中的哪些行被删了,需要维护 Deletion Vectors 的 Bitmap。经过维护之后就会生成如右下图的 Bitmap,生成的对应 Bitmap 可以避免实际重写 Level 3 文件,同时仍然可以高效地查询 Level 3。

在主键表中,利用LSM点查能力来删除数据,并且在 0.9 当中也支持了异步 Compaction。

在这个过程上,Deletion Vectors 能达到的查询效果就是支持过滤下推到文件,也解放了查询的并发限制。而且更为关键的是,它支持了 StarRocks、Doris 等 Native 语言的简单集成。这样 Native 语言就不需要考虑复杂的 Merge,直接基于文件加 Deletion Vectors 即可进行高效的向量化查询。

(3)测试

上图是来自 StarRocks 社区的一个测试。测试结果表明,即使在比较简单的场景中,性能提升也能达到3到5倍。在更复杂的场景中,性能提升甚至可以达到5到10倍,整体来看性能效果是非常好的。

(4)计算引擎

Deletion Vectors 已经得到了众多计算引擎的 Native 对接。虽然在0.8版本时还不够完善,但在 0.9 版本之后得到了丰富,并与阿里云的一些产品集成。目前,已经对接了多个计算引擎,包括开源的 StarRocks、Doris,以及阿里云的产品如 Spark Native、Hologres、MaxCompute 和 Flink Native。

五、挑战二:生态

Paimon 的生态系统最初从 Flink Table Store 开始。Flink Table Store 0.1 版本在开发过程中投入了非常少的人力和时间,仅用了两三个月就完成了基本原型。

那么接下来两三年的核心任务就是生态系统的建设。生态系统的建设是一个复杂且缓慢的过程,涉及到多种计算引擎、Metastore、文件系统等各类适配和问题。在人力和资源有限的情况下,就只能选择最重要的计算引擎来覆盖生态系统。

上图右侧的圆圈展示了 Paimon 目前的生态系统。涵盖了多种计算引擎和平台,包括 Flink、Spark、StarRocks、Doris、Presto、Trino、Hive,以及阿里的 Hologres 和 MaxCompute。这些组件涵盖了流处理、批处理和 OLAP,还包括了阿里云自研的一些生态系统。

目前在国外比较流行的这个 Iceberg 有哪些生态呢?上图左边的圆内,包括 Amazon Athena、Dremio、Impala、BigQuery、Snowflake 和丰富的 Rust & Python库。

那这样子对比看来,Paimon 目前的生态系统在大数据计算领域,尤其是在国内的大数据计算领域,表现相对不错。然而,如果将其放在北美市场来看,情况则有所不同。北美拥有各种云计算引擎和众多服务计算厂商,满足了多样化的需求。此外,北美和中国在AI相关需求方面也有显著的差异,而这恰恰是 Paimon 目前所欠缺的领域。

那么如何让 Paimon 也同样拥有这些厂商的支持呢?

在0.9版本中,Paimon 引入了一个 Feature:Paimon 可以生成Iceberg Snapshots。由于 Iceberg 的大部分架构基础与 Paimon 的湖架构概念非常相似,这为 Paimon 提供了一个机会,即通过原生的Paimon 代码,而不依赖于 Iceberg,直接生成与 Iceberg 兼容的格式。这意味着在每次生成 Snapshots 时,都可以同时生成一份 Iceberg格式的副本。这使得通过Iceberg生态系统(如 BigQuery、Snowflake、Amazon Athena 等)来查询 Paimon 表变得更加简单,有利于 Paimon在北美市场的落地和使用。

然而,仅依靠 Iceberg 生态系统并不能完全展示 Paimon 的所有能力。例如,Paimon 拥有主键表和强大的 Merge Engine 功能,而这些是 Iceberg 表无法完全实现的。因此,Paimon 正在积极发展自己的多元生态系统,以更全面地展示其独特的技术能力和优势。

Paimon 社区最近发起了 Paimon Python 与 Paimon Rust 项目。

Paimon Python 基于 Py4j 封装 Java 实现,提供一个简单的实现,但它的性能却不是最优的。

而 Paimon Rust,一旦推出了第一个版本,就可以很容易地扩展出 Paimon 的 Python 版本。这将解锁 Python 和 Rust 的大部分生态系统,包括与 DataFusion 和DuckDB 的对接,以及 Python 在 AI 和大模型相关领域的应用。由于这些应用大多是用 Python 编写的代码,因此可以直接通过 Python 访问 Paimon 数据。

这种做法的好处是,使 Paimon Python 和 Paimon Rust 的发展,能够尽可能多地展示其独特的功能和优势。当然,不仅仅局限于此,Paimon 的 C++ 版本也在阿里内部孵化中,预计在十月份会推出 Paimon C++ 版本。

六、挑战三:对象存储

对象存储在运维、可扩展性和存储成本方面都有显著优势,尤其是在云端,它通常是更为经济的选择。因此,大部分阿里云上的业务都是基于对象存储构建的。然而,Paimon 能否直接将对象存储当作 HDFS 来使用,实际上仍存在一些差距。

如上表格展示了来自 Flink 社区的测试结果。表格中,从左到右展示了每次访问(RPS)的速度逐渐变慢的过程。

  1. 内存的访问速度是纳秒(ns)级别的;

  2. NVMe 的访问速度是微秒(us)级别的;

  3. ESSD 虽然稍微慢一些,但仍然是微秒级别的。

  4. HDFS 由于是分布式存储,访问速度需要经过网络,因此是毫秒(ms)级别的,通常在一两个毫秒左右。

  5. 然而,当我们看 OSS(对象存储服务)时,访问时间显著增加,达到二十几毫秒。

这意味着,如果 Paimon 有大量的小文件和碎片文件,并且需要单机节点去访问这些文件,那么访问速度将成为一个巨大的瓶颈。

所以如何消除 OSS 这种对象存储延迟的影响呢?

首先,在文件格式的选择上,要尽可能选择压缩率更高的格式。在内部和部分外部测试中发现,Parquet 格式的压缩率比 ORC 稍好一些。当然,这取决于具体的测试数据。因此,在0.9版本中,Paimon 将 Parquet 作为默认的开源文件格式。

在阿里云上,经过多年的沉淀,开发出了一种独立于 ORC 的新格式,称为 AliORC。内部测试显示,AliORC 的压缩率比 Parquet 更高。因此,今后在阿里云上推荐使用 AliORC,而在开源版本中则推荐使用 Parquet。

关于压缩算法,Paimon 在0.9版本中将默认压缩算法更改为 ZSTD。测试表明,无论是读写性能还是压缩率,ZSTD 在大部分场景下都优于 GZIP、LZ4 和 Snappy。

最后,在0.9 版本中,Paimon 研发了 Caching Catalog 功能。它会自动维护对 Database 的 Cache 和对 Table 的 Cache 来避免Schema的访问,以及也会自动维护 Manifest 文件的 Cache。经过一些测试发现,对于需要反复读取表的场景,Caching Catalog 能够带来整体性能三倍的提升。

对于0.9 版本,这里仅提及了部分内容。在此,非常感谢各公司开发者朋友们对 Paimon 贡献的各种 Features,使我们的 Paimon 社区变得更加壮大。希望大家继续关注我们 0.9 版本的发布过程,同时也期待大家对后续版本的持续支持和关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无人系统特刊合集(二)丨Springer特刊推荐

期刊推荐 期刊征稿:JOURNAL OF INTELLIGENT & ROBOTIC SYSTEMS Journal of Intelligent & Robotic Systems是一本同行评议的期刊,致力于智能系统和机器人技术的理论和实践。 专注于无人系统、机器人和自动化以及人机交互等领域。 在每期中都包…

天猫 登录滑块 淘系滑块分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关 前言 玩了几天现在才有空研究轨迹直接用了之前的…

日志组件导致的内存溢出问题分析

1、 内存溢出日志 普通的http请求,导致堆内存直接溢出,看了下代码实现非常简单的一次DB查询且数据量也比较小,不可能导致内存溢出呢 java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:3332) at…

网上花店设计+vue

TOC ssm017网上花店设计vue 绪论 1.1 选题背景 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。计算机软件可以针对不同行业的营业特点以及管理需求&a…

CSS3页面布局-三栏-中栏流动布局

三栏-中栏流动布局 用负外边距实现 实现三栏布局且中栏内容区不固定的核心问题就是处理右栏的定位&#xff0c; 并在中栏内容区大小改变时控制右栏与布局的关系。 控制两个外包装容器的外边距&#xff0c;一个包围三栏&#xff0c;一个包围左栏和中栏。 <!DOCTYPE html&…

计算机毕业设计 在线问诊系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

海运整箱成本与拼箱成本对比 | 国际贸易服务平台 | 箱讯科技

整箱和拼箱 在集装箱运输业务中&#xff0c;我们把一个集装箱、一个出口人、一个收货人、一个目的港&#xff0c;满足这“四个一”条件的货物叫做整箱货&#xff0c;而把一个集装箱、出口人、收货人和目的港这三项之中只要有一项是在两个或两个以上的出口运输货物&#xff0c;就…

批量将labelme的json文件转为png图片查看

文章目录 前提修改 l a b e l m e labelme labelme然后你就可以在这个环境下用代码批量修改了 前提 安装anaconda或者miniconda安装labelme 修改 l a b e l m e labelme labelme 查看labelme所处环境的路径&#xff1a;conda info --envs 比如我的是在py39_torch里面 修改la…

Anki自动生成语音

文章目录 前言安装插件制作音频一些注意事项语音消失现象不同端出现媒体文件丢失 参考文章 前言 已经实现了通过使用Obsidian实现Anki快速制卡。 对于语言学习&#xff0c;仅仅只有不同语言文字的对照是不够的&#xff0c;我们还需要声音。 所以就需要加入音频。 幸好 Anki…

laravel “Class \“Redis\“ not found“ 如何解决?

laravel “Class “Redis” not found” 如何解决 问题&#xff1a;laravel 安装好后&#xff0c;运行报错提示&#xff1a;“Class “Redis” not found” 分析&#xff1a;程序并没有用到redis&#xff0c;百度了一下&#xff0c;初步锁定可能是php环境的原因&#xff0c;运…

【数字ic自整资料】存储器及不同端口RAM对比

参考资料 【FPGA】zynq 单端口RAM 双端口RAM 读写冲突 写写冲突_双口ram-CSDN博客 华为海思数字芯片设计笔试第五套_10、下列不属于动志数组内建函数的是: a lengtho b. new c. delete() d-CSDN博客 目录 1、计算器典型存储体系结构 2、三种不同端口RAM &#xff08;1&…

钢包智慧管理平台

钢包智慧管理平台基于海康、大华视频监控&#xff0c;实现对钢包的全动态管理&#xff0c;实时检测钢包的温度数据变化&#xff0c;也可以随时查询时间区间内的钢包温度数据变化。 平台基于springboot vue前后台分离技术开发&#xff0c;视频基于zlmedia的转码拉流。实现了视频…

嵌入式学习day33

tcp的特点 面向字节流特点&#xff0c;会造成可能数据与数据发送到一块&#xff0c;成为粘包&#xff0c;数据之间不区分 拆包 因为缓冲区的大小&#xff0c;一次性发送的数据会进行拆分&#xff08;大小不符合的时候&#xff09; 就和水一样一次拆一次沾到一块&#xff0c…

快速入门Spring

目录 为什么要学Spring&#xff1a; Spring框架诞生的背景&#xff1a; Spring是什么&#xff1a; 接下来我们就要解决Spring怎么用这个问题 BeanFactory快速入门 IOC思想的体现 BeanFactory快速入门 DI思想的体现 开始学Spring时我们要了解以下几个问题 为什么要学习Sp…

深入理解滑动窗口算法及其经典应用

文章目录 什么是滑动窗口&#xff1f;经典题型分析与讲解**1. 长度最小的子数组****2. 无重复字符的最长子串****3. 最长重复子数组****4. 将x减到0的最小操作数**5. 水果成篮 (LeetCode 904)6. 滑动窗口最大值 (LeetCode 239)7. 字符串中的所有字母异位词 (LeetCode 剑指 Offe…

SAP S4HANA 2023 FPS01 FAA虚拟机发布了

SAP S4HANA 2023 FPS01 FAA虚拟机发布了。 系统不再需要修改虚拟机日期了&#xff0c;提供最高长达三年的许可&#xff0c;业务财务做账都是真实的时间&#xff01; 该虚拟机版本优点&#xff1a; 新版的一键启动脚本&#xff0c;3分钟就能启动完成。 内存加载 80GB 就可以启动…

二叉树检验:算法详解

问题描述 /** 检查二叉树是否为有效的二叉搜索树有效的二叉搜索树满足左子树的节点值都小于根节点值&#xff0c;右子树的节点值都大于根节点值并且左右子树也必须是有效的二叉搜索树param root 二叉树的根节点return 如果二叉树是有效的二叉搜索树&#xff0c;则返回true&…

当AI成为你的私人医生,与AI“医”路同行的奇妙体验

“ 从挂号到诊疗&#xff0c;再到后续的健康管理&#xff0c;人工智能&#xff08;AI&#xff09;正以一种全新的方式融入我们的生活。上海市第一人民医院的创新实践&#xff0c;便是这一变革的生动注脚。 ” AI就医助理&#xff1a;从“助手”到“伙伴” 当你踏入医院大门…

01-容器基础:从进程说起

本章内容包括&#xff1a; 容器是什么样的一种技术容器的边界是怎么实现的容器支持哪些Namespace容器的本质是什么虚拟机与容器 在开始本章之前&#xff0c;我希望你能理解这样一个道理&#xff1a;容器本身没有价值&#xff0c;有价值的是"容器编排"。 那么容器究竟…