当前位置: 首页 > news >正文

Paimon+StarRocks 湖仓一体数据分析方案

本文整理自阿里云高级开发工程师曾庆栋(曦乐)在 Streaming Lakehouse Meetup 分享的内容,深入探讨了传统数据仓库分析、Paimon+StarRocks湖仓一体数据分析、StarRocks 与 Paimon 的协同使用方法与实现原理,以及StarRocks 社区湖仓分析的未来规划。

01 传统数据仓库分析实现方案简介

传统数据仓库分析的实现是一个典型 Lambda 架构,通过下图我们可以看出传统架构主要分为两层:上层是实时链路层,下层是离线链路层。它们的数据通过左侧的数据摄入层,通过不同路径将数据统一整合到像 Kafka 这样的消息队列中间件中,然后将数据分为两份相同的数据,分别由实时链路和批量链路进行处理,最终汇总到数据服务层,实现对用户提供数据分析服务的能力。

Lambda 架构的出现主要是因为用户对于实时分析需求的出现,以及流处理技术的逐渐成熟。但是它也有一些明显的弊端,如上图所示,它需要维护两套系统,这就会导致部署成本和人力成本都会增加。当业务变更的时候,也需要修改两套系统来适应业务的变化。
随着流处理技术的逐渐成熟,Lambda 架构之后又推出了 Kappa 架构,如下图所示。

Kappa 架构是使用流处理链路来代替原来的 Lambda 架构,因为流处理的成熟,所以通过一套系统去完成实时和离线的计算成为可能。
Kappa 架构有一个前提,它认为对于历史数据的重复计算,在非必要的情况下是不用进行的。这就使得当用户需要重新计算历史数据或是出现新业务变动的时候,往往需要将整个数据摄入阶段的过程重放一次。在大量消费历史数据的情况下,必然造成资源浪费,并遇到一些瓶颈。

02 Paimon+StarRocks 构建湖仓一体数据分析实现方案

2.1 数据湖中心

第一个方案是 Paimon 和 StarRocks 构建湖仓一体数据分析的数据湖中心方案。

StarRocks 本身是一个 MPP 的数据库,同时可以外接多种格式的数据湖组件,可以以单纯作为查询引擎去外接数据湖组件,实现查询功能。如上图,通过 StarRocks 或 Spark 都可以对 ODS 等数据层的 Paimon 组件进行查询。
在这个架构里,Paimon 通过对数据的落盘和索引,弥补了上文介绍的 Kappa 架构中消息队列中间件在数据的修改、回溯、查询等方面的不足,从而使得这个架构的容错率更高,支持的能力也更广泛。同时在批处理方面,Paimon 也可以完全兼容 HIVE 的能力。

2.2 加速查询

第二个方案是 Paimon 和 StarRocks 构建湖仓一体数据分析的加速查询方案。

它与第一个方案的区别是几乎整个系统都由 StarRocks 单独完成。当数据接入 Paimon,使它作为 ODS 层之后,通过 StarRocks 的外表特性来读取 Paimon 上的数据,建立一层物化视图来作为 DWD 层。
StarRocks 的物化视图具有一定的 ETL 的能力,当它作为 DWD 层之后,又通过第二层嵌套物化视图来作为 DWS 层,最终提供给数据服务层进行数据分析。
通过 StarRocks 的这套系统配合 Paimon 这个架构的两个优点是:

  • 简化了运维,因为它不用再去维护各种组件,只需要 StarRocks 和 Paimon 就可以完成数据分析方案的构建;
  • 查询速度快,因为 StarRocks 是一套从构建索引、数据存储、查询优化都自成体系的一个数据湖引擎,所以它相比上文介绍的其他各种查询引擎速度更快。

2.3 物化视图

上图右侧 SQL 是描述如何建立一个 StarRocks 异步物化视图。它主要有以下几个特点:

  • 通过 SQL 定义,上手简单,方便维护;
  • 预计算,降低查询延时,减少重复计算开销;
  • 自动查询路由,无需改写 SQL,透明加速;
  • 支持异步自动刷新数据,定时刷新,智能按分区刷新;
  • 支持多表构建,基表可来自内表、外表和已有的物化视图。

