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,一经查实,立即删除!

相关文章

自然语言处理(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…

还做单元测试吗?

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

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 概述…

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…

【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接口,也就是说它既可以看作一个顺序…

Magnum IO

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

ModelMapper的常见用法 ,号称是beanUtils.copyProp....的升级版??,代码复制粘贴即可复现效果,so convenient

官网案例 以下将官网案例做一个解释 1)快速入门 递归遍历源对象的属性拷贝给目标对象 拷贝对象下对象的属性值 Data class Order {private Customer customer;private Address billingAddress; }Data class Customer {private Name name; }Data class Name {pr…

【笔记】自动驾驶预测与决策规划_Part5_决策过程(上)

决策过程 0. 前言1.决策过程的引入1.1有了planning,为什么还需要decision-making?1.2 决策规划的一些思考 2.马尔可夫决策过程及其关键要素2.1 马尔可夫过程2.1.1 什么是随机过程?2.1.2 什么是马尔科夫性?2.1.3 马尔可夫决策过程 …

单片机(学习)2024.10.11

目录 按键 按键原理 按键消抖 1.延时消抖 2.抬手检测 通信 1.通信是什么 2.电平信号和差分信号 3.通信的分类 (1)时钟信号划分 同步通信 异步通信 (2)通信方式划分 串行通信 并行通信 (3)通信方向划分 单工 半双工 全双工 4.USART和UART(串口通信&a…

计算机毕业设计 基于Python的食品销售数据分析系统的设计与实现 Python毕业设计 Python毕业设计选题 数据分析 Vue【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

安装R和RStudio:开始你的数据分析之旅

数据分析是当今世界中一个非常热门的领域,而R语言是进行数据分析的强大工具之一。R是一种编程语言和软件环境,用于统计计算和图形表示。RStudio是一个集成开发环境(IDE),它为R语言提供了一个更加友好和高效的工作环境。…

从commit校验失效问题探究husky原理

一、背景 之前创建的项目,发现代码 commit 提交的时候没有了任何校验,具体表现: 一是 feat fix 等主题格式校验没有了二是代码 lint 不通过也能提交 尝试解决这个问题,并深入了解husky的实现原理,将相关的一些知识点…

【Canvas与诗词】要做一棵树,站成永恒

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>要做一棵树站成永恒</title><style type"text/css&quo…