“存算分离”(Decoupled Storage and Compute)是一种在现代数据系统中被广泛采用的架构设计。它将计算和存储解耦,使二者可以独立扩展,提升资源利用率并降低运维成本。StarRocks 从 3.0 版本开始支持这一架构,允许用户将数据存储从计算节点中剥离,实现更灵活、弹性的系统部署。

在这种架构中,计算层由数据库引擎负责,存储则交由对象存储系统承担。对象存储的实现方式有很多,包括各大公有云厂商提供的服务以及一些开源方案。我们在本文中选择 MinIO 作为示例,是因为它开源、高性能、支持 S3 协议,并且非常适合用于本地测试或私有部署。

MinIO 和 StarRocks 的组合正是存算分离架构的一个实践案例。MinIO 提供可靠的对象存储能力,StarRocks 专注于查询加速与计算优化,二者结合,在实时和离线分析场景下都能提供良好的性能表现与灵活性。

此外,两者都支持 Kubernetes 原生部署,可以轻松集成到现代云原生平台中。用户无需绑定特定云厂商,也可以通过简单的 YAML 文件,在本地或云上快速搭建和演进整个数据平台。这种部署模式对于开发测试、混合云、边缘计算等场景尤其友好。

下面我们将提供一份实践教程,介绍如何使用 MinIO 作为主存储,配合 StarRocks 构建起一套完整的数据分析环境。如需详细的配置说明,可参考文末链接至 StarRocks 官方文档。

存算分离架构的优势

在引入存算分离架构的同时,StarRocks 也提供了本地缓存机制,用于降低远程对象存储访问频次,从而提高数据读取性能,缓解网络瓶颈。整体优势包括:

  • 成本控制:计算和存储资源可独立扩展,按需配置,避免资源浪费;

  • 部署灵活:可根据业务场景自由组合不同的计算与存储系统;

  • 弹性扩展:适配动态负载需求,计算与存储节点可分别扩容;

  • 查询性能优化:结合本地缓存机制,提升对热点数据的访问效率;

  • 可维护性更高:工作负载可在不同资源池之间迁移,方便运维管理;

  • 资源隔离更清晰:适用于多租户、不同业务线的资源划分需求。

快速开始

接下来你将学到如何在 Docker 容器中运行 StarRocks 和 MinIO,配置 StarRocks 以使用共享存储,加载两个公开数据集,并使用 SQL 进行数据探索。

前置条件

你需要安装:

  • curl:用于下载 YAML 和数据文件;

  • Docker Compose:推荐直接安装 Docker Desktop,它包含了 Docker Engine 和 Compose;

  • 验证安装情况:

docker compose version
  • SQL 客户端:比如 DBeaverMySQL CLI

本教程中的 MySQL 实例可以通过 MySQL CLI 访问,因此不需要额外依赖。当然,你也可以下载 DBeaver 或 MySQL Workbench 来获得更好的使用体验。

开始使用

  1. 创建工作目录并下载 Docker Compose 文件:

mkdir sr-quickstart
cd sr-quickstart
curl -O https://raw.githubusercontent.com/StarRocks/demo/master/documentation-samples/quickstart/docker-compose.yml
  1. 使用以下命令让 Docker Compose 在后台启动 docker-compose.yml 文件中定义的所有容器:

docker compose up -d

MinIO 设置

你可以通过 MinIO 控制台或使用 mc 来操作 MinIO。以下截图和说明基于 MinIO 控制台。

打开浏览器访问:http://localhost:9001/access-keys。用户名和密码在 Docker Compose 文件中已配置,默认是 minioadmin:minioadmin

点击 “Create access key +”,然后点击 “Create”。

连接 SQL 客户端(以 DBeaver 为例)

你需要连接到一个 SQL 客户端来操作数据。你可以选择使用 DBeaver。在 DBeaver 中创建一个新的数据库连接,然后选择 MySQL 数据库驱动:

  • 端口:9030

  • 地址:localhost

  • 用户名:root

测试连接成功后点击 Finish。

或者你更习惯使用命令行,也可以在 starrocks-fe 容器中使用 MySQL CLI。要连接到 StarRocks,请进入包含 docker-compose.yml 的目录,并运行以下命令:

docker compose exec starrocks-fe \
mysql -P9030 -h127.0.0.1 -uroot --prompt="StarRocks > "

创建 Bucket

在你的 SQL 客户端中运行以下命令,确保使用你之前在 MinIO 控制台中创建的 Access Key 和 Secret:

