持续定义SaaS模式云数据仓库+Serverless

导读:今天主要和大家交流的是网易在数据湖 Iceberg 的一些思考与实践。从网易在数据仓库建设中遇到的痛点出发,介绍对数据湖 Iceberg 的探索以及实践之路。

主要内容包括:

  1. 数据仓库平台建设的痛点
  2. 数据湖 Iceberg 的核心原理
  3. 数据湖 Iceberg 社区现状
  4. 网易数据湖 Iceberg 实践之路

01 数据仓库平台建设的痛点

痛点一:

1.jpg

我们凌晨一些大的离线任务经常会因为一些原因出现延迟,这种延迟会导致核心报表的产出时间不稳定,有些时候会产出比较早,但是有时候就可能会产出比较晚,业务很难接受。

为什么会出现这种现象的发生呢?目前来看大致有这么几点要素:

  • 任务本身要请求的数据量会特别大。通常来说一天原始的数据量可能在几十TB。几百个分区,甚至上千个分区,五万+的文件数这样子。如果说全量读取这些文件的话,几百个分区就会向 NameNode 发送几百次请求,我们知道离线任务在凌晨运行的时候,NameNode 的压力是非常大的。所以就很有可能出现 Namenode 响应很慢的情况,如果请求响应很慢就会导致任务初始化时间很长。
  • 任务本身的 ETL 效率是相对低效的,这个低效并不是说 Spark 引擎低效,而是说我们的存储在这块支持的不是特别的好。比如目前我们查一个分区的话是需要将所有文件都扫描一遍然后进行分析,而实际上我可能只对某些文件感兴趣。所以相对而言这个方案本身来说就是相对低效的。
  • 这种大的离线任务一旦遇到磁盘坏盘或者机器宕机,就需要重试,重试一次需要耗费很长的时间比如几十分钟。如果说重试一两次的话这个延迟就会比较大了。

痛点二:

2.jpg

针对一些细琐的一些问题而言的。这里简单列举了三个场景来分析:

  • 不可靠的更新操作。我们经常在 ETL 过程中执行一些 insert overwrite 之类的操作,这类操作会先把相应分区的数据删除,再把生成的文件加载到分区中去。在我们移除文件的时候,很多正在读取这些文件的任务就会发生异常,这就是不可靠的更新操作。
  • 表 Schema 变更低效。目前我们在对表做一些加字段、更改分区的操作其实是非常低效的操作,我们需要把所有的原始数据读出来,然后在重新写回去。这样就会非常耗时,并且低效。
  • 数据可靠性缺乏保障。主要是我们对于分区的操作,我们会把分区的信息分为两个地方,HDFS 和 Metastore,分别存储一份。在这种情况下,如果进行更新操作,就可能会出现一个更新成功而另一个更新失败,会导致数据不可靠。

痛点三:

3.jpg

基于 Lambda 架构建设的实时数仓存在较多的问题。如上图的这个架构图,第一条链路是基于 kafka 中转的一条实时链路(延迟要求小于5分钟),另一条是离线链路(延迟大于1小时),甚至有些公司会有第三条准实时链路(延迟要求5分钟~一小时),甚至更复杂的场景。

  • 两条链路对应两份数据,很多时候实时链路的处理结果和离线链路的处理结果对不上。
  • Kafka 无法存储海量数据, 无法基于当前的 OLAP 分析引擎高效查询 Kafka 中的数据。
  • Lambda 维护成本高。代码、数据血缘、Schema 等都需要两套。运维、监控等成本都非常高。

痛点四:

4.jpg

不能友好地支持高效更新场景。大数据的更新场景一般有两种,一种是 CDC ( Change Data Capture) 的更新,尤其在电商的场景下,将 binlog 中的更新删除同步到 HDFS 上。另一种是延迟数据带来的聚合后结果的更新。目前 HDFS 只支持追加写,不支持更新。因此业界很多公司引入了 Kudu。但是 Kudu 本身是有一些局限的,比如计算存储没有做到分离。这样整个数仓系统中引入了 HDFS、Kafka 以及 Kudu,运维成本不可谓不大。

5.jpg

上面就是针对目前数仓所涉及到的四个痛点的大致介绍,因此我们也是通过对数据湖的调研和实践,希望能在这四个方面对数仓建设有所帮助。接下来重点讲解下对数据湖的一些思考。

