Iceberg Catalog 的实现和迁移

Iceberg Catalog 的需求

Iceberg Catalog 的接口定义了各种 Catalog 需要实现的方法,主要包括列出存在的表,创建表,删除表,检查表是否存在,给表改名。

如果一个 Iceberg catalog 使用在生产中,主要需是原子更新当前元数据指针。因为在任意时刻,所有的读和写操作看到表的表的状态是相同的。两个并发的写入操作,第 2 个写入操作提交的时候不能覆写第 1 个写入操作对数据的修改,导致数据丢失。

各种 Iceberg Catalog 实现的比较

比较的主要维度包括:

  • 是否推荐用于生产环境
  • 是否需要外部系统,并且外部系统是自带的还是管理服务
  • 是否和大量的引擎和工具兼容
  • 是否支持多表和多语句的事务
  • 是否不绑定特定的云厂商

Hadoop Catalog

Hadoop Catalog 是最简单的,不依赖外部系统。可以使用任意文件系统,包括 HDFS, S3 等。

不推荐使用在生产环境,原因如下:

  1. 有些文件系统 rename 操作是原子的,有些不是。像 S3 的 rename 就不是原子的。
  2. 仅使用数据仓库目录来列出表。如果使用对象存储,仅能使用一个 bucket。
  3. 如果列出 namespaces(也就是 databases) 或者 tables,当 namespaces 或者 tables 的数量比较多时,可能遇到性能问题。
  4. 不能仅从 catalog 删除一个表但是保留数据。
spark-sql --master local[1] \--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \--conf spark.sql.catalog.my_catalog1=org.apache.iceberg.spark.SparkCatalog \--conf spark.sql.catalog.my_catalog1.type=hadoop \--conf spark.sql.catalog.my_catalog1.warehouse=/warehouse/tablespace/managed/hive

Hive Catalog

Hive Catalog 广泛使用。使用 Hive Metastore 中 表的属性 location 作为表的路径。

优点:

  1. 被多种引擎和工具支持,不依赖云厂商。

缺点:

  1. 需要额外的 Hive Metastore 服务。
  2. 不支持涉及多表操作的一致性和原子性。

The AWS Glue Catalog

使用表 metadata_location 作为表的路径。

优点:

  1. AWS Glue 是管理的服务,不需要像 Hive Metastore 的额外开销。
  2. 和其他 AWS 服务紧密集成。

缺点:

  1. 不支持多表事务。
  2. 和 AWS 生态绑定。

如果你深度购买了 AWS 的服务,并且不需要多云方案。

The Nessie Catalog

优点:

  1. 使数据湖像 git 一样,意味着数据和相关的元数据可以版本化,像源代码一样管理。
  2. 支持多表事务和多语句事务。
  3. 不依赖云厂商。

缺点:

  1. 不是所有的引擎和工具支持,当前 Spark,Flink,Dremio, Presto, Trino 和 PyIceberg 支持。
  2. 你必须像使用 Hive Metastore 一样,自己启动一个 Nessie。

The REST Catalog

优点:

  1. 比较轻量,依赖更少,简化部署和管理,因为仅仅能发送标准 HTTP 请求即可。
  2. 比较灵活,可以放在任意能处理 HTTP 请求的服务上,并且后端存储可以任意选择。
  3. 不依赖云厂商。

缺点:

  1. 必须运行一个服务处理 Rest 请求。
  2. 没有开源实现,必须自己编写。
  3. 不是所有的引擎和工具支持,当前 Spark,Flink,Trino 和 PyIceberg, 和 SnowFlake 支持。

The JDBC Catalog

优点:

  1. 容易开始。
  2. 数据库提供高可用性。
  3. 不依赖云厂商。

缺点:

  1. 不支持多表事务。
  2. 所有的引擎和工具需要 jdbc 驱动。

Catalog 迁移

使用 Catalog cli

