【LakeHouse】Apache Iceberg + Amoro 助力网易构建云原生湖仓

Apache Iceberg + Amoro 助力网易构建云原生湖仓

  • 1.云原生湖仓背景与挑战
  • 2.Apache Iceberg 、Amoro 与云原生
    • 2.1 Apache Iceberg
    • 2.2 Amoro 简介
  • 3.Apache Iceberg + Amoro 云原生实践
    • 3.1 云上湖仓案例一
    • 3.2 云上湖仓案例二
    • 3.3 云上湖仓案例三
  • 4.Amoro 未来发展规划

在这里插入图片描述

出品社区|DataFun
分享嘉宾|张永翔 网易数帆 资深平台开发工程师

1.云原生湖仓背景与挑战

湖仓一体的发展经历了从数据仓库到数据湖,最终到湖仓一体的过程。传统的数仓针对的是结构化数据,面向特定的分析或者报表场景,提供标准的 SQL 与标准的服务。随着业务规模的扩大,复杂性提升,对于半结构化、非结构化的数据存储和处理的需求涌现,催生了数据湖技术的发展。数据湖是在廉价的存储系统上,使用各种工具,满足各种数据类型的业务需求。这种非标准化的处理带来了管理成本和开发成本的上升。湖仓一体顺应而生,它是基于数据服务技术开发的廉价的系统,同时能够构建结构化数据的处理能力。
在这里插入图片描述
湖仓一体的主要特点满足了人们对它的期望,可以归纳为四点:

  • 低成本存储。不仅可以降低数据存储的成本,另一方面也可以消除数据孤岛,比如同时满足流式场景和非流的场景,能够在一个没有数据孤岛的体系下使用不同的数仓来处理不同的业务。
  • 结构化数据处理。需要提供如 schema 变更时的安全的结构定义和演进,并保障安全的数据读写与隔离。
  • 开放式计算架构。原有的数据仓库计算场景比较单一,主要是 MPP 计算架构,而现在需要支持如流式计算、图计算等多样的计算引擎来满足不同类型的计算场景的需求。
  • 标准化度量。一方面是数据的标准的访问,可以像传统数仓一样通过 SQL 对数据进行标准化的访问,同时也提供对 catalog、服务权限控制等标准化的数据管理。

基于云构建湖仓一体主要优势 有两大方面:

  • 一是 性价比,上云的目标是降本,云上提供了廉价且可靠的存储服务,数据湖技术基于廉价的存储系统,云上对象存储服务是最适合构建数据湖的存储系统。
  • 二是 灵活性弹性扩缩容 是云的核心特性,无需提前采购,根据需求灵活扩缩容是云上的常见用法,数据湖技术要求存算分离,业务计算任务根据需求可以灵活扩容,天然适合云原生架构。

构建湖仓一体也面临着 诸多挑战,比如:

  • Hadoop 体系上云,存算合一架构资源利用率不高,DataNode 节点无法快速扩缩容;
  • 对象存储服务通常无法提供完整的 HDFS 语义,兼容 HDFS 协议可能需要引入额外组件带来额外的运维成本;
  • 云上计算集群更偏向 K8s 集群,从 Yarn 到 K8s 切换需要有一定实践经验;
  • 元数据中心上云也面临着挑战,云厂商会提供自己的元数据中心,不一定与 Hive 兼容;
  • 云厂商提供的部分服务为非标服务,可能存在与某个云厂家绑定的风险。

2.Apache Iceberg 、Amoro 与云原生

2.1 Apache Iceberg

Apache Iceberg 是数据湖上的 开放表格式,它具有以下特点:
在这里插入图片描述
Apache Iceberg 本身的特性贴合云原生。

