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

news2024/11/20 18:24:42

摘要:本文整理自阿里云高级开发工程师曾庆栋(曦乐)在 Streaming Lakehouse Meetup 的分享。内容主要分为四个部分:

  1. 传统数据仓库分析实现方案简介
  2. Paimon+StarRocks 构建湖仓一体数据分析实现方案
  3. StarRocks 与 Paimon 结合的使用方式与实现原理
  4. StarRocks 社区湖仓分析未来规划

点击查看原文视频 & 演讲PPT

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

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

1

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

随着流处理技术的逐渐成熟,Lambda 架构之后又推出了 Kappa 架构,如下图所示。

2

Kappa 架构是使用流处理链路来代替原来的 Lambda 架构,因为流处理的成熟,所以通过一套系统去完成实时和离线的计算成为可能。

Kappa 架构有一个前提,它认为对于历史数据的重复计算,在非必要的情况下是不用进行的。这就使得当用户需要重新计算历史数据或是出现新业务变动的时候,往往需要将整个数据摄入阶段的过程重放一次。在大量消费历史数据的情况下,必然造成资源浪费,并遇到一些瓶颈。

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

2.1 数据湖中心

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

3

StarRocks 本身是一个 MPP 的数据库,同时可以外接多种格式的数据湖组件,可以以单纯作为查询引擎去外接数据湖组件,实现查询功能。如上图,通过 StarRocks 或 Spark 都可以对 ODS 等数据层的 Paimon 组件进行查询。

在这个架构里,Paimon 通过对数据的落盘和索引,弥补了上文介绍的 Kappa 架构中消息队列中间件在数据的修改、回溯、查询等方面的不足,从而使得这个架构的容错率更高,支持的能力也更广泛。同时在批处理方面,Paimon 也可以完全兼容 HIVE 的能力。

2.2 加速查询

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

4

它与第一个方案的区别是几乎整个系统都由 StarRocks 单独完成。当数据接入 Paimon,使它作为 ODS 层之后,通过 StarRocks 的外表特性来读取 Paimon 上的数据,建立一层物化视图来作为 DWD 层。

StarRocks 的物化视图具有一定的 ETL 的能力,当它作为 DWD 层之后,又通过第二层嵌套物化视图来作为 DWS 层,最终提供给数据服务层进行数据分析。

通过 StarRocks 的这套系统配合 Paimon 这个架构的两个优点是:

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

2.3 物化视图

5

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

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

2.4 冷热分离

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

6

冷热分离的概念,是希望可以将经常查询的热数据存储到查询快的像 StarRocks 这种 OLAP 引擎上,不经常查询的冷数据存储到比较廉价的远程文件存储组件,比如 OSS 和 HDFS。

如上图 Paimon + StarRocks 冷热分离的例子,如果构建了这样一个冷热分离的 MV 表,当查询到这张表的时候,会自动选择在 StarRocks 上分布的这个热数据和在 Paimon 分布的冷数据。然后对查询结果合并,并返回给用户。

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

3.1 Paimon 外表使用

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

7

3.2 JNI Connector

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

8

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 当中一些细节的介绍。

9

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

  • 定长字段存储格式

    • 第一部分是对于这一列中每一行数据是否为 Null 的定义。
    • 第二部分是数据部分,这里存储定长的具体的数据。
  • 变长字段存储格式

    • 第一部分是对于这一列中每一行是否 Null 的数组;
    • 第二部分是描述第三部分具体数据中每一行数据开始读取的起始地址;
    • 第三部分是具体数据。

四、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

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

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

相关文章

从零开始,掌握C语言中的数据类型

数据类型 1. 前言2. 预备知识2.1 打印整数2.2 计算机中的单位 3. C语言有哪些数据类型呢?3.1 内置类型和自定义类型 4. 每种类型的大小是多少?5. 为什么有这么多数据类型呢?6. 这么多类型应该如何使用呢?6.1 一个小知识 1. 前言 …

Redis功能实战篇之Session共享

1.使用redis共享session来实现用户登录以及token刷新 当用户请求我们的nginx服务器,nginx基于七层模型走的事HTTP协议,可以实现基于Lua直接绕开tomcat访问redis,也可以作为静态资源服务器,轻松扛下上万并发, 负载均衡…

【VR】Network Manager HUD

💦本专栏是我关于VR开发的笔记 🈶本篇是——Network Manager HUD Network Manager HUD组件 简介基础知识 简介 网络管理器 HUD是一种快速启动工具,可帮助您立即开始构建多人游戏,而无需首先构建用于游戏创建/连接/加入的用户界面…

云原生Kubernetes:二进制部署K8S单Master架构(一)

目录 一、理论 1.K8S单Master架构 2. etcd 集群 3.flannel网络 4.K8S单Master架构环境部署 5.部署 etcd 集群 6.部署 docker 引擎 7.flannel网络配置 二、实验 1.二进制部署K8S单Master架构 2. 环境部署 3.部署 etcd 集群 4.部署 docker 引擎 5.flannel网络配置…

Ramp 有点意思的题目

粗一看都不知道这个要干什么,这 B 装得不错。 IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKJycnCktlZXAgdXMgb3V0IG9mIGdvb2dsZSBzZWFyY2ggcmVzdWx0cy4uCgokIG9kIC1kIC9kZXYvdXJhbmRvbSB8IGhlYWQKMDAwMDAwMCAgICAgNjAyMTUgICAyODc3OCAgIDI5MjI3ICAgMjg1NDggICA2MjY4NiAgIDQ1MT…

浏览器端vscode docker搭建(附带python环境)

