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.mzph.cn/news/881565.shtml

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

相关文章

UE5运行时动态加载场景角色动画任意搭配-场景角色相机动画音乐加载方法(三)

1、将场景打包为Pak并加载 1、参考这篇文章将场景打包为pak,UE4打包并加载Pak-Windows/iOS/Android不同平台Editor/Runtime不同运行模式兼容 2、在Mount Pak后直接打开Map即可 void UMapManager::OpenMap(FString Path) {UWorld* World = UGlobalManager::GetInstance()->…

自然语言处理(NLP)论文数量的十年趋势:2014-2024

引言 近年来,自然语言处理(NLP)已成为人工智能(AI)和数据科学领域中的关键技术之一。随着数据规模的不断扩大和计算能力的提升,NLP技术从学术研究走向了广泛的实际应用。通过观察过去十年(2014…

基于Zabbix进行服务器运行情况监测

文章目录 引言I Zabbix主要构成下载并安装Zabbix被监控主机安装zabbix agent创建被监控主机报警设置II 常见问题cannot use database "zabbix": its "users" table is empty (is this the Zabbix proxy database?)重置 Zabbix Web 界面密码Zabbix agent i…

还做单元测试吗?

软件单元测试分为狭义的单元测试和广义的单元测试。 前者是指对被测代码的各种函数、接口等进行测试,以验证它们的功能、性能和安全性。 后者是指对页面的每一个组件(如文本框、按钮等)进行测试,以验证它们的功能、性能和安全性…

京准电钟:NTP时间服务器让大数据时钟同步

京准电钟:NTP时间服务器让大数据时钟同步 京准电钟:NTP时间服务器让大数据时钟同步 NTP是一种用于同步网络中设备时间的协议,广泛用于互联网和局域网中。NTP网络时间服务器则是基于NTP协议构建,为网络中的设备提供时间同步服务的服…

MySQL学习笔记(持续更新,目前到十一章锁)

1、Mysql概述 1.1 数据库相关概念 三个概念:数据库、数据库管理系统、SQL 名称全称简称数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Mangement System&#xf…

【Qt】详细Qt基础 (包括自定义控件)

目录 QT 概述创建项目项目文件(. pro)main.cppmainwindow.uimainwindow.hmainwindow.cpp 窗口类QWidget 窗口显示QDialog 窗口 QPushButton创建显示 对象树基本概念功能 坐标体系控件Item WidgetsQListWidgetQTreeWidgetQTableWidget 自定义控件 QT 概述…

结构型设计模式详解与总结

一、什么是结构型设计模式 结构型设计模式的主要目的是处理类或对象之间的组合与继承问题,通过组织类和对象来形成更大的结构,帮助我们更好地解决类与类、对象与对象之间的耦合问题。这类模式通过定义如何组合对象来实现新的功能,着重于解决…

2024 年热门前端框架对比及选择指南

在前端开发的世界里,框架的选择对于项目的成功至关重要。不同的框架有着不同的设计理念、生态系统和适用场景,因此,开发者在选框架时需要权衡多个因素。本文将对当前最流行的前端框架——React、Vue、Angular、Svelte 和 Solid——进行详细对…

AI免费文档处理在线工具:ColPali文本检索文档

1、ColPali 原理还是对比学习,图像和文本,文档通过图像模型,文本通过大模型gemma https://huggingface.co/spaces/manu/ColPali-demo 检索pdf

k8s 中存储之 PV 持久卷 与 PVC 持久卷申请

目录 1 PV 与 PVC 介绍 1.1 PersistentVolume(持久卷,简称PV) 1.2 PersistentVolumeClaim(持久卷声明,简称PVC) 1.3 使用了PV和PVC之后,工作可以得到进一步的细分: 2 持久卷实验配置…

深度0.1%调光恒流芯片SL8701支持PWM调光 模拟调光 无频闪 多路共阳

一、芯片概述 SL8701是一款内置100V MOS的降压型高调光比LED恒流驱动芯片,专为智能调光调色照明研发设计。它支持多种调光方式,包括PWM调光和模拟调光,能够实现高调光比,满足不同场景的照明需求。 二、主要特性 PWM调光支持&am…

【STM32】STM32CubeMX 之 Timers配置 【笔记】

环境 硬件:通用PC 系统: Windows 10 软件 :STM32CubeMX 在STM32CubeMX的Timer配置中,每个选项都有特定的含义。以下是逐一解释这些选项: 1. Mode 配置 a. Clock Source: 时钟源 Internal Clock: 使用内部时钟&…

【Vue3】 h()函数的用法

目录 介绍 参数 使用案例 1.创建虚拟 DOM 元素 2. 组件的动态渲染 3. 创建功能组件 4.渲染动态属性 5. 使用插槽 6. 创建动态标签 介绍 h() 函数用于辅助创建虚拟 DOM 节点,它是 hypescript 的简称——能生成 HTML (超文本标记语言) 的 JavaScript&#x…

Unsupervised HDR Image and Video Tone Mapping via Contrastive Learning

Abstract 捕捉高动态范围 (HDR) 图像(视频)很有吸引力,因为它可以揭示黑暗和明亮区域的细节。 由于主流屏幕仅支持低动态范围(LDR)内容,因此需要色调映射算法来压缩HDR图像(视频)的…

Python编程:创意爱心表白代码集

在寻找一种特别的方式来表达你的爱意吗?使用Python编程,你可以创造出独一无二的爱心图案,为你的表白增添一份特别的浪漫。这里为你精选了六种不同风格的爱心表白代码,让你的创意和情感通过代码展现出来。 话不多说,咱…

Collection-LinkedList源码解析

文章目录 概述LinkedList实现底层数据结构构造函数getFirst(), getLast()removeFirst(), removeLast(), remove(e), remove(index)add()addAll()clear()Positional Access 方法查找操作 概述 LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序…

4.MySQL

Moka HR SaaS 招聘平台 主要负责 Moka HR SaaS 招聘平台的模块开发,参与功能设计与实现,提升系统的稳定性和用户体验。 **技术栈:**SpringCloud、Mybatis-Plus、MySQL、Redis、OAuth 2.0、CAS(SSO)、MokaBatch、Apol…

Magnum IO

NVIDIA Magnum IO 文章目录 前言加速数据中心 IO 性能,随时随地助力 AINVIDIA Magnum IO 优化堆栈1. 存储 IO2. 网络 IO3. 网内计算4. IO 管理跨数据中心应用加速 IO1. 数据分析Magnum IO 库和数据分析工具2. 高性能计算Magnum IO 库和 HPC 应用3. 深度学习Magnum IO 库和深度…

Python列表操作详解

1 列表的基本概念 在Python中,列表是一种非常常用的数据结构,它可以存储任意类型的元素,并且支持多种操作。下面将详细介绍Python列表的各种操作。 2列表的操作方法 2.1创建列表 Python可以直接使用方括号[]来创建一个空列表。 示例&am…