CREATE STORAGE VOLUME shared
TYPE = S3
LOCATIONS = ("s3://starrocks/shared/")
PROPERTIES
("enabled" = "true","aws.s3.endpoint" = "http://minio:9000","aws.s3.use_aws_sdk_default_behavior" = "false","aws.s3.enable_ssl" = "false","aws.s3.use_instance_profile" = "false","aws.s3.access_key" = "{你的 Access Key}","aws.s3.secret_key"= "{你的 Secret Key}"
);
SET shared AS DEFAULT STORAGE VOLUME;

访问 http://localhost:9001/buckets,确认名为 starrocks 的 bucket 是否已成功创建。

下载数据

在终端中运行以下命令,打开 starrocks-fe 容器中的 Bash shell,这样你就可以访问容器的文件系统并在其中执行命令:

docker compose exec starrocks-fe bash

运行以下命令,在容器内创建一个 quickstart 目录:

mkdir quickstart
cd quickstart

接着运行以下命令,将两个数据集下载到刚刚创建的文件夹中:

curl -O https://raw.githubusercontent.com/StarRocks/demo/master/documentation-samples/quickstart/datasets/NYPD_Crash_Data.csv
curl -O https://raw.githubusercontent.com/StarRocks/demo/master/documentation-samples/quickstart/datasets/72505394728.csv

创建数据库与表

在使用 SQL 客户端连接到 StarRocks 的终端窗口中,看到 StarRocks > 提示符后,运行以下命令。

CREATE DATABASE IF NOT EXISTS quickstart;
USE quickstart;

你的终端应该类似如下所示:

StarRocks > CREATE DATABASE IF NOT EXISTS quickstart;
Query OK, 0 rows affected (0.02 sec)
StarRocks > USE quickstart;
Database changed
StarRocks > 

在 SQL 客户端中创建表

返回 DBeaver 或你选择的其他 SQL 客户端,执行以下命令为数据创建表:

USE quickstart;

CREATE TABLE IF NOT EXISTS crashdata (CRASH_DATE DATETIME,BOROUGH STRING,ZIP_CODE STRING,LATITUDE INT,LONGITUDE INT,LOCATION STRING,ON_STREET_NAME STRING,CROSS_STREET_NAME STRING,OFF_STREET_NAME STRING,CONTRIBUTING_FACTOR_VEHICLE_1 STRING,CONTRIBUTING_FACTOR_VEHICLE_2 STRING,COLLISION_ID INT,VEHICLE_TYPE_CODE_1 STRING,VEHICLE_TYPE_CODE_2 STRING
);
CREATE TABLE IF NOT EXISTS weatherdata (DATE DATETIME,NAME STRING,HourlyDewPointTemperature STRING,HourlyDryBulbTemperature STRING,HourlyPrecipitation STRING,HourlyPresentWeatherType STRING,HourlyPressureChange STRING,HourlyPressureTendency STRING,HourlyRelativeHumidity STRING,HourlySkyConditions STRING,HourlyVisibility STRING,HourlyWetBulbTemperature STRING,HourlyWindDirection STRING,HourlyWindGustSpeed STRING,HourlyWindSpeed STRING
);

加载数据

切换到你之前下载数据集的终端,在 starrocks-fe 容器中的 shell 中执行以下 curl 命令。当提示输入密码时,直接按回车键即可。

