随着大数据存储和处理需求越来越多样化,如何构建一个统一的数据湖存储,并在其上进行多种形式的数据分析,成了企业构建大数据生态的一个重要方向。如何快速、一致、原子性地在数据湖存储上构建起 Data Pipeline,成了亟待解决的问题。为此,Uber 开源了 Apache Hudi,Databricks 提出了 Delta Lake,而 Netflix 则发起了 Apache Iceberg项目,一时间这种具备 ACID 能力的表格式中间件成为了大数据、数据湖领域炙手可热的方向。
虽然现阶段国内仍然缺乏数据湖概念上的优秀商业方案,但在基础软件开源化的趋势下,国内企业在数据湖技术点上的探索与跟进并不比国外企业落后太多。腾讯在2018年加入大数据存储开源项目Apache Ozone,后又于2019年开始投入研发Apache Iceberg;阿里巴巴也正联合 Apache Iceberg 社区积极推动 Flink 实时数据湖技术方案的落地。那么,Iceberg和其他两个开源项目有何不同?为什么阿里和腾讯都在积极投入Iceberg的开源生态?Iceberg有什么独到之处?近期InfoQ采访了腾讯数据平台部数据湖内核技术负责人、资深大数据工程师邵赛赛,他与我们分享了腾讯选择Iceberg前后的一些思考和采用Iceberg之后所做的优化工作,本文基于采访整理而成。邵赛赛还将在QCon全球软件开发大会(北京站)2020带来主题为《Iceberg - 新一代的数据湖表格式》的演讲分享,感兴趣的读者可以关注。
数据库大牛、图灵奖获得者Michael Stonebraker曾在MapReduce诞生之初撰写过一篇文章,题为“MapReduce: A major step backwards”,Michael Stonebraker在文章中直截了当地指出:MapReduce忽视了数据库领域积累超过40年的技术经验。虽然大数据技术的出现和迭代降低了用户处理海量数据的门槛,但另一方面,与数据库这样高度优化的技术相比,大数据技术的抽象和实现还是太原始和初级。因此大数据技术在后续十几年的发展中,一直以数据库为目标,将更多数据库的成熟技术和理念借鉴到大数据中。
当前,大数据分析领域已经相当成熟,如何借鉴更多数据库的成熟技术和理念来提升大数据的能力呢?Apache Iceberg、Hudi和Delta Lake这三个定位类似的开源项目正是从数据库方法论中汲取了灵感,将事务能力带到了大数据领域,并抽象成统一的中间格式供不同引擎适配对接。
如何定义这类新技术?
简单地说,这类新技术是介于上层计算引擎和底层存储格式之间的一个中间层,我们可以把它定义成一种“数据组织格式”,Iceberg将其称之为“表格式”也是表达类似的含义。它与底层的存储格式(比如ORC、Parquet之类的列式存储格式)最大的区别是,它并不定义数据存储方式,而是定义了数据、元数据的组织方式,向上提供统一的“表”的语义。它构建在数据存储格式之上,其底层的数据存储仍然使用Parquet、ORC等进行存储。
Apache Iceberg、Hudi和Delta Lake诞生于不同公司,需要解决的问题存在差异,因此三者在设计初衷上稍有不同。
其中,Iceberg的设计初衷更倾向于定义一个标准、开放且通用的数据组织格式,同时屏蔽底层数据存储格式上的差异,向上提供统一的操作API,使得不同的引擎可以通过其提供的API接入;Hudi的设计初衷更像是为了解决流式数据的快速落地,并能够通过upsert语义进行延迟数据修正;Delta Lake作为Databricks开源的项目,更侧重于在Spark层面上解决Parquet、ORC等存储格式的固有问题,并带来更多的能力提升。
虽然这三个项目在设计初衷上稍有不同,但实现的思路和提供的能力却非常相似,他们都提供了ACID的能力,都基于乐观锁实现了冲突解决和提供线性一致性,同时相应地提供了time travel的功能。
但是因为设计初衷的不同,三个项目当前的能力象限各有不同,Iceberg在其格式定义和核心能力上最为完善,但是上游引擎的适配上稍显不足;Hudi基于Spark打造了完整的流式数据落地方案,但是其核心抽象较弱,与Spark耦合较紧;Delta Lake同样高度依赖于Spark生态圈,与其他引擎的适配尚需时日。不过邵赛赛认为,这三个项目现有的差异会随着社区的推动和改进以及时间的累积慢慢磨平,最终可能会变得更趋于相同。
腾讯在Iceberg还未进入Apache孵化器时就已经开始关注,随着这几个技术的开源以及进入孵化器,这一领域开始逐渐升温,从2019年下半年开始,腾讯正式在该技术上进行探索和投入。
谈及引入Iceberg的原因,邵赛赛表示,当时团队在构建大数据生态的过程中遇到了几个痛点,而Iceberg恰好能解决这几个痛点:
至于为何最终选择采用Iceberg,而不是其他两个开源项目,技术方面的考量主要有以下几点:
除去技术上的考量,邵赛赛和团队也对代码质量、社区等方面做了详细的评估:
从正式投入研发到现在,腾讯在开源版本的基础上对Iceberg进行了一些优化和改进,主要包括:
这些改进点提高了Iceberg在落地上的可用性,也为它在腾讯内部落地提供了更为吸引人的特性。同时腾讯也在积极拥抱社区,大部分的内部改进都已推往社区,一些内部定制化的需求也会以更为通用的方式贡献回社区。
目前团队正在积极尝试将Iceberg融入到腾讯的大数据生态中,其中最主要的挑战在于如何与腾讯现有系统以及自研系统适配,以及如何在一个成熟的大数据体系中寻找落地点并带来明显的收益。邵赛赛具体提到了以下几点:
Iceberg诞生的时间不长,虽然拥有高度抽象和非常优雅的设计,但功能上仍有不足,尤其在围绕生态系统的建立和周边能力的打造上还有很多工作需要做。邵赛赛认为,当前Iceberg最重要的缺失点是和上层引擎的对接。现在Iceberg和Spark的对接是最为完善的,但是由于DataSource V2 API仍在不断地改进中,对于一些语义的下推仍然缺失,因此能力上和内置的存储格式相比仍有欠缺(比如bucket join的支持)。而对于Hive、Flink的支持尚在开发中。因为Iceberg是一个统一的数据组织格式,想要全面使用的话必须使所有的上层引擎能够对接适配,因此这一块环节的补足是当前最为重要的。
其次,Iceberg缺少行级更新、删除能力。腾讯内部已经为Iceberg增加了行级更新、删除的能力,但在Iceberg社区尚未有这样的能力,这些能力所需的格式定义仍在设计中。行级更新、删除能力是现有数据组织格式的最大卖点,因此该功能的补强对于Iceberg的推广和落地十分重要。
在腾讯内部,后续对于Iceberg的规划主要还是以适配不同的引擎以及优化核心能力为主,同时会围绕Iceberg和上下游的引擎提供端到端的面向终端用户的数据管道能力。
目前相比于Hudi、Delta Lake,Iceberg在国内的关注度较少,这主要是由于其主要开发团队在技术推广和运营上面的工作偏少,而且Iceberg的开发者多为海外开发者,但是现在已经有越来越多大公司加入到了Iceberg的贡献中,包括Netflix、Apple、Adobe、Expedia等国外大厂,也包括腾讯、阿里、网易等国内公司。邵赛赛非常看好Iceberg未来在国内发展的前景,在他看来,一个好的技术架构可能暂时不引人瞩目,但最终还是会得到更多人的认可。随着国内推广的增多,以及国内开发者在这个项目上的投入、运营,未来在国内Iceberg前景可期。
嘉宾介绍:
邵赛赛,腾讯数据平台部数据湖内核技术负责人,资深大数据工程师,Apache Spark PMC member & committer, Apache Livy PMC member,曾就职于 Hortonworks,Intel 。
领取专属 10元无门槛券
私享最新 技术干货