Nessi 项目提供一个开源迁移工具。提供两个功能:迁移和注册。这两个功能都不拷贝数据。并且都支持迁移表的整个历史。

  • migrate
    从旧的 catalog 迁移到新的 catalog。当迁移完成时,表就在旧的 catalog 中找不到了,是 move 操作。

  • register
    register 迁移后,不删除旧的 catalog 中表定义,可以用来预迁移的验证。
    使用 register,不能使用不同的 catalog 写入数据,这样会导致数据丢失。

不要在有任务使用旧 catalog 写入任务运行时进行迁移,这样会导致数据丢失。

建议小批次的迁移。
迁移命令:

java -jar iceberg-catalog-iceberg-catalog-migrator-cli-0.2.0.jar migrate 

使用引擎

spark 启动的时候设置两个 catalog

 --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \--conf spark.sql.catalog.source_catalog1=org.apache.iceberg.spark.SparkCatalog \--conf spark.sql.catalog.target_catalog1=org.apache.iceberg.spark.SparkCatalog \--conf spark.sql.catalog.source_catalog1.xxx=xxx \--conf spark.sql.catalog.target_catalog1.xxx=xxx \

以上命令仅启动 spark-sql。

  • register_table

参数
table, metadata_file

CALL target_catalog.system.register_table('table_catalog.db1.table1', '/path/to/source_catalog_warehouse/db1/table1/metadata/xxx.json')

在新 catalog 上的修改,在源 catalog 看不到。

  • snapshot()
    在新 catalog 上的操作,在源 catalog 看不到。反过来也一样,在源 catalog 上的操作,在新 catalog 看不到。
CALL target_catalog.system.snapshot('table_catalog.db1.table1', 'target_catalog.db1.table1')

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

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

相关文章

SpringBoot 整合 阿里云 OSS图片上传

一、OOS 简介 ‌阿里云OSS(Object Storage Service)是一种基于云存储的产品,适用于存储和管理各种类型的文件,包括图片、视频、文档等。‌ 阿里云OSS具有高可靠性、高可用性和低成本等优点,因此被广泛应用于各种场景&…

叉车毫米波雷达防撞技术,保护叉车作业安全

在叉车作业频繁的仓库与物流中心,安全隐患往往隐藏于细微之处,稍有不便可能引发重大事故。我们的叉车毫米波防撞系统方案,正是针对这一痛点而精心设计的创新之作。该系统通过集成的毫米波雷达技术,实现了对叉车周边环境的实时、精…

实时开放词汇目标检测(论文复现)

