第一章 Iceberg入门介绍

news2024/9/25 9:38:01

1、Iceberg简介

  • 本质:一种数据组织格式
    在这里插入图片描述
1.1、应用场景

面向大表:单表包含数十个PB的数据

分布式引擎非必要:不需要分布式SQL引擎来读取或查找文件

高级过滤:使用表元数据,使用分区和列级统计信息修建数据文件

1.2、集成方式:通过Lib与Flink、Spark集成

Icrbeg非常轻量级,与Flink、Spark整合时通过一个Jar包整合。

2、数据存储文件解析

  • 核心:每一个对表产生改变的操作commit后,都会产生一份新的metadata files,这包括一个vN.metadata.json + 一个manifest list(例如:snap-242516093407225541-1-4bbf0565-406b-428a-aad7-e32993df0fef.avro) + 一个或多个manifest file(例如:4bbf0565-406b-428a-aad7-e32993df0fef-mN.avro)
    在这里插入图片描述
  • 下图为Iceberg的表格式:
    • Ⅰ、s0、s1代表的是表Snapshot信息,每个表示当前操作的一个快照,每次Commit都会生成一个快照Snapshot
    • Ⅱ、每个Snapshot快照对应的一个manifest list元数据文件
    • Ⅲ、每个manifest list包含多个Manifest元数据文件
    • Ⅳ、每个Manifest中记录了当前操作生成数据所对应的文件地址,也就是data file地址。
2.1、元数据层

Snapshot(表快照)

  • 文件描述:snap-xxxx.avro,当生成一个parquent文件时生成一个快照

​ 快照代表一张表在某个时刻的状态。每个快照里面会列出表在某个时刻的所有data files列表。data files是存储在不同manifest files里面,manifest files是存储在一个Manifest list文件里面,一个Manifest list文件代表一个快照。

在这里插入图片描述

manifest list(清单列表)

​ manifest list是一个元数据文件,它列出构建快照(Snapshot)的清单(Manifest file)。这个元数据文件中存储的是Manifest file列表,每个Manifest file占据一行,每行中存储了Manifest file的路径、其存储的数据文件(data files)的分区范围,增加了几个数据文件、删除了几个数据文件等信息。

在这里插入图片描述

注意事项:相关统计信息可以在扫描表数据时过滤掉不必要的文件

manifest file(清单文件)

  • 文件描述:XXX-m0.avro,每当生成一个parquent文件时生成一个快照

在这里插入图片描述
​ Manifest file是一个元数据文件,它列出了组成快照(Snapshot)的数据文件(data files)的列表信息每行都是每个数据文件的详细描述,包括数据文件的状态、文件路径、分区信息、列级的统计信息(比如每列的最大最小值、空值数等)、文件的大小以及文件里面数据行数等信息。

  • 注意事项:其中列级别的统计信息可以在扫描表数据时过滤掉不必要的文件
2.2、数据层

​ 数据文件文件是Apache Icberg表真实存储数据的文件,一般在表的数据存储目录的data目录下,如果文件格式选择的是Parquent,那么文件是以".parquent"结尾。
在这里插入图片描述

  • 重点:每次Commit都会生成一个Parquent文件
  • 注意事项:目前支持parquent、ORC、Avro文件格式

3、数据后端存储解析

  • 表元数据存储:存储在Hive Metastore中,复用了HMS模型

img

​ 通过storage handler实现了外表创建,按照前面对表的类型划分,就是 managed non-native。

4、Iceberg表特性

(1)分区与隐藏分区

(2)表演化

(3)模式演化

(4)分区演化

(5)列顺序演化

5、Iceberg Catalog

  • 类别:包括Hive Catalog、Hadoop Catalog、CacheCatalog和JDBC Catalog四种
5.1、Hive Catalog

​ Hive Catalog将表的元数据信息存储在Hive Metastore,为了兼容HMS,Namespace必须包含table和database。

5.2、Hadoop Catalog