2.4 冷热分离

这是通过 Paimon + StarRocks 实现冷热分离的特性。

冷热分离的概念,是希望可以将经常查询的热数据存储到查询快的像 StarRocks 这种 OLAP 引擎上,不经常查询的冷数据存储到比较廉价的远程文件存储组件,比如 OSS 和 HDFS。
如上图 Paimon + StarRocks 冷热分离的例子,如果构建了这样一个冷热分离的 MV 表,当查询到这张表的时候,会自动选择在 StarRocks 上分布的这个热数据和在 Paimon 分布的冷数据。然后对查询结果合并,并返回给用户。

03 StarRocks 与 Paimon结合的使用方式与实现原理

3.1 Paimon 外表使用

得益于 StarRocks 对外表 Catalog 的抽象,在 Paimon 推出不久,StarRocks 就以实现相应接口的方式,实现了对于 Paimon 外表的支持。在对接 Paimon 外表时,只需要在 StarRocks 上执行下面这条 Create External Catalog 语句,对 Type 指定为 Paimon,填写上对应的路径之后就可以直接查询 Paimon 中的数据了。

3.2 JNI Connector

JNI Connector 是使得 StarRocks 和 Paimon 结合的一个比较重要的特性。

JNI Connector 的背景是 StarRocks 对于数据处理的组件是 C++ 程序编写的,但是数据湖组件提供的 SDK 大多数是 Java 的,没有 C++ 的 SDK,如果 StarRocks 想要通过 BE 访问数据湖组件底层数据的话,只能访问它原生的 ORC/Parquet 等格式,无法应用这些组件所提供的高级功能。

JNI Connector 是一个抽象的,针对所有外表 Java SDK 都可以适用的 Connector。它用于 StarRocks 的 BE 组件上,是处于 BE 和数据湖组件 Java SDK 之间的中间层。

JNI Connector 的主要功能是调用数据湖组件的 Java SDK 去读取数据湖的数据,然后将读取到的数据以 StarRocks 的 BE 可识别的内存排列方式写入到一块堆外内存上,然后将这个内存交接给 BE C++程序去运行,这样就使得它可以将 BE 和 Java SDK 进行衔接。

JNI Connector 有以下几个特点:

  • 快速接入各类 Java 数据源,无需考虑数据转换;
  • 提供简单易用的 Java 接口;
  • 已支持 Hudi MOR Table,Paimon Table;
  • 支持 Struct, Map, Array 复杂类型;
  • BE 代码零侵入,不需要考虑 C++具体实现。

下图是 JNI Connector 当中一些细节的介绍。

上面是定长字段存储格式,下面是变长字段的存储格式。

  • 定长字段存储格式
    • 第一部分是对于这一列中每一行数据是否为 Null 的定义。
    • 第二部分是数据部分,这里存储定长的具体的数据。
  • 变长字段存储格式
    • 第一部分是对于这一列中每一行是否 Null 的数组;
    • 第二部分是描述第三部分具体数据中每一行数据开始读取的起始地址;
    • 第三部分是具体数据。

04 StarRocks 社区湖仓分析未来规划

当前 StarRocks 已经支持了 Paimon 的一部分特性,还有一些暂未实现。那么未来计划完善 Paimon 表分析的特性如下:

  • 支持分析复杂类型
  • 支持列统计信息
  • 支持元数据缓存
  • 支持 time travel
  • 支持基于 Paimon 外表的流式物化视图

Q&A

Q:请问物化视图如何做到有效管理?
A:物化视图在建立之后是可以自动刷新和调度的,不需要依赖外部组件去触发刷新。查询改写能力使得用户可以只查 base 表,不需要去指定查某个物化视图。这两个特性减少了不少管理方面的问题。而对于物化视图与 base 表之间、以及嵌套物化视图之间的依赖关系,EMR-Serverless-StarRocks 后续会推出一个任务调度与表依赖关系的 web 展示功能。

Q:Paimon+StarRocks 湖仓一体数据分析方案,在数据安全,比如访问控制、数据审计等,是否有具体的规划
?A:目前我了解到的 StarRocks 关于数据管理权限是基于角色分配的查看、修改等权限,对于不同角色赋予不同权限。另外,对于 OSS 或 HDFS 上的数据会有对应的组件认证功能。