02 数据湖 Iceberg 核心原理

1. 数据湖开源产品调研

6.jpg

数据湖大致是从19年开始慢慢火起来的,目前市面上核心的数据湖开源产品大致有这么几个:

  • DELTA LAKE,在17年的时候 DataBricks 就做了 DELTA LAKE 的商业版。主要想解决的也是基于 Lambda 架构带来的存储问题,它的初衷是希望通过一种存储来把 Lambda 架构做成 kappa 架构。
  • Hudi ( Uber 开源 ) 可以支持快速的更新以及增量的拉取操作。这是它最大的卖点之一。
  • Iceberg 的初衷是想做标准的 Table Format 以及高效的 ETL。

7.jpg

上图是来自 Flink 团体针对数据湖方案的一些调研对比,总体来看这些方案的基础功能相对都还是比较完善的。我说的基础功能主要包括:

  • 高效 Table Schema 的变更,比如针对增减分区,增减字段等功能
  • ACID 语义保证
  • 同时支持流批读写,不会出现脏读等现象
  • 支持 OSS 这类廉价存储

2. 当然还有一些不同点:

Hudi 的特性主要是支持快速的更新删除和增量拉取。
Iceberg 的特性主要是代码抽象程度高,不绑定任何的 Engine。它暴露出来了非常核心的表层面的接口,可以非常方便的与 Spark/Flink 对接。然而 Delta 和 Hudi 基本上和 Spark 的耦合很重。如果想接入 Flink,相对比较难。

3. 我们选择 Iceberg 的原因:

现在国内的实时数仓建设围绕 Flink 的情况会多一点。所以能够基于 Flink 扩展生态,是我们选择 Iceberg 一个比较重要的点。
国内也有很多基于 Iceberg 开发的重要力量,比如腾讯团队、Flink 官方团队,他们的数据湖选型也是 Iceberg。目前他们在社区分别主导 update 以及 Flink 的生态对接。

4. 接下来我们重点介绍一下 Iceberg:

8.jpg

这是来自官方对于 Iceberg 的一段介绍,大致就是 Iceberg 是一个开源的基于表格式的数据湖。关于 table format 再给大家详细介绍下:

9.jpg

左侧图是一个抽象的数据处理系统,分别由 SQL 引擎、table format、文件集合以及分布式文件系统构成。右侧是对应的现实中的组件,SQL 引擎比如 HiveServer、Impala、Spark 等等,table format 比如 Metastore 或者 Iceberg,文件集合主要有 Parquet 文件等,而分布式文件系统就是 HDFS。

对于 table format,我认为主要包含4个层面的含义,分别是表 schema 定义(是否支持复杂数据类型),表中文件的组织形式,表相关统计信息、表索引信息以及表的读写 API 实现。详述如下:

  • 表 schema 定义了一个表支持字段类型,比如 int、string、long 以及复杂数据类型等。
  • 表中文件组织形式最典型的是 Partition 模式,是 Range Partition 还是 Hash Partition。
  • Metadata 数据统计信息。
  • 封装了表的读写 API。上层引擎通过对应的API读取或者写入表中的数据。

和 Iceberg 差不多相当的一个组件是 Metastore。不过 Metastore 是一个服务,而 Iceberg 就是一个 jar 包。这里就 Metastore 和 Iceberg 在表格式的4个方面分别进行一下对比介绍:

① 在 schema 层面上没有任何区别:

10.jpg

都支持 int、string、bigint 等类型。

② partition 实现完全不同:

11.jpg

两者在 partition 上有很大的不同:

metastore 中 partition 字段不能是表字段,因为 partition 字段本质上是一个目录结构,不是用户表中的一列数据。基于 metastore,用户想定位到一个 partition 下的所有数据,首先需要在 metastore 中定位出该 partition 对应的所在目录位置信息,然后再到 HDFS 上执行list命令获取到这个分区下的所有文件,对这些文件进行扫描得到这个 partition 下的所有数据。

Iceberg 中 partition 字段就是表中的一个字段。Iceberg 中每一张表都有一个对应的文件元数据表,文件元数据表中每条记录表示一个文件的相关信息,这些信息中有一个字段是 partition 字段,表示这个文件所在的 partition。

