StarRocks × MinIO:打造靈活高效的存算分離方案

“存算分離”(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),因為集合比其他數據類型更復雜。我們還將討論如何處理可空元素時常用的便利方法。 集合與空值 可空集合和…