Q:请问以 StarRocks 为主体的湖仓一体架构中,在从 Paimon 读取数据之后,会写回到 Paimon 吗?
A:在从 Paimon 读取完 ODS 层的数据后,会流入 StarRocks 的物化视图,之后是一层嵌套的 StarRocks 物化视图,并不会写回到 Paimon。

活动视频回顾 & PPT 获取

视频回放:https://www.bilibili.com/video/BV1WN411h7X1/
PPT 下载:https://forum.mirrorship.cn/t/topic/8711

对 StarRocks 感兴趣的小伙伴们欢迎加入StarRocks 社区群。在这里你可以和同样对StarRocks 感兴趣的用户们和核心开发者们沟通无阻!
下方扫码添加小助手,回复关键字“入群”即可加入
https://wx.focussend.com/weComLink/mobileQrCodeLink/33412/8da64

相关文章:

Paimon+StarRocks 湖仓一体数据分析方案

本文整理自阿里云高级开发工程师曾庆栋(曦乐)在 Streaming Lakehouse Meetup 分享的内容,深入探讨了传统数据仓库分析、PaimonStarRocks湖仓一体数据分析、StarRocks 与 Paimon 的协同使用方法与实现原理,以及StarRocks 社区湖仓分…...

界面控件DevExtreme(v23.2)下半年发展路线图

在这篇文章中,我们将介绍DevExtreme在v23.2中发布的一些主要特性,这些特性既适用于DevExtreme JavaScript (Angular、React、Vue、jQuery),也适用于基于DevExtreme的ASP. NET MVC/Core控件。 DevExtreme包含全面的高性能和响应式UI小部件集合…...

docker镜像配置mysql、redis

mysql 拉取mysql镜像 docker pull mysql:5.7创建并运行mysql容器 docker run -p 3306:3306 --name mysql\-v /mydata/mysql/log:/var/log/mysql\-v /mydata/mysql/data:/var/lib/mysql\-v /mydata/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD123456\-d mysql:5.7-e 设置…...

CentOS7无法连接网络 右上角网络图标消失

在使用 linux 的过程中,有时会出现网络图标消失的问题,这时系统会没有网络。 有些 linux 的网络连接由 NetworkManager 管理, 问题应由它解决。 先执行一下 systemctl restart NetworkManager 看有没有效果。 原因一 :NetworkMan…...

为什么创建 Redis 集群时会自动错开主从节点?

哈喽大家好,我是咸鱼 在《一台服务器上部署 Redis 伪集群》这篇文章中,咸鱼在创建 Redis 集群时并没有明确指定哪个 Redis 实例将担任 master,哪个将担任 slave /usr/local/redis-4.0.9/src/redis-trib.rb create --replicas 1 192.168.149…...

分布式 - 服务器Nginx:基础系列之Nginx静态资源配置优化sendfile | tcp_nopush | tcp_nodelay

文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令 请求静态资源的过程:客户端通过网络接口向服务端发送请求,操作系统将这些客户端的请求传递给服务器端应用程序,服务器端应用程序会处理这些请求&#xff…...

【动手学深度学习】--语言模型

文章目录 语言模型1.学习语言模型2.马尔可夫模型与N元语法3.自然语言统计4.读取长序列数据4.1随机采样4.2顺序分区 语言模型 学习视频:语言模型【动手学深度学习v2】 官方笔记:语言模型和数据集 在【文本预处理】中了解了如何将文本数据映射为词元&…...

uni-app 之 目录结构

目录结构: 工程简介 | uni-app官网 (dcloud.net.cn) pages/index/index.vue 页面元素等 static 静态文件,图片 字体文件等 App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期 index.html 项目运行最终生成的文件 main.js 引用的…...

批量上传图片添加水印

思路&#xff1a; 1、循环图片列表&#xff0c;批量添加水印。 2、与之对应的html页面也要魂环并添加水印。 代码实现&#xff1a; <view style"width: 0;height: 0;overflow: hidden;position:fixed;left: 200%;"><canvas v-for"(item,index) in …...

CPU和GPU性能优化