Hadoop Catalog将表的元数据信息存储在Hadoop之上,因为Hadoop支持存算分离,因此底层的数据文件可以是HDFS或者是S3这样的对象系统,对Hadoop Catalog来讲,定位一个表的位置,只需要提供表的路径即可,因为表的元信息都存储在文件中,比如TableIdentifier为[“test_table”,“test_db”,“test_nm1”,“test_nm2”]的表全路径

5.3、CacheCatalog

CacheCatalog将表的元数据信息存储在内存之上

5.4、JDBC Catalog

JDBC Catalog将表的元信息存储在支持JDBC协议的数据库中,Flink的JDBC Catalog能够查询注册和查询外部JDBC数据源,而Iceberg的JDBC Catalog只是将本身的元数据存储在JDBC数据库中,Iceberg目前支持的数据来源也仅仅是Hadoop。

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

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

相关文章

技术管理者如何获得下属的认同?

你好,我是童军,目前是华锐技术资管营销研发团队总监。今天我将从自己的工作场景出发,讲讲我是如何和团队小伙伴相处沟通,并获得认同的。 我们先看一个小故事。 我刚当上主管那会儿,在和新入职同事沟通具体工作时&…

【数组相关面试题】LeetCode试题

前言:在之前我们已经学习过了顺序表的相关概念以及实现的方法,今天我们通过几个题来进行应用了解。 目录1.第一题([oj链接](https://leetcode.cn/problems/remove-element/))2.第二题([oj链接](https://leetcode.cn/problems/remove-duplicat…

Ubuntu和Linux开发板网络环境搭建

参考:https://www.bilibili.com/video/BV1n541197rk?spm_id_from333.999.0.0 目录前言STM32MP157 开发板网络环境搭建开发工具网络拓扑结构Ubuntu 常用工具安装同一网段ping 测试概念关闭Ubuntu 和Windows 防火墙电脑和开发板直连同个路由器准备工作VMware 设置查看…

Java:每个开发人员职业生涯的基本Java技能

早在1996年,Java就首次被引入世界,如今仍然非常受欢迎。2021,全球超过35%的程序员使用这种语言。此外,它是TIOBE索引中最受欢迎的三种编程语言之一。作为Java初学者,这对你意味着什么?这意味着你必须获得竞争优势&…

浏览器的URL中每个中字符的“乱码”问题,字符集的解码和编码

uft-8和Unicode字符表对应,查找可参考:https://www.utf8-chartable.de/unicode-utf8-table.pl 几个好用的字符集转换网址:http://web.chacuo.net/charseturlencode,https://123.w3cschool.cn/webtools,http://mytju.co…

JVM详解--内存结构

文章目录什么是JVM内存结构程序计数器(Program Counter Register)虚拟机栈(Java Virtual Machine Stacks)概述栈内存溢出本地方法栈堆(Heap)堆内存溢出堆内存诊断方法区方法区内存溢出常量池运行时常量池St…

PHP手册

NULL 未定义和unset()的变量都将解析为值null unset() unset( $var, ...$vars) 如果在函数中 unset() 一个全局变量&#xff0c;则只是局部变量被销毁&#xff0c;而在调用环境中的变量将保持调用 unset() 之前一样的值。 <?php function destroy_foo() {global $foo;un…

双系统下linux分区被误删的解决办法

前言在windows系统的磁盘管理中误删了ubuntu的磁盘分区&#xff0c;开机后一直卡在grub界面。Windows/Linux双启动的机器一般都使用grub作为引导程序。如果不小心在Windows中删除了linux分区&#xff0c;grub就会因为找不到配置文件而造成无法启动。 系统配置 系统类型&#x…

Qt新手入门指南 - 如何创建模型/视图(一)

每个UI开发人员都应该了解ModelView编程&#xff0c;本教程的目标是为大家提供一个简单易懂的介绍。Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff…

java排错定位

1、检查有没有报错信息 日志文件中登记的错误&#xff0c;这个算是最简单的&#xff0c;在定位错误时&#xff0c;也最希望问题在这一步得到确认。在打印异常时&#xff0c;通常会打印异常的调用栈信息&#xff0c;通过调用栈信息就可以很便捷的定位问题了。 例如&#xff1a; …

【JavaScript】原型与原型链以及判断数据类型方式

&#x1f4bb; 【JavaScript】原型与原型链以及判断数据类型方式 &#x1f3e0;专栏&#xff1a;JavaScript &#x1f440;个人主页&#xff1a;繁星学编程&#x1f341; &#x1f9d1;个人简介&#xff1a;一个不断提高自我的平凡人&#x1f680; &#x1f50a;分享方向&#…

Redis对不起是我肤浅了(基础和应用篇):位图(Bitmaps)的妙用和深入分析每个命令的用法

一、前言 在Redis 4.0 版本之前&#xff0c;Redis是单线程程序&#xff0c;主要是指Redis的网络I/O线程。Redis的持久化、集群同步等操作&#xff0c;则是由另外的线程来执行的。但在Redis 4.0 版本之后&#xff0c;Redis添加了多线程的支持&#xff0c;这时的多线程主要体现在…

【IT互联网行业内,什么岗位工作更有前景?】

前言互联网及IT行业作为集技术与高薪于一身的新技术行业&#xff0c;不仅成为时下众多年轻人的首选行业&#xff0c;其本身也承载了社会、企业数字化发展转型的重担&#xff0c;从国家到社会、市场都非常重视行业技术的发展和渗透&#xff0c;其重要性不言而喻。作为普通人的小…

AcWing 1073. 树的中心(详解树形DP和换根DP)

AcWing 1073. 树的中心&#xff08;树形DP 换根DP&#xff09;一、问题二、思路1、暴力做法2、树形DP换根DP&#xff08;1&#xff09;思路分析&#xff08;2&#xff09;普通树形DP与换根DP的区别三、代码一、问题 二、思路 1、暴力做法 这道题其实暴力的做法很简单&#x…

【金融学】Economics of Money and Banking {暂时搁置,中级宏观和微观经济学未学}

Economics of Money and BankingClass1 The Big PicturePrerequisitesSome MaterialsCourse Material: https://www.coursera.org/learn/money-banking/lecture/8WXSW/the-big-picture Class1 The Big Picture Prerequisites intermediate macroeconomics 中级宏观经济学 int…

Java on VS Code 2023年1月更新|Spring 插件包、代码补全更新以及性能改进

作者&#xff1a;Nick Zhu - Senior Program Manager, Developer Division at Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到我们 2023 年的第一篇博客&#xff01;我们想与您分享几个与 Spring 插件、代码编辑和性能相关的激动人心的更新&#xff0c;让我们…

XML方式—解决mybatis实体类属性名和数据库字段名不一致问题

数据库字段与类属性名称不一致&#xff0c;导致查询数据时数据没有封装上。 [Brand{id1, brandNamenull, companyNamenull}, Brand{id2, brandNamenull, companyNamenull}]解决方式一&#xff08;为表字段取别名&#xff09; <select id"selectAll" resultType&…

【大唐杯备考】——5G网络组网部署(学习笔记)

&#x1f4d6; 前言&#xff1a;本期介绍5G网络组网部署。 目录&#x1f552; 1. SA组网和NSA组网&#x1f558; 1.1 SA组网&#x1f558; 1.2 NSA组网&#x1f564; 1.2.1 Option 3系列&#x1f564; 1.2.2 Option 7系列&#x1f564; 1.2.3 Option 4系列&#x1f558; 1.3 组…

【Linux】gcc编译器

【Linux】gcc编译器 文章目录【Linux】gcc编译器1、背景2、翻译过程2.1 预处理2.2 编译2.3 汇编2.4 链接2.5 总过程3、动、静态链接库3.1 查看库3.2 库分类3.3 链接使用4、gcc参数总结1、背景 在Linux中&#xff0c;C语言的编译肯定需要编译器来进行&#xff0c;这个编译器就是…

微课录制软件哪个好用?微课制作方法分享

很多小伙伴都不知道什么是微课&#xff1f;微课视频时长比较短&#xff0c;一般在5-10分钟。微课的教学内容也比较少&#xff0c;一个微课视频一般只对一个知识点进行针对性讲解。微课的这些特性可以让我们利用碎片时间进行学习。制作微课需要录制电脑屏幕&#xff0c;那微课录…