首先,Apache Iceberg 使用去中心化的元数据组织。采用 Metadata file 索引数据文件,并且在元数据文件中记录了数据文件的 Metric 信息,以提供高效的 File Skip。不同于传统 Hive 采用一个中心化的方式来去处理这些元数据。Metadata 文件和数据文件一起存储到数据湖中,这使得 Iceberg 可以轻松地弹性扩展。
在这里插入图片描述
其次,Iceberg 不依赖于 HDFS 的存储层抽象。Iceberg 对于数据文件和 Metadata 文件的访问进行了抽象,使其避免依赖于某种存储系统(比如 Hadoop)的实现,这使得 Iceberg 可以轻松对接各种云商的对象存储系统。
在这里插入图片描述

lceberg 定义了一套开放的 Catalog 接口。通过标准的 Catalog 接口对接外部的元数据,使得 Iceberg 可以轻易对接 Hive 以及各种云上的元数据服务。

Iceberg 还定义了标准的 Rest Catalog API,提供了 Rest Catalog API 的服务可以零成本地接入 Iceberg。
在这里插入图片描述

2.2 Amoro 简介

Amoro 定位为 基于开放湖表格式的湖仓一体管理系统。首先,它是基于开放的数据库表格式,Amoro 本身并不是一种表格式,而是构建在 Iceberg 等数据湖格式之上的 管理系统。其次,Amoro 提供了很多可插拔的组件,如 元数据中心调度管理系统pipeline 优化 等。构建了与基础设施无关的一种服务,底层也并不去绑定某种特定的技术或者云厂商。Amoro 是为了在云上提供一种与基础设施无关的标准化的湖仓一体化管理系统。
在这里插入图片描述

Amoro 的 核心功能Catalog Services 0.5 0.5 0.5 版本里面提供了 internal Catalogexternal Catalog 两种类型。符合 Iceberg Rest Catalog API 接口的 Internal Catalog 服务,在云上部署时可以直接使用 Amoro 服务作为元数据中心。同时具有对接外部 catalog 服务的能力。如果业务有集成 EMR 的需求,业务根据需要将 Iceberg 表注册到任意外部元数据中心,Amoro 均可与其对接,并进行 Iceberg 表的管理。
在这里插入图片描述

Amoro 另一个核心功能是 Self-Optimizing。流计算场景下,数据湖表的治理成为核心需求。随着流式写入,它必然带来小文件问题,进而带来查询的性能问题,甚至有可能因为小文件或者 delete 文件太多,造成表不可用。Amoro 数据湖表提供了开箱即用的治理的能力。Amoro 会自动发现注册在 Catalog 中的数据湖表,自动地持续地去监测数据服务表的小文件以及 data 文件的数量,然后对整个表中的文件数据量进行评估,自动根据优先级优化任务调度,达到开箱即用的对数据湖表的文件治理。
在这里插入图片描述
Self-Optimizing 的机制如下图所示,依据 iceberg 表,将文件划分为 fragment 区域和 segment 区域。Amoro 根据 target-sizefragment-ratio 将文件划分为 fragment filessegment files

target-size 128 m b 128mb 128mb 时,fragment-ratio 设置为 8 8 8,就认为是 128 m b 128mb 128mb 1 / 8 1 / 8 1/8,也就是 16 m b 16mb 16mb。小于 16 m b 16mb 16mb 的文件,我们认为它是属于 fragment file,而大于 16 m b 16mb 16mb 的则认为是 segment file。在流式写入的场景中,频繁写入的文件通常都是比较小,需要频繁的 commit,这些都属于 fragment files。下面是两种文件的特点:

  • Fragment files
    • 新写入的文件,碎片较小
    • 关联了大量 eq-delete 文件
    • 对查询性能影响大,需要优先合并
  • Segement files
    • 初步合并后的文件,碎片化不严重
    • 通常只关联 pos-delete 文件
    • 对查询性能影响较小

在这里插入图片描述