在Unity游戏开发中&#xff0c;优化CPU和GPU的性能是非常重要的&#xff0c;可以提高游戏的运行效率、降低功耗和延迟&#xff0c;并提高用户体验。以下是一些优化CPU和GPU性能的方法&#xff1a; 1.优化游戏逻辑和算法 减少不必要的计算和内存操作&#xff0c;例如避免频繁的…...

虚拟机(三)VMware Workstation 桥接模式下无法上网

目录 一、背景二、解决方式方式一&#xff1a;关闭防火墙方式二&#xff1a;查看桥接模式下的物理网卡是否对应正确方式三&#xff1a;查看物理主机的网络属性 一、背景 今天在使用 VMware Workstation 里面安装的 Windows 虚拟机的时候&#xff0c;发现虽然在 NAT 模式下可以…...

[BFS] 广度优先搜索

1. 数字操作 常见的模板 // 使用一个数组判断元素是否入过队 int inqueue[N] {0}; // 层数或者可以称为深度 int step 0; // 判断是否可以入队的条件 int isvalid(){ } BFS(int x){ // 将初始的元素压入队列 // 注意每次压队的时候都要将inque[x] 1,表明入队过…...

蓝桥杯官网填空题(矩形切割)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明有一些矩形的材料&#xff0c;他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时&#xff0c;他总是从中间切割一刀&#xff0c;切出一块最大的…...

通过Docker Compose安装MQTT

一、文件和目录说明 1、MQTT安装时的文件和目录 EMQX 安装完成后会创建一些目录用来存放运行文件和配置文件&#xff0c;存储数据以及记录日志。 不同安装方式得到的文件和目录位置有所不同&#xff0c;具体如下&#xff1a; 注意&#xff1a; 压缩包解压安装时&#xff0c;目…...

Golang企业面试题

Golang企业面试题 基础 高级 Golang有哪些优势&#xff1f;Golang数据类型有哪些Golang中的包如何使用Go 支持什么形式的类型转换&#xff1f;什么是 Goroutine&#xff1f;你如何停止它&#xff1f;如何在运行时检查变量类型&#xff1f;Go 两个接口之间可以存在什么关系&a…...

Jenkins测试报告样式优化

方式一&#xff1a;修改Content Security Policy&#xff08;临时解决&#xff0c;Jenkins重启后失效) 1、jenkins首页—>ManageJenkins—>Tools and Actions标题下—>Script Console 2、粘贴脚本输入框中&#xff1a;System.setProperty("hudson.model.Directo…...

函数相关概念

4.函数 1.函数的概念 1.什么是函数? 把特点的代码片段,抽取成为独立运行的实体 2.使用函数的好处1.重复使用,提供效率2.提高代码的可读性3.有利用程序的维护 3.函数的分类1.内置函数(系统函数)已经提高的alert(); prompt();confirm();print()document.write(),console.log()…...

2023软考学习营

...

Vue2进阶篇学习笔记

文章目录 Vue2进阶学习笔记前言1、Vue脚手架学习1.1 Vue脚手架概述1.2 Vue脚手架安装1.3 常用属性1.4 插件 2、组件基本概述3、非单文件组件3.1 非单文件组件的基本使用3.2 组件的嵌套 4、单文件组件4.1 快速体验4.2 Todo案例 5、浏览器本地存储6、组件的自定义事件6.1 使用自定…...

Python 正则表达式:强大的文本处理工具

概念&#xff1a; 正则表达式是一种强大的文本匹配和处理工具&#xff0c;它可以用来在字符串中查找、替换和提取符合某种规则的内容。在Python中&#xff0c;使用re模块可以轻松地操作正则表达式&#xff0c;它提供了丰富的功能和灵活的语法。 场景&#xff1a; 正则表达式…...

三步解锁Bruno API测试工具的隐藏潜力

三步解锁Bruno API测试工具的隐藏潜力 【免费下载链接】bruno 开源的API探索与测试集成开发环境&#xff08;作为Postman/Insomnia的轻量级替代方案&#xff09; 项目地址: https://gitcode.com/GitHub_Trending/br/bruno Bruno作为Postman的开源替代品&#xff0c;以其…...