很明显,Iceberg 表根据 partition 定位文件相比 metastore 少了一个步骤,就是根据目录信息去 HDFS 上执行 list 命令获取分区下的文件。

试想,对于一个二级分区的大表来说,一级分区是小时时间分区,二级分区是一个枚举字段分区,假如每个一级分区下有30个二级分区,那么这个表每天就会有24 * 30 = 720个分区。基于 Metastore 的 partition 方案,如果一个 SQL 想基于这个表扫描昨天一天的数据的话,就需要向 Namenode 下发720次 list 请求,如果扫描一周数据或者一个月数据,请求数就更是相当夸张。这样,一方面会导致 Namenode 压力很大,一方面也会导致 SQL 请求响应延迟很大。而基于 Iceberg 的 partition 方案,就完全没有这个问题。

③ 表统计信息实现粒度不同:

12.jpg

Metastore 中一张表的统计信息是表/分区级别粒度的统计信息,比如记录一张表中某一列的记录数量、平均长度、为 null 的记录数量、最大值最小值等。

Iceberg 中统计信息精确到文件粒度,即每个数据文件都会记录所有列的记录数量、平均长度、最大值最小值等。

很明显,文件粒度的统计信息对于查询中谓词(即 where 条件)的过滤会更有效果。

④ 读写 API 实现不同:

13.jpg

metastore 模式下上层引擎写好一批文件,调用 metastore 的 add partition 接口将这些文件添加到某个分区下。

14.jpg

Iceberg 模式下上层业务写好一批文件,调用 iceberg 的 commit 接口提交本次写入形成一个新的 snapshot 快照。这种提交方式保证了表的 ACID 语义。同时基于 snapshot 快照提交可以实现增量拉取实现。

总结下 Iceberg 相对于 Metastore 的优势:

  • 新 partition 模式:避免了查询时n次调用 namenode 的 list 方法,降低 namenode 压力,提升查询性能
  • 新 metadata 模式:文件级别列统计信息可以用来根据 where 字段进行文件过滤,很多场景下可以大大减少扫描文件数,提升查询性能
  • 新 API 模式:存储批流一体
    1. 流式写入-增量拉取(基于 Iceberg 统一存储模式可以同时满足业务批量读取以及增量订阅需求)
    1. 支持批流同时读写同一张表,统一表schema,任务执行过程中不会出现 FileNotFoundException

Iceberg 的提升体现在:

15.jpg

03 数据湖 Iceberg 社区现状

16.jpg

目前 Iceberg 主要支持的计算引擎包括 Spark 2.4.5、Spark 3.x、Flink 1.11 以及 Presto。同时,一些运维工作比如 snapshot 过期、小文件合并、增量订阅消费等功能都可以实现。

对于 Apache Flink 来说,Apache Iceberg 是 delta、iceberg、hudi 三个开源项目中最先完成 Flink 接入的开源项目。通过 Flink 来完成实时导入数据到 Iceberg 数据湖、通过 Flink batch 作业来读取 Iceberg 数据,这两个核心功能将在 Apache Iceberg 0.10.0 版本发布(预计将在10月底发布)。对 Flink+iceberg 集成工作感兴趣的同学,可以参考 Apache Iceberg 社区的使用文档。

https://github.com/apache/iceberg/blob/master/site/docs/flink.md

按照目前的研发进度,我们预计实时写入和读取 CDC 数据这个功能,将在 Iceberg 的0.11.0版本发布。

04 网易数据湖 Iceberg 实践之路

17.jpg

Iceberg 针对目前的大数量的情况下,可以大大提升 ETL 任务执行的效率,这主要得益于新 Partition 模式下不再需要请求 NameNode 分区信息,同时得益于文件级别统计信息模式下可以过滤很多不满足条件的数据文件。

18.jpg

当前 Iceberg 社区仅支持 Spark 2.4.5,我们在这个基础上做了更多计算引擎的适配工作。主要包括如下:

  • 集成 Hive。可以通过 Hive 创建和删除 iceberg 表,通过 HiveSQL 查询 Iceberg 表中的数据。
  • 集成 Impala。用户可以通过 Impala 新建 iceberg 内表外表,并通过 Impala 查询 Iceberg 表中的数据。目前该功能已经贡献给 Impala 社区。
  • 集成 Flink。已经实现了 Flink 到 Iceberg 的 sink 实现,业务可以消费 kafka 中的数据将结果写入到 Iceberg 中。同时我们基于 Flink 引擎实现了小文件异步合并的功能,这样可以实现 Flink 一边写数据文件,一边执行小文件的合并。基于 Iceberg 的小文件合并通过 commit 的方式提交,不需要删除合并前的小文件,也就不会引起读取任务的任何异常。