Amoro 中,Self Optimizing 分成三种类型:Minor optimizeMajor optimizeFull optimize

  • Minor optimize 是从 fragment filesegment file 的转换,把碎片化的小文件转换成非碎片化的文件,合并成大于 16mb 的文件,同时最重要的是做出了这种 eq-delete 操作,它会使 segment file 上面只关联 pos-delete。大幅提升了 Iceberg 表的查询效率。
  • Major optimize 是做 segment file 内部的转化,部分消除 pos-delete 文件,进一步去碎片化。
  • Full optimize 是一种特殊的 optimize 类型,它根据用户的配置,比如一天执行一次,会直接把表上的文件合并成期望的 target-size 设置的大小,最终会消除所有的 delete 文件,全部转成 data file

在这里插入图片描述

Self Optimizing 是自动的、异步的、长期存在的操作,必然会牵涉到资源的管理问题。Optimizing 资源管理是 基于 Group 的资源隔离和共享。Amoro 本身有一个角色 AMS(Amoro Management Service),会对 Optimizing 计算资源进行管理,Amoro 将 Optimizing 的计算资源通过 Optimizer group 划分。通过设置表上 properties self-optimizing.group,每个 Iceberg 表均属于某个 group。Group 间计算资源相互隔离,互不影响。Group 内部,通过 Quota 分配每个表可以占有的计算资源比例,达到计算资源在不同表之间的隔离或者共享。
在这里插入图片描述

Self Optimizing 定义了插件式的 Optimizer Container,轻松扩展各种类型的计算集群。它本身是一个抽象框架,内置实现了 Local ContainerFlink Container

  • Local Container 是本地的基于 JVM 进程的一个 optimize 的进程。
  • Flink Container 是以 Flink 任务的方式去提交,可以当作一个 Flink 集群来使用。
  • Self Optimizing 实现了 Yarn 和 K8s 两种最通用的计算集群。同时 Self Optimizing 还提供了 External Container,可以通过外部注册的方式,向 AMS 直接注册用户自定义的计算集群类型。
  • Optimizer 还支持弹性扩容,提交新的 optimizer 即可扩容 group 下的并发能力。

在这里插入图片描述

Amoro 提供了可视化的 Web 管理平台,方便管理员轻松管理 Table、Resource 等资源和 Optimizing 任务。
在这里插入图片描述
最后,针对前文中提到的建设云原生湖仓的挑战,总结出了 Amoro 和 Apache Iceberg 解决方案的优势。
在这里插入图片描述

3.Apache Iceberg + Amoro 云原生实践

3.1 云上湖仓案例一

下面介绍网易的一个实践案例,它是网易内部的一个出海业务,出于合规性的要求,需要上 AWS。对原本基于 Hive 的湖仓体系进行改造上云。在改造前为典型的 Hadoop + Hive 架构,计算依赖于 Hive SQL,Yarn 作为整个平台的计算集群,数据存储在 HDFS 集群中,HMS 为元数据中心。

改造完成了原有 Hive SQL 任务到 Spark SQL 任务的迁移。将计算集群从 Yarn 迁移到了 AWS EKS 集群,通过 Spark 适配 K8s 集群,充分利用弹性计算资源,并在 S3 上搭建 Alluxio 集群适配 HDFS 接口。新接入业务使用了 Iceberg 表,并使用 HMS 充当元数据中心。同时,使用 Amoro 负责对 Iceberg 湖表进行持续优化,并通过 Flink Optimizer 适配 K8s 集群。
在这里插入图片描述
在这里插入图片描述

3.2 云上湖仓案例二

第二个案例为某外企,基于 AWS S3 + Iceberg 构建湖仓一体。原有架构是基于 Iceberg + S3 直接构建湖仓一体,采用 AWS Glue 为元数据中心,融合 AWS EMR 系统。AWS EKS 为计算集群,构建弹性计算集群。在这里使用 Amoro 的AMS 对湖表进行管理和持续优化,通过发挥 Iceberg 直接对接 S3 的优势,减少了 Hadoop 体系的维护成本。
在这里插入图片描述

3.3 云上湖仓案例三

