【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,或者国内其它云厂商的权限系统,提供统一的元数据和运维指令接口。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo生态之nacos

1.Nacos简介 在博客Dubbo生态之初识dubbo协议-CSDN博客种我们已经介绍了为什么要使用注册中心,nacos作为注册中心的一种,相对于其它的主流注册中心有什么区别呢? NacosEurekaZookeeper数据存储存储在内存存储在内存存储在内存通信协议gRPChttpjute协议…

Yolov9调用COCOAPI生成APs,APm,APl

最近在做小目标检测的东西,因为后期毕业论文需要,所以开始使用Yolov9模型,运行val.py的时候不会自己产生小目标的AP指标,所以研究了一下,步骤非常简单: 第一步: 在数据集中生成json格式的Annota…

ISCC2024个人挑战赛WP-DLLCode

&#xff08;非官方解&#xff0c;以下内容均互联网收集的信息和个人思路&#xff0c;仅供学习参考&#xff09; 注意到程序调用了Encode函数对明文进行加密&#xff0c;点进去发现是对外部DLL的调用 静态分析DLL中的Encode函数可以得到 写出对应的解密脚本如下 #include <…

【三维修复、分割与编辑】InFusion、Bootstrap 3D、GaussianGrouping、GaussianEditor等(论文总结)

提示&#xff1a; 文章目录 前言一、InFusion&#xff1a;扩散模型助力&#xff0c;效率提高20倍&#xff01;(2024)1. 摘要2. 算法3. 效果 二、2D Gaussian Splatting三、Bootstrap 3D:从扩散模型引导三维重建1.摘要2.相关工作3.方法1.Boostrapping by Diffusion 通过扩散模型…

搭建访问阿里云百炼大模型环境

最近这波大降价&#xff0c;还有限时免费&#xff0c;还不赶快试试在线大模型&#xff1f;下面整理访问百炼平台的千问模型方法。 创建RAM子账号并授权 创建RAM子账号 1. “访问控制RAM”入口&#xff08;控制台URL&#xff09; 然后点击进入“RAM管理控制台” 2. 添加用户 …

漫谈企业信息化安全-综述

一、前言 一直以来想写一些文章&#xff0c;谈一谈企业信息化过程中的安全问题及对策。 随着信息技术的不断发展和普及&#xff0c;特别是今年来移动办公、云服务等等新的工作模式和新的信息技术的应用&#xff0c;企业信息化已经成为提升竞争力、促进创新和发展的重要途径。…

Spark-RDD-依赖关系详解

Spark概述 Spark-RDD概述 Spark-RDD-依赖关系 在Apache Spark中&#xff0c;RDD&#xff08;Resilient Distributed Dataset&#xff09;是一种基本的抽象数据结构&#xff0c;代表了分布式的、不可变的数据集。 RDD之间的依赖关系在Spark中非常重要&#xff0c;因为它们决定了…

MySQL 存储过程(实验报告)

一、实验名称&#xff1a; 存储过程 二、实验日期&#xff1a; 2024 年5 月 25 日 三、实验目的&#xff1a; 掌握MySQL存储过程的创建及调用&#xff1b; 四、实验用的仪器和材料&#xff1a; 硬件&#xff1a;PC电脑一台&#xff1b; 配置&#xff1a;内存&#xff0…

mysql事务 事务并发问题 隔离级别 以及原理

mysql事务 简介&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 事务四大特性 原子性&#xff08;Atomici…

多模态交互式 AI 代理的兴起:探索 Google 的 Astra 和 OpenAI 的 ChatGPT-4o应用

OpenAI的发展 聊天GPT-4o 和 谷歌的阿斯特拉 标志着交互式人工智能代理的新阶段&#xff1a;多模式交互式人工智能代理的兴起。这次旅程开始于 Siri 和 Alexa的&#xff0c;它将语音激活的人工智能带入主流用途&#xff0c;并通过语音命令改变了我们与技术的交互。尽管有影响&a…

链表类型的无界阻塞线程安全队列-ConcurrentLinkedQueue(FIFO)

ConcurrentLinkedQueue是非阻塞线程安全(volatile不能完全保证线程安全)的队列,适用于“高并发”的场景。是一个基于链表节点的无界线程安全队列,按照 FIFO(先进先出,尾先进头先出)原则对元素进行排序。队列元素中不可以放置null元素(内部实现的特殊节点除外)。 volati…

linux笔记6--shell相关

文章目录 1. 查看当前的shell类型2. ps -f命令3. 父子shell4. 分号在命令里的作用问题&#xff1a;环境变量echo&#xff1a; 5. sleep和jobssleep:jobs:例子&#xff1a;&: 6. 外部命令和内建命令图解外部命令type命令 7. history命令8. alias命令9. 推荐 1. 查看当前的sh…

2024年推荐的适合电脑和手机操作的线上兼职副业平台

总是会有人在找寻着线上兼职副业&#xff0c;那么在如今的2024年&#xff0c;互联网提供了诸多方便&#xff0c;无论你是宝妈、大学生、程序员、外卖小哥还是打工族&#xff0c;如果你正在寻找副业机会&#xff0c;那么这篇文章将为你提供一些适合电脑和手机操作的线上兼职副业…

【mysql】更新操作是如何执行的

现有一张表&#xff0c;建表语句如下&#xff1a; mysql> create table T(ID int primary key, c int);如果要将 ID2 这一行的a字段值加 1&#xff0c;SQL语句会这么写&#xff1a; mysql> update T set c c 1 where ID 2;上面这条sql执行时&#xff0c;分析器会通过词…

普通人转行程序员,最大的困难是找不到就业方向

来百度APP畅享高清图片 大家好&#xff0c;这里是程序员晚枫&#xff0c;小破站也叫这个名。 我自己是法学院毕业后&#xff0c;通过2年的努力才转行程序员成功的。[吃瓜R] 我发现对于一个外行来说&#xff0c;找不到一个适合自己的方向&#xff0c;光靠努力在一个新的行业里…

CentOS 7.9部署宝塔面板超详细

CentOS7 部署宝塔面板 Linux的宝塔面板搭建起来非常轻松&#xff0c;也可以用一句话来形容&#xff0c;如果喝水一样简单&#xff0c;只需一条命令剩下的交给时间&#xff0c;几分钟就能部署好&#xff0c;然后就可以直接进行登录&#xff0c;直接可以安装LNMP、LAMP平台&…

Linux VIM指令

三种模式 命令模式&#xff1a;控制屏幕光标的移动&#xff0c;字符、字或行的删除等输入对文件的一些指令 插入模式&#xff1a;对文件内容进行文字输入 底行摸索&#xff1a;文件保存或退出&#xff0c;也可以进行文件替换&#xff0c;找字符串&#xff0c;列出行号等操作…

华为机考入门python3--(30)牛客30-字符串合并处理

分类&#xff1a;字符串、进制转换 知识点&#xff1a; 获取偶数下标的字符 even_chars my_str[::2] 获取奇数下标的字符 odd_chars my_str[1::2]) 翻转字符串 reversed_str my_str[::-1] 二进制转十进制 num int(reversed_binary, 2) 十进制转十六进制 …

Java锁的策略

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f649; 内容推荐:<多线程案例(线程池)>&#x1f649; &#x1f439;今日诗词:"你我推心置腹, 岂能相负"&#x1f439; 目录 锁的策略 乐观锁和悲观锁 轻量级锁…