作者介绍:

范欣欣,网易大数据技术专家。他与 Apache HBase PMC 成员、阿里巴巴技术专家胡争合著的新书《HBase 原理与实践》,这也是业界第一本专门阐述 HBase 原理的书。

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

HttpClient 添加 Header http工具类

文章目录1. 常用依赖2. 工具类1. 常用依赖 <!--httpClient Start--><!--httpClient 文件上传 Start--><!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency><groupId>commons-fileupload</groupI…

循序渐进db2 第3版_「图书推荐」焊接工程师手册第3版

机械工业出版社陈祝年 陈茂爱 著内容介绍《焊接工程师手册》(第3版)是焊接专业的综合性工具书&#xff0c;基本涵盖了焊接专业的技术内容。本版在保留第2版精华和特色的基础上添加了先进的工艺技术内容。全书共9篇58章。第1篇汇集了焊接工程师最常用而又不易记忆的符号、公式和…

阿里云推出业内首个云原生企业级数据湖解决方案:将在今年双11大规模应用

简介&#xff1a; 数据湖高峰论坛在京召开&#xff0c;阿里云宣布推出业内首个云原生企业级数据湖解决方案&#xff0c;提供EB级数据存储、分析能力&#xff0c;可一站式实现湖存储、湖加速、湖管理、湖计算&#xff0c;帮助企业对数据深入挖掘与分析&#xff0c;洞察其中蕴含的…

云原生时代,阿里云联手博睿数据让IT运维可观测更智能

随着全球信息产业的变革&#xff0c;企业信息化的建设步伐不断加快&#xff0c;企业 IT 系统建设趋于完善&#xff0c;随之而来的是IT 系统日益庞大与复杂化&#xff0c;企业 IT 需求逐渐维护上往 IT 维护倾斜。据中商产业研究院发布的《2020-2025 年中国 IT 运维管理行业市场前…

Serverless对研发效能的变革和创新

对企业而言&#xff0c;Serverless 架构有着巨大的应用潜力。随着云产品的完善&#xff0c;产品的集成和被集成能力的加强&#xff0c;软件交付流程自动化能力的提高&#xff0c;我们相信在 Serverless 架构下&#xff0c;企业的敏捷性有 10 倍提升的潜力。本次分享我主要分为以…

java 携带.crt证书 发送https请求

文章目录一、CURL 方式1. 普通参数2. json参数3. 跳过ssl证书校验二、安装证书1. windows2. linux三、java 请求3.1. form和json方法3.2. 跳过证书请求一、CURL 方式 1. 普通参数 curl -d "grant_typepassword&client_idSmartRest&client_secret594a27f3-4432-4…

c3p0 服务启动获取连接超时_微服务架构中的熔断、降级

微服务架构中熔断和降级是保证服务高可用的一项重要功能点&#xff0c;微服务区别于一体化项目的最大区别也再于熔断和降级&#xff0c;很多微服务项目的开发人员对熔断的理解就是当服务不可用的时候&#xff0c;为了让整体服务可以正常运行&#xff0c;需要让后续的请求直接返…

重塑APM标杆,博睿数据战略升级助力企业数字化转型

&#xff08;博睿数据发布仪式&#xff09; 2021年5月26日&#xff0c;由博睿数据举办的“服务可达 达者为先博睿数据2021年战略升级发布巡展”北京站&#xff0c;在北京金茂威斯汀大饭店圆满举行&#xff01;本次战略升级发布巡展不仅揭开了“数据链DNA”的神秘面纱&#xff…

持续定义SaaS模式云数据仓库+数据银行

简介&#xff1a; 本文将介绍SaaS模式云数据仓库MaxCompute&#xff0c;如何助力数据银行SaaS模式云战略和一体化数据开放场景介绍。 一、云数据仓库 本章节介绍云数据仓库带来的价值及解决方案。 MaxCompute&#xff1a;SaaS模式企业级云数据仓库的应用场景包括广告场景-用…

