基于 Paimon 的袋鼠云实时湖仓入湖实战剖析
在当今数据驱动的时代,企业对数据的实施性能力提出了前所未有的高要求。为了应对这一挑战,构建高效、灵活且可扩展的实时湖仓成为数字化转型的关键。本文将深入探讨袋鼠云数栈如何通过三大核心实践——ChunJun 融合 Flink CDC、MySQL 一键入湖至 Paimon 的实践,以及湖仓一体治理 Paimon 的实践,重塑实时湖仓的架构与管理,为企业打造实时数据分析的新引擎。
ChunJun 融合 Flink CDC
Flink CDC(Change Data Capture)是由 Apache Flink 提供的一个流数据集成工具,它允许用户通过 YAML 文件优雅地定义 ETL(Extract, Transform, Load)流程,并自动生成定制化的 Flink 算子和提交 Flink 作业。
Flink CDC 的核心特性包括:端到端数据集成框架、易于构建作业的 API、多表支持、整库同步精确一次语义、增量快照算法等诸多特性。ChunJun 融合 Flink CDC 能够更好支持数据的入湖入仓,带来了多方面的变化:
· 高吞吐、低延迟:Flink CDC 能够以高吞吐量和低延迟的方式捕获和传输数据库的变更
· 全增量一体化:Flink CDC 支持全量数据和增量数据的同步,无需手动操作即可实现全量快照与增量日志的自动衔接
· 支持异构数据源:Flink CDC 支持多种数据源,可以轻松实现异构数据源的集成,通过 Flink SQL 定义不同类型的 CDC 表,实现数据融合
· 实时性:支持近实时的数据同步,满足对数据时效性要求高的场景
· 链路短组件少:Flink CDC 的架构设计让整个数据捕获和处理的链路变得更为简洁,所涉及的组件数量相对有限,这不但降低了系统的繁杂程度,还削减了学习与运维的成本
MySQL 一键入湖 Paimon 实践
ChunJun 融合 Flink CDC 增加了实时湖仓数据接入的方式,结合 FLink CDC 提供的 MySQL 数据到 Paimon 的数据同步能力,能够高效地将 MySQL 表数据实时写入 Paimon 中。在融合的同时,还支持历史 Json 格式构建任务、脏数据、Mertic、表血缘、可视化配置等功能。
接下来通过内部实践案例进行深入分析。
● 采集配置 Flink CDC 来源
实时采集配置 Flink CDC 来源为 MySQL 时,向导模式配置还原范围采用全量+增量模式。
首先,对数据库表进行全表快照读取,生成数据的一致性快照,以同步来源表的历史全量数据。在全量快照读取完成后,会自动切换至增量模式,对数据库的增量变化进行采集。表选择的方式多样,支持整库同步、分库分表同步、单表选择同步,同时也支持通过正则的方式选择表。
对于 DDL 变更,当上游产生 DDL 操作时,若选择支持,下游会自动执行;若选择不支持,则对上游产生的 DDL 做异常捕获,此时任务会失败。搭配告警功能,可及时告知出现异常的情况。出现异常后,需要手动执行 DDL 操作,任务才能恢复正常运行。
● 采集配置目标端
目标源通过 HiveMetastore 方式配置目标 Paimon 表。写入表的方式具有一定灵活性,支持手动选择表。对于上游存在多表写入同一下游表的场景,有一定要求,必须保证上下游表结构保持一致。
同时,支持使用相同表名、自定义表名的方式。在同步前,会先创建写入的目标表,如果已存在,则直接使用现成表。表分区方面,通过输入固定的语法,将对应上游的主键表字段作为目标 Piamon 表的分区字段。
● 调度运行采集任务
实时采集任务在通过语法检查后,提交至调度运维中运行。采集任务的指标包括 Mertic 输入输出指标展示、脏数据指标以及数据血缘解析等。
● 查询入湖数据
通过实时平台中 FlinkSQL 任务所提供的功能,对 Paimon 表进行查询并插入数据。利用 FlinkSQL 的 SqlQuery 功能构建 Select 查询语句,并采用流模式实时查询 Paimon 表,以采集插入数据的情况。
湖仓一体治理 Paimon 实践
在构建和维护数据湖与数据仓库(湖仓)的一体化架构进程中,袋鼠云凭借湖仓治理机制,不断推进实时数据湖的优化与完备。
然而,Paimon 在数据处理期间可能会引发数据碎片化的问题,像小文件的急剧增多、过时快照的持续累积以及孤儿文件的出现,这些状况均有可能给数据湖表的读写效率带来极为显著的不良影响。
为有效应对这一挑战,袋鼠云于数栈湖仓一体中引入了文件治理机制,支持定期开展数据整理操作,例如合并小文件、清理过期的数据快照以及清除孤儿文件等。此类治理活动旨在增强数据湖的整体读写性能,保障数据流的高效运行和分析工作的顺利开展。借由这些数据治理手段,袋鼠云能够为湖仓架构的稳定性和性能提供稳固支撑,进而助力企业在大数据时代实现敏捷决策和深度洞察。
元数据管理
● Paimon 分区概览
Paimon 运用了与 Apache Hive 相同的分区理念来对数据进行分离。分区属于一种可选的形式,能够依据日期、城市和部门等特定列的值,将表划分成相关的部分。每个表能够拥有一个或多个分区键,以识别某一特定的分区。分区概览会展示分区的数据记录、文件数量以及文件的大小,并且支持对分区的删除操作。
● Paimon 快照概览
快照记录了一个表在某一特定时间点的状态。用户能够借助最新的快照获取一个表的最新数据。利用时间旅行,用户还可以通过较早的快照访问表的先前状态。快照概览展示了当前表的所有快照、最新 snapshot,支持手动创建标签并在列表中展示引用关系,同时支持快照的删除和回滚操作。
● Paimon 标签概览
标签是对快照的引用,能够基于某个特定快照创建。用户能够在特定的快照上添加标签,如此一来,即便快照过期且被删除,只要标签仍然存在,就能够通过标签访问到相应的数据。标签概览展示了表的所有历史标签版本、标签与快照的引用关系,并且支持标签的删除操作。
湖表治理
● Paimon 小文件合并
随着时间的不断推移,持续的写入操作或许会产生大量的小文件,这将致使查询性能降低,原因在于系统需要打开并读取更多的文件。Compaction 能够通过合并这些小文件,从而减少文件的总数。在数据文件治理中,支持对 Paimon Table、Database 的小文件进行治理。
Compaction Table 支持三种排序策略,通过配置不同的治理方式,支持周期性地对表进行治理。Compaction Database 支持对单个或者多个库执行文件的合并操作。
● Paimon 孤儿文件清理
孤儿文件指的是那些不再被任何快照所引用的文件,其可能因异常的写入操作、未完成的事务或者错误的删除操作而出现。清理此类孤儿文件是维系数据湖健康状态的关键环节,毕竟它们会占据存储空间。
袋鼠云实时湖仓能够通过配置表的孤儿文件清理策略,支持清理 24 小时以前的孤儿文件,同时还能够通过配置周期治理,实现周期性地对孤儿文件进行治理。
● Paimon 过期快照清理
Paimon Writer 在每次提交数据时,会生成一个或两个快照。这些快照可能包含新增的数据文件,也可能将一些旧的数据文件标记为删除。需要注意的是,即使数据文件被标记为删除,它们也不会立即从物理存储中真正删除。通过配置过期快照清理和过期快照保留数量,可以对快照进行物理存储的删除操作。
一键 Hive 表转 Paimon 表
● 原地转表
使用 Spark 内置的 migrate_table 进行表迁移时,会先创建一个临时的 Paimon 表,然后将源表的文件直接移动到该临时表中,接着对临时 Paimon 表进行 rename 操作,使其表名与源表一致,这样原来的 Hive 表就不再存在。
● New 新表
袋鼠云实时湖仓自定义了一个全新的存储过程 migrate_to_target_table ,该存储过程会读取源表的数据,创建目标 Target 表,并把源表的数据写入到新创建的 Target 表中,在此过程中原有的 Hive 表依然得以保留。
《行业指标体系白皮书》下载地址:https://www.dtstack.com/resources/1057?src=szsm
《数栈产品白皮书》下载地址:https://www.dtstack.com/resources/1004?src=szsm
《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001?src=szsm
想了解或咨询更多有关大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szcsdn
相关文章:

基于 Paimon 的袋鼠云实时湖仓入湖实战剖析
在当今数据驱动的时代,企业对数据的实施性能力提出了前所未有的高要求。为了应对这一挑战,构建高效、灵活且可扩展的实时湖仓成为数字化转型的关键。本文将深入探讨袋鼠云数栈如何通过三大核心实践——ChunJun 融合 Flink CDC、MySQL 一键入湖至 Paimon …...
IPython相关了解
一、什么是 IPython? 1.1 简单理解 IPython IPython 是一种增强的 Python 交互式解释器,它可以让你更方便地编写、调试和运行 Python 代码。你可以把它想象成一个比普通 Python 解释器更聪明、功能更丰富的工具,非常适合用来进行数据探索、…...

华为面试题及答案——机器学习(二)
21. 如何评价分类模型的优劣? (1)模型性能指标 准确率(Accuracy): 定义:正确分类的样本数与总样本数之比。适用:当各类样本的数量相对均衡时。精确率(Precision): 定义:预测为正类的样本中实际为正类的比例。适用:当关注假阳性错误的成本较高时(例如垃圾邮件检测…...

PlatformIO开发环境
PlatformIO是一个开源的生态系统,用于构建物联网应用,它支持多种微控制器(MCU)和硬件开发板,并且与各种IDE集成良好,如VSCode, Atom等,使得跨平台的固件开发变得更加简单和高效。 ### 平台介绍…...
In install.packages(“devtools“, verbose = TRUE) :
错误于curl::curl_download("https://r-lib.github.io/gert/libgit2-1.1.0.x86_64_legacy-linux.tar.gz", : Timeout was reached: [] Connection timed out after 10004 milliseconds 停止执行 Using PKG_CFLAGS Using PKG_LIBS-lgit2 ----------------------------…...

计算机网络 访问控制列表以及NAT
一、理论知识 1. 单臂路由 单臂路由是一种在路由器上配置多个子接口的方法,每个子接口代表不同的 VLAN,用于在一个物理接口上支持多 VLAN 通信。此方法使得不同 VLAN 之间可以通过路由器进行通信。 2. NAT (网络地址转换) NAT 是一种在私有网络和公共…...
使用Oracle IMP导入数据
使用Oracle IMP导入数据 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊一聊如何使用Oracle的IMP工具来导入数据。 一、什么是Oracle IMP Oracle…...
C++ 100 之 容器插入和删除
vector插入和删除操作 insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count个元素ele. push_back(ele); //尾部插入元素ele pop_back();//删除最后一个元素 erase(const_iterator start, const_iterator end);//删除迭代器从start到end之间的元素 erase(c…...
提升 Selenium 测试稳定性的秘诀:深入理解等待 API 的使用
目录 为什么需要等待Selenium 等待 API 简介隐式等待显式等待Fluent Wait等待策略的选择示例代码总结 正文 1. 为什么需要等待 在 Web 自动化测试中,等待是一个关键因素。网络应用通常是动态的,页面加载时间、元素的显示时间都可能不同步。直接操作这…...
Python-算法编程100例-滑动窗口(入门级)
题目1:最大连续1的个数(简单) 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 解答:前缀和双指针 # 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 from typing import Listclass So…...

ffmpeg使用mjpeg把yuvj420p编码为jpg图像
version #define LIBAVUTIL_VERSION_MAJOR 58 #define LIBAVUTIL_VERSION_MINOR 12 #define LIBAVUTIL_VERSION_MICRO 100 node 不使用AVOutputFormat code void CFfmpegOps::EncodeYUVJ420pToMJPEG(const char* infile, const char* width_str, const char* height_s…...

龙迅#LT6911GXC支持HDMI2.1转MIPI/4PORT LVDS应用功能,分辨率高达8K30HZ/4K120HZ压缩格式。
1. 描述 该LT6911GXC是一款高性能HD-DVI2.1转MIPI或LVDS芯片,适用于VR/显示应用。 HDCP RX作为HDCP中继器的上游,可以与其他芯片的HDCP TX配合实现中继器功能。 对于 HD-DVI2.1 输入,LT6911GXC可以配置为 3/4 通道。 对于MIPI输出,…...
.NET 6.0 Web API项目中实现基于Token的身份验证
本文以一个完整的示例,展示如何在.NET 6.0 Web API项目中实现基于Token的身份验证。这个例子包括了如何创建和验证JWT Token,以及如何在控制器中使用这些Token。 步骤 1: 创建Web API项目 首先,用Visual Studio 2022创建一个基于.NET6.0的 …...
Java常用对象的快速初始化
在Java中,有多种方式来快速初始化各种常用对象,如字符串数组(String[]),集合列表(List),映射表(Map),以及集合(Set)。不同…...
逻辑回归模型模拟实现:从零开始
引言 逻辑回归是一种用于二分类问题的机器学习算法。尽管它的名字中有“回归”,但它实际上是用于分类的。在本文中,我们将通过模拟数据来演示逻辑回归模型的实现。 逻辑回归简介 逻辑回归通过使用逻辑函数(通常是Sigmoid函数)将…...

Docker基本使用和认识
目录 基本使用 镜像仓库 镜像操作 Docker 如何实现镜像 1) namespace 2) cgroup 3) LXC Docker常见的网络类型 bridge网络如何实现 基本使用 镜像仓库 镜像仓库登录 1)docker login 后面不指定IP地址,则默认登录到 docker hub 上 退出 2)docker logo…...

Halcon 文本文件操作,形态学
一文件的读写 *******************************************************向文本文件写入字符串内容*************************************************************read_image (Image, fabrik)threshold (Image, Region, 0, 120)area_center (Region, Area, Row, Column)open_…...
【鸿蒙】稍微理解一下Stage模型
鸿蒙的Stage模型是HarmonyOS多端统一的应用开发框架中的一个核心概念,用于描述应用的界面层次结构和组件之间的关系。下面将详细解析Stage模型的主要组成部分和特点: 模型组成: UIAbility组件:这是应用中负责绘制用户界面的组件&a…...

毕业答辩制作PPT【攻略】
毕业答辩制作PPT【攻略】 前言版权毕业答辩制作PPT【攻略】一、WPS AI 15天免费会员二、AI文档生成PPT三、修改完善PPT 最后 前言 2024-06-14 23:43:05 以下内容源自《【攻略】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN…...
深入解析npm install --save-dev:开发依赖管理的艺术
npm(Node Package Manager)是JavaScript编程语言的包管理器,用于管理项目中的依赖关系。在开发过程中,合理地管理依赖是保证项目可维护性和可扩展性的关键。npm install命令是npm中最常用的命令之一,而--save-dev参数则…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...