Separate storage and compute
在存储与计算分离的系统中,数据存储在低成本、可靠的远端存储系统中,如 Amazon S3、Google Cloud Storage、Azure Blob Storage 和其他兼容 S3 的存储如 MinIO。热数据会被本地缓存,当缓存命中时,查询性能可与存储计算耦合架构相媲美。计算节点(CN)可以根据需求在几秒内添加或移除。这种架构降低了存储成本,确保了更好的资源隔离,并提供了弹性和可扩展性。
本教程涵盖:
- 在 Docker 容器中运行 StarRocks
- 使用 MinIO 作为对象存储
- 配置 StarRocks 以实现共享数据
- 导入两个公共数据集
- 使用 SELECT 和 JOIN 分析数据
- 基本数据转换(ETL 中的 T)
使用的数据由纽约市开放数据和 NOAA 的国家环境信息中心提供。
这两个数据集都非常大,因为本教程旨在帮助您接触 StarRocks 的使用,我们不会导入过去 120 年的数据。您可以在分配了 4 GB RAM 的机器上运行 Docker 镜像并导入这些数据。对于更大规模的容错和可扩展部署,我们有其他文档,并将在后续提供。
本文档包含 大量信息,内容以步骤为主,技术细节在后面。这是为了按以下顺序实现这些目的:
- 允许读者在共享数据部署中导入数据并分析这些数据。
- 提供共享数据部署的配置细节。
- 解释数据导入过程中的基本数据转换。
前提条件
Docker
- Docker
- 分配给 Docker 的 4 GB RAM
- 分配给 Docker 的 10 GB 可用磁盘空间
SQL 客户端
您可以使用 Docker 环境中提供的 SQL 客户端,或使用您系统上的客户端。许多兼容 MySQL 的客户端都可以使用,本指南涵盖了 DBeaver 和 MySQL Workbench 的配置。
curl
curl 用于向 StarRocks 发起数据导入任务,并下载数据集。通过在操作系统提示符下运行 curl 或 curl.exe 来检查是否已安装 curl。如果未安装 curl,请在此获取 curl。
/etc/hosts
本指南中使用的导入方法是 Stream Load。Stream Load 连接到 FE 服务以启动导入任务。然后 FE 将任务分配给后端节点,即本指南中的 CN。为了使导入任务能够连接到 CN,CN 的名称必须在您的操作系统中可用。将以下行添加到 /etc/hosts:
127.0.0.1 starrocks-cn
术语
FE
前端节点负责元数据管理、客户端连接管理、查询规划和查询调度。每个 FE 在其内存中存储并维护一份完整的元数据副本,确保 FEs 之间的服务无差别。
CN
计算节点负责在共享数据部署中执行查询计划。
BE
后端节点负责在无共享部署中进行数据存储和执行查询计划。
本指南不使用 BEs,此信息仅供您了解 BEs 和 CNs 之间的区别。
编辑您的 hosts 文件
本指南中使用的导入方法是 Stream Load。Stream Load 连接到 FE 服务以启动导入任务。然后 FE 将任务分配给后端节点——本指南中的 CN。为了使导入任务能够连接到 CN,CN 的名称必须在您的操作系统中可用。将以下行添加到 /etc/hosts:
127.0.0.1 starrocks-cn
下载实验文件
需要下载三个文件:
- 部署 StarRocks 和 MinIO 环境的 Docker Compose 文件
- 纽约市交通事故数据
- 天气数据
本指南使用 MinIO,它是根据 GNU Affero 通用公共许可证提供的兼容 S3 的对象存储。
创建一个目录来存储实验文件
mkdir quickstart
cd quickstart
下载 Docker Compose 文件
curl -O https://raw.githubusercontent.com/StarRocks/demo/master/documentation-samples/quickstart/docker-compose.yml
下载数据
下载这两个数据集:
纽约市交通事故数据
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
部署 StarRocks 和 MinIO
docker compose up --detach --wait --wait-timeout 120
FE、CN 和 MinIO 服务变为健康状态大约需要 30 秒。quickstart-minio_mc-1 容器将显示 Waiting 状态和一个退出代码。退出代码为 0 表示成功。
[+] Running 4/5
✔ Network quickstart_default Created 0.0s
✔ Container minio Healthy 6.8s
✔ Container starrocks-fe Healthy 29.3s
⠼ Container quickstart-minio_mc-1 Waiting 29.3s
✔ Container starrocks-cn Healthy 29.2s
container quickstart-minio_mc-1 exited (0)
MinIO
本快速入门使用 MinIO 进行共享存储。
验证 MinIO 凭证
要将 MinIO 用作 StarRocks 的对象存储,StarRocks 需要一个 MinIO 访问密钥。访问密钥是在 Docker 服务启动时生成的。为了帮助您更好地理解 StarRocks 如何连接到 MinIO,您应该验证密钥是否存在。
浏览到 http://localhost:9001/access-keys 用户名和密码在 Docker compose 文件中指定,分别是 miniouser 和 miniopassword。您应该看到有一个访问密钥。密钥是 AAAAAAAAAAAAAAAAAAAA,您无法在 MinIO 控制台中看到密钥,但它在 Docker compose 文件中是 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB:

如果 MinIO 网页 UI 中没有显示访问密钥,请检查 minio_mc 服务的日志:
docker compose logs minio_mc
尝试重新运行 minio_mc pod:
docker compose run minio_mc
为您的数据创建一个 bucket
当您在 StarRocks 中创建一个存储卷时,您将指定数据的 LOCATION:
LOCATIONS = ("s3://my-starrocks-bucket/")
打开 http://localhost:9001/buckets 并为存储卷添加一个 bucket。将 bucket 命名为 my-starrocks-bucket。接受列出的三个选项的默认值。
SQL 客户端
当前教程可以使用以下三个客户端进行测试,您只需选择其中一个:
- MySQL CLI:您可以从 Docker 环境或您的本机运行此客户端。
- DBeaver(社区版或专业版)
- MySQL Workbench