2020-10-28

Kubernetes的门户-Ingress 目前Kubernetes&#xff08;K8s&#xff09;已经真正地占领了容器编排市场&#xff0c;是默认的云无关计算抽象&#xff0c;越来越多的企业开始将服务构建在K8s集群上。在K8s中&#xff0c;组件通过Service对外暴露服务&#xff0c;常见的包括NodePo…

centos 查找nginx_Linux下查看Nginx安装目录、版本号信息及当前运行的配置文件

Linux环境下&#xff0c;怎么确定Nginx是以那个config文件启动的&#xff1f;输入命令行&#xff1a; ps -ef | grep nginx摁回车&#xff0c;将出现如下图片&#xff1a;master process 后面的就是 nginx的目录。怎么查看服务器上安装的nginx版本号&#xff0c;主要是通过ngi…

530并行日:用超算更省心

科技兴&#xff0c;则民族兴&#xff1b;科技强&#xff0c;则国家强。 从“神舟”飞天、“蛟龙”入海、“天眼”遥看宇宙&#xff0c;到“嫦娥”奔月、“天问”探火、“量子”惊叹世界&#xff0c;这些世人瞩目的科技成就背后&#xff0c;是一代又一代的中国科技工作者前赴后继…

Flink SQL 1.11 on Zeppelin 平台化实践

简介&#xff1a; 鉴于有很多企业都无法配备专门的团队来解决 Flink SQL 平台化的问题&#xff0c;那么到底有没有一个开源的、开箱即用的、功能相对完善的组件呢&#xff1f;答案就是本文的主角——Apache Zeppelin。 作者&#xff1a;LittleMagic 大数据领域 SQL 化开发的风…

控件设置相对位置_惊人的Divi转换控件!

Divi的变换控件释放了许多新的设计可能你可以使用一系列新设计选项来执行惊人的设计&#xff0c;而到目前为止&#xff0c;只有在诸如Photoshop之类的图形设计程序中才可以这样操作。Divi引入了一项全新功能&#xff0c;该功能允许在Divi Builder中进行惊人的徒手设计&#xff…

第三代英特尔至强可扩展处理器,英特尔数据中心的“芯法宝”

作者 | 宋 慧 出品 | CSDN云计算 头图 | 付费下载于东方IC 距离英特尔发布第三代至强可扩展处理器Ice Lake的全系列产品&#xff0c;已经过去一个多月了。全新一代的至强处理器除了核数增加、性能提升与架构升级以外&#xff0c;还首次将SGX英特尔软件防护扩展技术&#xff08…

谈谈我对零售云在云原生总结与思考

简介&#xff1a; 云原生是零售云的最重要的技术底座&#xff0c;云原生是什么&#xff0c;会走向哪里&#xff0c;在零售2B交付的场景上该如何应用&#xff0c;怎么能够结合帮助建设零售云系列产品体系&#xff0c;值得我们的思考和探索&#xff0c;也将有效指导我们接下来几年…

oracle查看编码

select * from nls_database_parameters where parameter NLS_CHARACTERSET;

类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换

在游戏开发中&#xff0c;配置表是不可少的。通常我们将一个类&#xff0c;做成一个配置表&#xff0c;将配置表每列的索引都和类的字段名严格对应起来。先实例化一个类的对象&#xff0c;然后通过反射来遍历类中的字段&#xff0c;通过field.SetValue()给类的对象赋值。但是配…

人工智能如何提升大数据存储与管理效率?

简介&#xff1a; 通过使用AI数据存储&#xff0c;供应商和企业可以将存储管理提升到一个新的水平。而且&#xff0c;存储管理员可以找到他们目前正在努力管理的指标的解决方案。 随着大数据的大量来源以及企业可用数据量的增加&#xff0c;存储容量规划已成为存储管理员的问题…

wildfly10 (JBoss)如何部署SSL证书

文章目录1. 证书下载2. 证书配置2. 效果验证项目用的wildfly-10.1.0.Final。需要用到SSL证书&#xff0c;把部署过程记录下来&#xff0c;以供参考。1. 证书下载 本文的证书申请都来自阿里云。 1.首先把你的域名做好解析。 2.从阿里云上下载申请的SSL证书&#xff0c;类型选择…