curl --location-trusted -u root             \-T ./NYPD_Crash_Data.csv                \-H "label:crashdata-0"                  \-H "column_separator:,"                 \-H "skip_header:1"                      \-H "enclose:\""                         \-H "max_filter_ratio:1"                 \-H "columns:tmp_CRASH_DATE, tmp_CRASH_TIME, CRASH_DATE=str_to_date(concat_ws(' ', tmp_CRASH_DATE, tmp_CRASH_TIME), '%m/%d/%Y %H:%i'),BOROUGH,ZIP_CODE,LATITUDE,LONGITUDE,LOCATION,ON_STREET_NAME,CROSS_STREET_NAME,OFF_STREET_NAME,NUMBER_OF_PERSONS_INJURED,NUMBER_OF_PERSONS_KILLED,NUMBER_OF_PEDESTRIANS_INJURED,NUMBER_OF_PEDESTRIANS_KILLED,NUMBER_OF_CYCLIST_INJURED,NUMBER_OF_CYCLIST_KILLED,NUMBER_OF_MOTORIST_INJURED,NUMBER_OF_MOTORIST_KILLED,CONTRIBUTING_FACTOR_VEHICLE_1,CONTRIBUTING_FACTOR_VEHICLE_2,CONTRIBUTING_FACTOR_VEHICLE_3,CONTRIBUTING_FACTOR_VEHICLE_4,CONTRIBUTING_FACTOR_VEHICLE_5,COLLISION_ID,VEHICLE_TYPE_CODE_1,VEHICLE_TYPE_CODE_2,VEHICLE_TYPE_CODE_3,VEHICLE_TYPE_CODE_4,VEHICLE_TYPE_CODE_5" \-XPUT http://localhost:8030/api/quickstart/crashdata/_stream_load
curl --location-trusted -u root             \-T ./72505394728.csv                    \-H "label:weather-0"                    \-H "column_separator:,"                 \-H "skip_header:1"                      \-H "enclose:\""                         \-H "max_filter_ratio:1"                 \-H "columns: STATION, DATE, LATITUDE, LONGITUDE, ELEVATION, NAME, REPORT_TYPE, SOURCE, HourlyAltimeterSetting, HourlyDewPointTemperature, HourlyDryBulbTemperature, HourlyPrecipitation, HourlyPresentWeatherType, HourlyPressureChange, HourlyPressureTendency, HourlyRelativeHumidity, HourlySkyConditions, HourlySeaLevelPressure, HourlyStationPressure, HourlyVisibility, HourlyWetBulbTemperature, HourlyWindDirection, HourlyWindGustSpeed, HourlyWindSpeed, Sunrise, Sunset, DailyAverageDewPointTemperature, DailyAverageDryBulbTemperature, DailyAverageRelativeHumidity, DailyAverageSeaLevelPressure, DailyAverageStationPressure, DailyAverageWetBulbTemperature, DailyAverageWindSpeed, DailyCoolingDegreeDays, DailyDepartureFromNormalAverageTemperature, DailyHeatingDegreeDays, DailyMaximumDryBulbTemperature, DailyMinimumDryBulbTemperature, DailyPeakWindDirection, DailyPeakWindSpeed, DailyPrecipitation, DailySnowDepth, DailySnowfall, DailySustainedWindDirection, DailySustainedWindSpeed, DailyWeather, MonthlyAverageRH, MonthlyDaysWithGT001Precip, MonthlyDaysWithGT010Precip, MonthlyDaysWithGT32Temp, MonthlyDaysWithGT90Temp, MonthlyDaysWithLT0Temp, MonthlyDaysWithLT32Temp, MonthlyDepartureFromNormalAverageTemperature, MonthlyDepartureFromNormalCoolingDegreeDays, MonthlyDepartureFromNormalHeatingDegreeDays, MonthlyDepartureFromNormalMaximumTemperature, MonthlyDepartureFromNormalMinimumTemperature, MonthlyDepartureFromNormalPrecipitation, MonthlyDewpointTemperature, MonthlyGreatestPrecip, MonthlyGreatestPrecipDate, MonthlyGreatestSnowDepth, MonthlyGreatestSnowDepthDate, MonthlyGreatestSnowfall, MonthlyGreatestSnowfallDate, MonthlyMaxSeaLevelPressureValue, MonthlyMaxSeaLevelPressureValueDate, MonthlyMaxSeaLevelPressureValueTime, MonthlyMaximumTemperature, MonthlyMeanTemperature, MonthlyMinSeaLevelPressureValue, MonthlyMinSeaLevelPressureValueDate, MonthlyMinSeaLevelPressureValueTime, MonthlyMinimumTemperature, MonthlySeaLevelPressure, MonthlyStationPressure, MonthlyTotalLiquidPrecipitation, MonthlyTotalSnowfall, MonthlyWetBulb, AWND, CDSD, CLDD, DSNW, HDSD, HTDD, NormalsCoolingDegreeDay, NormalsHeatingDegreeDay, ShortDurationEndDate005, ShortDurationEndDate010, ShortDurationEndDate015, ShortDurationEndDate020, ShortDurationEndDate030, ShortDurationEndDate045, ShortDurationEndDate060, ShortDurationEndDate080, ShortDurationEndDate100, ShortDurationEndDate120, ShortDurationEndDate150, ShortDurationEndDate180, ShortDurationPrecipitationValue005, ShortDurationPrecipitationValue010, ShortDurationPrecipitationValue015, ShortDurationPrecipitationValue020, ShortDurationPrecipitationValue030, ShortDurationPrecipitationValue045, ShortDurationPrecipitationValue060, ShortDurationPrecipitationValue080, ShortDurationPrecipitationValue100, ShortDurationPrecipitationValue120, ShortDurationPrecipitationValue150, ShortDurationPrecipitationValue180, REM, BackupDirection, BackupDistance, BackupDistanceUnit, BackupElements, BackupElevation, BackupEquipment, BackupLatitude, BackupLongitude, BackupName, WindEquipmentChangeDate" \-XPUT http://localhost:8030/api/quickstart/weatherdata/_stream_load