dockerfile from centos:7 #安装python环境 run yum -y install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel zlib-devel libffi-devel gcc make run wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz run tar -xvf Python-3.9.…

六、编辑器vim编辑器的使用

1、编辑器 (1)编辑器就是一款软件。 (2)作用就是用来编辑文件,譬如编辑文字、编写代码。 (3)Windows中常用的编辑器,有自带的有记事本(notepad),比较好用的notepad、VSCode等。 (4)Linux中常用的编辑器,自带的最古老的vi&…

中文完形填空

本文通过ChnSentiCorp数据集介绍了完型填空任务过程,主要使用预训练语言模型bert-base-chinese直接在测试集上进行测试,也简要介绍了模型训练流程,不过最后没有保存训练好的模型。 一.完形填空 完形填空应该大家都比较熟悉,就是把…

文件上传漏洞-upload靶场5-12关

文件上传漏洞-upload靶场5-12关通关笔记(windows环境漏洞) 简介 ​ 在前两篇文章中,已经说了分析上传漏的思路,在本篇文章中,将带领大家熟悉winodws系统存在的一些上传漏洞。 upload 第五关 (大小写绕过…

如何用VMware虚拟机连上Xshell

目录 前言废话1.1设置虚拟机设置1.2 设置虚拟网络编辑器方法一:方法二: 1.3 配置静态IP地址1.4 Xshell连接虚拟机2.1 解决可能出现的一些问题2.1.1 虚拟机Ping不通网络2.1.2 我可以Ping通百度了,但是宿主机和虚拟机互相Ping不通。2.1.3 更离谱…

【8 排序】简单选择排序。

顺序表&#xff1a; void Swap(int &a,int &b){int temp;tempa;ab;btemp; } void SelectSort(int A[],int n){int min,i,j;for(i0;i<n-1;i){mini;for(ji1;j<n;j)if(A[j]<A[min])minj;if(min!i)Swap(A[i],A[min]);} } 单链表&#xff1a; void SelectSort…

【leetcode 力扣刷题】数学题之除法:哈希表解决商的循环节➕快速乘求解商

两道和除法相关的力扣题目 166. 分数到小数29. 两数相除快速乘解法一&#xff1a;快速乘变种解法二&#xff1a; 二分查找 快速乘 166. 分数到小数 题目链接&#xff1a;166. 分数到小数 题目内容&#xff1a; 题目是要求我们把一个分数变成一个小数&#xff0c;并以字符串的…

go锁-waitgroup

如果被等待的协程没了&#xff0c;直接返回 否则&#xff0c;waiter加一&#xff0c;陷入sema add counter 被等待协程没做完&#xff0c;或者没人在等待&#xff0c;返回 被等待协程都做完&#xff0c;且有人在等待&#xff0c;唤醒所有sema中的协程 WaitGroup实现了一组协程…

【MySQL】基础语法总结

MySQL 基础语句 一、DDL 数据库定义语言 1.1CREATE 创建 1.1.1 创建数据库 语法结构 CREATE DATABASE database_name;示例 CREATE DATABASE demo;1.1.2 创建表 语法结构 CREATE TABLE 表名 (列1 数据类型,列2 数据类型,... );示例 CREATE TABLE new_user (id INT PRIMARY KE…

python爬虫数据解析xpath

一、环境配置 1、安装xpath 下载地址&#xff1a;百度网盘 请输入提取码 第一步&#xff1a; 下载好文件后会得到一个没有扩展名的文件&#xff0c;重命名该文件将其改为.rar或者.zip等压缩文件&#xff0c;解压之后会得到一个.crx文件和一个.pem文件。新建一个文件夹&…

AI工人操作行为流程规范识别算法

AI工人操作行为流程规范识别算法通过yolov7python网络模型框架&#xff0c;AI工人操作行为流程规范识别算法对作业人员的操作行为进行实时分析&#xff0c;根据设定算法规则判断操作行为是否符合作业标准规定的SOP流程。Yolo意思是You Only Look Once&#xff0c;它并没有真正的…

怎样免费在公司访问家中的树莓派

最近拿起了大学时买的树莓派&#xff0c;刚好看到了一篇文章写到无公网IP&#xff0c;从公网SSH远程访问家中的树莓派 便来试试&#xff1a; 我的树莓派之前装过ssh&#xff0c;所以插上电就能用了。其实过程很简单&#xff0c;只需要在树莓派中下载一个cpolar即可。 curl -…

CSS3常用的新功能总结

CSS3常用的新功能包括圆角、阴渐变、2D变换、3D旋转、动画、viewpor和媒体查询。 圆角、阴影 border-redius 对一个元素实现圆角效果&#xff0c;是通过border-redius完成的。属性为两种方式&#xff1a; 一个属性值&#xff0c;表示设置所有四个角的半径为相同值&#xff…

UE5 实现Niagara粒子特效拖尾效果

文章目录 前言实现效果闪现示例疾跑示例实现新建Niagara系统应用Niagara系统实现拖尾效果应用拖尾颜色前言 本文采用虚幻5.2.1版本,对角色粒子特效拖尾效果进行讲解,从零开始,来实现此效果。此效果可以在角色使用某一技能时触发,比如使用闪现、疾跑等等。 实现效果 闪现示…

深入剖析 Golang 程序启动原理 - 从 ELF 入口点到GMP初始化到执行 main!

大家好&#xff0c;我是飞哥&#xff01; 在过去的开发工作中&#xff0c;大家都是通过创建进程或者线程来工作的。Linux进程是如何创建出来的&#xff1f; 、聊聊Linux中线程和进程的联系与区别&#xff01; 和你的新进程是如何被内核调度执行到的&#xff1f; 这几篇文章就是…