Linux服务器无GPU也能跑!Ollama部署DeepSeek-R1模型存储路径自定义与性能调优指南

Linux服务器无GPU高效部署DeepSeek-R1模型全攻略&#xff1a;从存储路径优化到性能调优 当你在云服务器或老旧设备上尝试运行AI模型时&#xff0c;是否经常遇到存储空间不足或性能低下的困扰&#xff1f;本文将带你深入探索如何在无GPU的Linux环境中&#xff0c;通过Ollama高效…...

CYBER-VISION零号协议企业级AI Agent构建与部署指南

CYBER-VISION零号协议企业级AI Agent构建与部署指南 最近几年&#xff0c;AI Agent这个概念越来越火。你可能听过很多关于它的讨论&#xff0c;但真要自己动手从零开始搭建一个能在企业里稳定运行的智能体&#xff0c;是不是感觉有点无从下手&#xff1f;别担心&#xff0c;这…...

AI芯片算力揭秘:从INT8到FP16,如何正确理解不同精度的TOPS值?

AI芯片算力揭秘&#xff1a;从INT8到FP16&#xff0c;如何正确理解不同精度的TOPS值&#xff1f; 当你在选购AI加速卡时&#xff0c;是否曾被厂商宣传的"200TOPS算力"搞得晕头转向&#xff1f;作为在边缘计算部署过数十个模型的工程师&#xff0c;我必须告诉你一个残…...

LLM4Decompile:用AI魔法让二进制代码重获新生![特殊字符]

LLM4Decompile&#xff1a;用AI魔法让二进制代码重获新生&#xff01;&#x1f680; 【免费下载链接】LLM4Decompile LLM4Decompile是前端技术的革新之作&#xff0c;面向软件逆向工程领域的革命性工具。此开源项目利用大型语言模型深入二进制世界的奥秘&#xff0c;将复杂的机…...

从振荡器到稳定电源:用三阶RC滤波电路讲透控制环路的‘稳定’与‘发散’

从振荡器到稳定电源&#xff1a;三阶RC滤波电路揭示控制环路的稳定性本质 想象一下&#xff0c;你正在调试一个看似简单的三阶RC低通滤波电路。当你逐渐增大放大器的增益时&#xff0c;电路突然从安静的滤波状态转变为持续振荡——原本应该衰减高频信号的电路&#xff0c;现在…...

查重率亮红灯反复修改,有哪些真正闭眼可入的的AI智能降重工具推荐?

毕业论文降重&#xff0c;核心在于语义优化 去AI痕迹 降低查重率&#xff0c;工具选择直接影响修改效率。推荐免费与付费工具结合使用&#xff0c;既能节省成本又保证效果。下面按中文、英文、免费/付费分类整理&#xff0c;附上实测效果与适用场景。 一、中文论文降重工具&a…...

模型微调加持:百川2-13B+OpenClaw定制化个人助手实践

模型微调加持&#xff1a;百川2-13BOpenClaw定制化个人助手实践 1. 为什么需要定制化个人助手&#xff1f; 去年我尝试用现成大模型搭建自动化助手时&#xff0c;发现一个尴尬现象&#xff1a;当我让AI帮我整理会议纪要时&#xff0c;它总把技术术语解释得像科普读物&#xf…...

企业软件底层逻辑脱胎换骨:从席位订阅到决策订阅,下一个万亿公司属于这类玩家

允中 发自 凹非寺量子位 | 公众号 QbitAI大模型落地进入深水区&#xff0c;企业级软件正在发生一次底层逻辑的“脱胎换骨”。回顾技术发展史&#xff0c;ERP、CRM、BI的出现&#xff0c;本质上是在解决资源、客户与数据的“管理”问题。在此背景下&#xff0c;由哈佛大学博士、…...

实战指南:构建高性能离线语音识别系统的完整方案

实战指南&#xff1a;构建高性能离线语音识别系统的完整方案 【免费下载链接】whisper-base.en 项目地址: https://ai.gitcode.com/hf_mirrors/openai/whisper-base.en 在数据隐私日益受到重视的今天&#xff0c;本地化语音识别技术为处理敏感语音内容提供了安全可靠的…...