完成后,返回浏览器访问 http://localhost:9001,确认数据是否已成功上传到 MinIO。

查询数据

回到你的 SQL 客户端,我们来对刚才加载的数据运行一些查询。首先,我们通过查询来了解降水、交通事故与星期几/时间之间的关系:

SELECT COUNT(DISTINCT c.COLLISION_ID) AS Crashes,TRUNCATE(AVG(w.HourlyDryBulbTemperature), 1) AS Temp_F,MAX(w.HourlyPrecipitation) AS Precipitation,DATE_FORMAT(c.CRASH_DATE, '%d %b %Y %H:00') AS Hour
FROM crashdata c
LEFT JOIN weatherdata w
ON DATE_FORMAT(c.CRASH_DATE, '%Y-%m-%d %H:00:00') = DATE_FORMAT(w.DATE, '%Y-%m-%d %H:00:00')
WHERE DAYOFWEEK(c.CRASH_DATE) BETWEEN 2 AND 6
GROUP BY Hour
ORDER BY Crashes DESC
LIMIT 200;

开放表格式+对象存储实践

最后,我们再放上 StarRocks x Apache Iceberg/Hudi x MinIO 的视频 demo,只要短短几分钟就可以完成数据入湖到可视化:

  • Apache Iceberg:https://www.bilibili.com/video/BV1ET42167TY/

  • Apache Hudi:https://www.bilibili.com/video/BV1G45PzHEuF/

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言的分位数回归实践技术高级应用

回归是科研中最常见的统计学研究方法之一,在研究变量间关系方面有着极其广泛的应用。由于其基本假设的限制,包括线性回归及广义线性回归在内的各种常见的回归方法都有三个重大缺陷:(1)对于异常值非常敏感,极少量的异常值可能导致结…

Tomcat的部署、单体架构、session会话、spring