第三个案例使用 Amoro AMS 做元数据中心,采用 S3 + Iceberg 构建湖仓一体。在这个案例中通过 Iceberg Rest Catalog 与 Amoro AMS 对接。计算集群保持不变继续使用 AWS EKS 构建弹性计算集群。Amoro 既作为湖仓的元数据中心,也实现了对 optimizer 的管理。
在这里插入图片描述

4.Amoro 未来发展规划

最后,分享一下 Amoro 的未来规划。

  • 首先,将会支持更多的数据湖格式,如 Paimon、Hudi 等。
  • 第二,是 提供动态的 optimize 调度的能力,除了当前的 Full optimizing 以外,未来还会支持基于 Order 的 optimizing,会提供以 batch 的方式去运行的能力。
  • 第三,Amoro 将 提供标准的命令工具,在数据湖上提供标准的源数据访问方式,可以对各种类型的数据图表进行统一的查看和运维指令的接入。
  • 最后,Amoro 计划做 统一权限模型,会适配 Ranger 和 AWS,或者国内其它云厂商的权限系统,提供统一的元数据和运维指令接口。

在这里插入图片描述

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

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

相关文章

【代码随想录——回溯算法二周目】

1. 组合总和 var (path []intres [][]int )func combinationSum(candidates []int, target int) [][]int {path make([]int, 0)res make([][]int, 0)dfs(candidates,target,0,0)return res }func dfs(candidates []int, target int,tempTarget int,start int) {if tempTarg…

Django-auth组件

Django-auth组件 1 表结构 我们从python manage.py migrate为我们创建的auth组件内置的表开始看 auth_user:用户表存储用户信息(登录admin后台) 里面的字段分两类:用户基本信息(用户名,邮箱,密…

华为OD机试【找出通过车辆最多颜色】(java)(100分)

1、题目描述 在一个狭小的路口,每秒只能通过一辆车,假设车辆的颜色只有 3 种,找出 N 秒内经过的最多颜色的车辆数量。 三种颜色编号为0 ,1 ,2。 2、输入描述 第一行输入的是通过的车辆颜色信息[0,1,1,2] &#xff0…

Three.js——二维平面、二维圆、自定义二维图形、立方体、球体、圆柱体、圆环、扭结、多面体、文字

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

RabbitMQ-默认读、写方式介绍

1、RabbitMQ简介 rabbitmq是一个开源的消息中间件,主要有以下用途,分别是: 应用解耦:通过使用RabbitMQ,不同的应用程序之间可以通过消息进行通信,从而降低应用程序之间的直接依赖性,提高系统的…

功率电感的设计步骤

文章目录 1:高导磁气隙(铁氧体)1.1设计原理1.2 设计步骤 2 铁粉芯2.1:设计原理2.2:设计步骤 TI电感设计 学习视频原链接 截图 1 截图1 截图1 截图 2 截图2 截图2 1:高导磁气隙(铁氧体&#…

基于机器学习判断面部微表情发现哪些人更容易诊有帕金森病

1. 概述 帕金森病(Parkinson’s disease,PD)是一种慢性、进展性的神经退行性疾病,主要影响运动系统。该病症以大脑中黑质致密部多巴胺能神经元的逐渐丧失为特征,导致多巴胺(一种重要的神经递质&#xff09…

【Qt】深入探索Qt窗口与对话框:从创建到管理:QDockWidget(浮动窗口)、QDialog(对话框)

文章目录 前言:1. 浮动窗口2. 对话框介绍2.1. 示例:主窗口中,通过点击按钮,弹出一个新的对话框。2.2. 创建自定义对话框2.2.1. 纯代码的方式2.2.2. 图形化界面的方式 3. 模态对话框 和 非模态对话框4. Qt 内置对话框4.1. 消息对话…

Hybrid Block Storage for Efficient Cloud Volume Service——论文泛读

TOS 2023 Paper 论文阅读笔记整理 问题 传统桌面和服务器应用程序向云的迁移给底层云存储带来了高性能、高可靠性和低成本的挑战。由于这些传统应用程序的I/O模式和一致性要求,与采用特定编程模型和范式(如MapReduce[22]和RDD[52])的云原生…

香橙派AIpro(OrangePi AIPro)开发板初测评

开发板简介 最近,我拿到手一款Orange Pi AI Pro 开发板,它是香橙派联合华为精心打造的高性能AI 开发板,最早发布于2023年12月,其搭载了昇腾AI 处理器,可提供8TOPS INT8 的计算能力,内存提供了8GB 和16GB两…

基于jeecgboot-vue3的Flowable新建流程定义(一)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、vue3版本因为流程分类是动态的&#xff0c;不再固定了&#xff0c;所以新建的时候需要选择建立哪种流程类型的流程 代码如下&#xff1a; <!-- 选择模型的流程类型对话框 -->&…

数据结构(六)图

2024年5月26日一稿(王道P220) 6.1 图的基本概念 6.1.1 图的定义 6.2 图的存储及基本操作 6.2.1邻接矩阵法 6.2.2 邻接表

python web自动化(分布式测试Grid)

Grid介绍 Selenium Grid 是 Selenium 提供的⼀个⼯具&#xff0c;⽤于⽀持在多台计算机上并⾏运⾏测试。 它允许将测试分发到不同的机器和浏览器组合上&#xff0c;同时收集结果。 1.并⾏执⾏测试⽤例&#xff1a;在不同的机器上并⾏执⾏测试⽤例&#xff0c;从⽽加速整个测试过…

Vulhub——adminer

文章目录 一、CVE-2021-21311&#xff08;SSRF&#xff09;二、CVE-2021-43008&#xff08;远程文件读取&#xff09; 一、CVE-2021-21311&#xff08;SSRF&#xff09; Adminer是一个PHP编写的开源数据库管理工具&#xff0c;支持MySQL、MariaDB、PostgreSQL、SQLite、MS SQL…

基于SpringBoot+Vue的人事管理系统

引言 目前,人事管理的系统大都是CS架构的大型系统,很少有面向机关,事业单位内部的基于BS架构的微型人事系统,因此.开发一个基于BS架构的人事信息管理系统是非常必要的.但是基于BS架构的人事系统对于安全是一个大的考验点.在人事信息系统中,功能需简单清晰,可操作性强,其次安全…

第六节:带你全面理解vue3 浅层响应式API: shallowRef, shallowReactive, shallowReadonly

前言 前面两章,给大家讲解了vue3中ref, reactive,readonly创建响应式数据的API, 以及常用的计算属性computed, 侦听器watch,watchEffect的使用 其中reactive, ref, readonly创建的响应式数据都是深层响应. 而本章主要给大家讲解以上三个API 对应的创建浅层响应式数据的 API,…

【STM32单片机】----实现LED灯闪烁实战

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

【机器学习-23】关联规则(Apriori)算法:介绍、应用与实现

在现代数据分析中&#xff0c;经常需要从大规模数据集中挖掘有用的信息。关联规则挖掘是一种强大的技术&#xff0c;可以揭示数据中的隐藏关系和规律。本文将介绍如何使用Python进行关联规则挖掘&#xff0c;以帮助您发现数据中的有趣模式。 一、引言 1. 简要介绍关联规则学习…

动态路由实验—OSPF

动态路由协议实验-------OSPF 链路状态路由选择协议又被称为最短路径优先协议&#xff0c;它基SPF&#xff08;shortest path first &#xff09;算法 实验要求&#xff1a;各个PC之间能够互通 1.四台PC配置如下 PC1 PC2 PC3 PC4 2.配置各个交换机的口子的IP R1 <HUAWE…

spiderfoot一键扫描IP信息(KALI工具系列九)

目录 1、KALI LINUX简介 2、spiderfoot工具简介 3、在KALI中使用spiderfoot 3.1 目标主机IP&#xff08;win&#xff09; 3.2 KALI的IP 4、命令示例 4.1 web访问 4.2 扫描并进行DNS解析 4.3 全面扫描 5、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多…