实时开放词汇目标检测(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 实时开放词汇目标检测(论文复现)概述模型框架使用方式配置环境训练和评估训练评估 演示效果Gradio Demo 概述 YOLO-World是由腾讯人工智能实验…

应急响应:DHCP$DNS劫持实战

目录 DHCP DHCP安全性: DHCP常见的攻击手段: DNS DNS常见的攻击方式: DNS&DHCP攻击实战演练: 环境配置: 利用: 排查: 防御: DHCP 介绍: DHCP(…

前端开发基础NodeJS+NPM基本使用(零基础入门)

文章目录 1、Nodejs基础1.1、NodeJs简介1.2、下载安装文件1.3、安装NodeJS1.4、验证安装2、Node.js 创建第一个应用2.1、说明2.2、创建服务脚本2.3、执行运行代码2.4、测试访问3、npm 基本使用3.1、测试安装3.2、配置淘宝npm镜像3.3.1、本地安装3.3.2、全局安装3.4、查看安装信…

解数独Python

怎样解数独? Python def setBoardFunc(puz): global grid print("Original Sudoku") for i in range(0, len(puz), 9): row puz[i:i9] temp [] for block in row: temp.append(int(block)) g…

小程序知识付费的优势 知识付费服务 知识付费平台 知识付费方法

在信息爆炸的时代,知识如同繁星点点,璀璨而散落。如何在这片知识的海洋中精准捕捞,成为现代人追求自我提升的迫切需求。小程序知识付费,正是这样一座桥梁,它以独特的优势,让智慧触手可及,轻触未…

视频流媒体解决方案,Liveweb国标GB28181视频监控汇聚平台

Liveweb视频监控国标平台指的是基于GB/T 28181协议的视频联网平台,可以对接各种符合国标GB/T 28181协议的视频平台、NVR录像机、网络监控摄像头、执法记录仪、应急布控球、移动单兵、无人机等设备。通过国标平台的联网,方便管理分布在不同地点的视频监控…

笔记 2024/10/9

计组 定点数运算 补码加减法 以及判断溢出方法 原码乘法 下图是手算乘法 下图是原码乘法 因为[Y]原1.10111,所以Y0从低位开取,分别是1,1,1,0,1。(或者说C里面存的原来渐渐被挤掉的[Y]原的低…

评职称需要讲究方法

评职称需要讲究方法 评职称不要太老实 你评三年没下来 你同事走“野路子” 一年就下来了 所以别吃亏了 不走的弯路别走 不该吃的苦别吃 大家如果对于职称评审业绩材料整理还有什么不懂的,可以在评论区留言,甘建二告诉你们怎么报职称,少…

力扣11-盛最多水的容器

题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。…

flask发送邮件

开通邮件IMAP/SMTP服务 以网易邮箱为例 点击开启发送验证后会收到一个密钥,记得保存好 编写代码 安装flask-mail pip install flask-mail在config.py文件中配置邮件信息 MAIL_SERVER:邮件服务器 MAIL_USE_SSL:使用SSL MAIL_PORT&#…

SpringBoot开发——整合Actuator监控和管理Spring Boot 应用

文章目录 1、Spring Boot Actuator2、启用Spring Boot Actuator2.1项目中添加Spring Boot Actuator依赖2.2 启动项目,查看监控信息3、Spring Boot Actuator提供的端点(Endpoints)3.1 端点列表3.2 启用终端节点3.3 暴露端点3.4 常用端点详解1、Spring Boot Actuator Spring …

Umi中的微前端

umi/max 内置了 Qiankun 微前端插件,它可以一键启用 Qiankun 微前端开发模式,帮助您轻松地在 Umi 项目中集成 Qiankun 微应用,构建出一个生产可用的微前端架构系统。 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代…

腾讯云SDK 下载

产品体验 App 移动端-腾讯云音视频 App 您可以下载腾讯云音视频 App,体验音视频终端 SDK 产品家族中各个子产品 SDK 的应用场景。 平台 iOS Android Demo 体验    Web 端-Web D…

88、Python之鸭子类型:函数是对象,对象也可以像函数一样使用

引言 在前面的文章中,我们曾经反复提及的理念,“Python中一切皆对象”。在这个理念支持下,Python中的函数也是对象的一种,那么我们有没有办法自定义对象,像函数一样来使用呢。 按照鸭子类型的理念来看,如…

【Delphi】使用并行数组和有序字典加快 Delphi RTL 速度(D12.2)

Delphi 12.2新增功能比较多,但 Delphi 运行时库(RTL)中的一些增强功能值得一提。比如: 新 TParallelArray 类 System.Threading 单元中有一个新的 TParallelArray 类,可以在数组项上并行运行 &For 和排序等操作。 在多核系统…

【有啥问啥】 群体智能(Swarm Intelligence):从自然到人工智能的深度探索

群体智能(Swarm Intelligence):从自然到人工智能的深度探索 什么是群体智能? 群体智能(Swarm Intelligence)是一个迷人的研究领域,它专注于社会性生物(如蚂蚁、蜜蜂、鸟类等&#…

ML 系列:机器学习和深度学习的深层次总结(16) — 提高 KNN 效率-使用 KD 树和球树实现更快的算法

一、说明 在机器学习系列的第 16 节,我们重点介绍了提高 K 最近邻 (KNN) 算法的效率,这是一种广泛用于分类和回归任务的方法。虽然 KNN 简单有效,但对于大型数据集来说,其计算成本可能会令人望而却步。为了…

实验室认证需要准备哪些文件材料?

实验室认证需要准备的文件材料通常包括以下几类: 一、法律地位文件 实验室成立文件及营业执照:包括实验室的成立证明文件、单位营业执照等,以证明实验室的法律地位和合法性。 人员任命文件:最高管理者(如总经理&…