一、Tomcat的部署①②③④⑤二.web项目在tomcat服务中如何运行:1.web项目源码部署在服务器的webapps目录里面2.将web项目打包(war),部署在服务器的webapps目录里面。三 单体架构和前后端分离单体架构是将所有功能模块(包括前端界面、后端逻辑、数据库交互…

海康威视视觉算法岗位30问及详解

海康威视视觉算法岗位30问及详解 前言 视觉算法工程师是人工智能领域的热门岗位,尤其在安防、自动驾驶、工业检测等行业有着广泛应用。海康威视作为行业龙头,对视觉算法岗位的要求较高,面试问题既考察基础理论,也关注工程实现。本…

14.7 Alpaca格式深度解析:3倍指令准确率提升的LLM微调秘诀

文章目录 Alpaca格式深度解析:3倍指令准确率提升的LLM微调秘诀 指令微调格式:Alpaca Format 深度解析 14.3.1 Alpaca 格式诞生背景与技术价值 14.3.2 Alpaca 格式结构解析 14.3.3 实战 Dolly-15K 数据转 Alpaca 格式 14.3.4 Alpaca 格式的工程化实践 14.3.5 格式扩展与挑战应…

42.sentinel实现线程隔离

线程隔离有两种实现方式: 1.线程池隔离 优点: 1.支持主动超时,线程池中的线程都是可控的,可以停掉某个线程。 2.支持异步调用,每个请求都是一个独立的线程,线程之间不受影响。 缺点: 线程的额外开销比较大 适用场景: 低扇出(一个微服务,不会依赖很多微服务)…

【过拟合和欠拟合】——深度学习.全连接神经网络

目录 1 概念认知 1.1 过拟合 1.2 欠拟合 1.3 如何判断 2 解决欠拟合 3 解决过拟合 3.1 L2正则化 3.1.1 数学表示 3.1.2 梯度更新 3.1.3 作用 3.1.4 代码实现 3.2 L1正则化 3.2.1 数学表示 3.2.2 梯度更新 3.2.3 作用 3.2.4 与L2对比 3.2.5 代码实现 3.3 Drop…

Java设计模式之行为型模式(备忘录模式)应用场景分析

最近看到一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 一、用户交互与编辑操作 文本编辑器撤销/重做 场景描述:用户编辑文档时,可通过CtrlZ撤销误操作,或通过Ctr…

5.Java的4个权限修饰符

1.private(私有访问权限)最严格的访问修饰符,它限定被修饰的成员仅能在声明它的当前类内部访问。其他任何外部类都无法直接访问该成员。作用:强制封装,确保类内部实现细节的隐藏性和数据安全性2.默认权限(包…

Linux入门介绍

目录 一、环境 二、Linux发展历史 1、计算机 2、操作系统 四、认识Linux的 内核版本名称 一、环境 一般是Centos 7 Ubuntu 20.04 / 22.04 前者已经停止更新与维护,但很多公司还在使用前者 二、Linux发展历史 1、计算机 1945年 2.14---埃尼阿克---军事用处&…

spring boot2升级boot3

spring boot2升级boot3 整体流程如下 1、借助于开源的自动化代码重构工具OpenRewrite,快速地进行代码重构等 2、相关坐标升级更改 3、配置文件属性更改 4、打包、构建与运行验证 1. 前期准备工作第一步:确保升级之前项目是可编译运行的第二步&#xff1a…

mac终端设置代理

在Mac上配置终端走代理,需设置终端(如zsh或bash)使用HTTP/HTTPS/SOCKS代理,以便命令行工具(如curl、git、npm)通过代理访问网络。以下是详细步骤,适用于macOS 10.15及以上版本。 前提条件 代理服…

VSTO Excel中打开WinForm.ShowDialog()后,如果要使用当前的wb.Application在后台操作其他Excel文件(保持隐藏状态)

在VSTO Excel中打开WinForm.ShowDialog()后,如果要使用当前的wb.Application在后台操作其他Excel文件(保持隐藏状态),可以通过以下几种方式实现: 方法一:设置Application属性控制可见性 // 在WinForm中获取…

【网络安全】DDOS攻击

如果文章不足还请各位师傅批评指正!你有没有过这种经历:双 11 抢券时页面卡成幻灯片,游戏团战突然全员掉线,刷视频时进度条永远转圈圈?除了 “网渣”,可能还有个更糟的原因 —— 你正被 DDoS 攻击 “堵门”…

第9天 | openGauss中一个表空间可以存储多个数据库

接着昨天继续学习openGauss,今天是第9天了。今天学习内容是o一个数据库可以存储在多个表空间中。 老规矩,先登陆墨天轮为我准备的实训实验室 rootmodb:~# su - omm ommmodb:~$ gsql -r作业要求 1.创建表空间newtbs1 omm# CREATE TABLESPACE newtbs1 RELATIVE LOCATI…

H3C路由器模拟PPPOE拨号

拓扑简图 效果图 PPPoE服务器端脚本 1. 基础配置 system-view sysname PPPoE-Server # 可选,设置设备名称2. 创建本地用户(认证账号)​ local-user pppuser class network # 创建网络类用户 password simple 123456 # 设置密码(PAP/CHAP共用) service-type ppp #

Github Actions Workflows 上传 Dropbox

一、注册 访问 https://www.dropbox.com/register选择 "个人" 如果想免费使用,一定要选择 “继续使用2GB的Dropbox Basic 套餐”,如下: 二、在 Dropbox 中 创建app 需要去注册的邮箱中验证一下邮箱.访问 https://www.dropbox.com…

生产管理系统实现生产全过程可视化

随着现代工业的不断发展,智能制造、数字化转型已成为企业提高竞争力的重要途径。生产管理作为企业运营的核心环节,直接关系到产品质量、生产效率以及成本控制。传统的生产管理方式大多依赖手工记录和经验管理,存在信息滞后、数据不一致、响应…

CSS实现背景色下移10px

众所周知,背景颜色是不能移动的,通常是填充满当前容器。 不过可以想想其它办法。。 🧐 利用css3的线性属性linear,在垂直方向向下推要移动的距离设成透明颜色,能在视觉上巧妙实现下移的效果。 .title {height: 20px;background: linear-gradient(to bottom,rgba(255, …

访问 gitlab 跳转 0.0.0.0

1、检查防火墙是否关闭2、检查服务器端口是否被占用3、检查服务器是否对外开放80端口(gitlab 默认使用80端口)以阿里云服务器为例如果没有SSH 、HTTP、HTTPS 开放,需要增加规则进行添加点击确定即可。

Kotlin集合与空值

我们已经学习了 Kotlin 中的空安全(null safety)。在本节中,我们将讨论如何处理集合中的空值(null),因为集合比其他数据类型更复杂。我们还将讨论如何处理可空元素时常用的便利方法。 集合与空值 可空集合和…