跳到主要内容
版本: 最新版本-3.5

使用 Azure Storage 进行共享数据

本主题介绍如何部署和使用共享数据 StarRocks 集群。此功能从 v3.0 开始支持 S3 兼容存储,v3.1 支持 Azure Blob Storage,v3.4.1 支持 Azure Data Lake Storage Gen2。

注意

  • StarRocks 3.1 版本对共享数据部署和配置进行了一些更改。如果您运行的是 3.1 或更高版本,请使用本文档。
  • 如果您运行的是 3.0 版本,请使用 3.0 文档
  • 共享数据 StarRocks 集群不支持数据 BACKUP 和 RESTORE。

共享数据 StarRocks 集群专门为云设计,基于存储和计算分离的原则。它允许将数据存储在对象存储中(例如,AWS S3、Google GCS、Azure Blob Storage、Azure Data Lake Storage Gen2 和 MinIO)。您不仅可以实现更便宜的存储和更好的资源隔离,还可以为您的集群实现弹性可扩展性。当命中本地磁盘缓存时,共享数据 StarRocks 集群的查询性能与共享存储 StarRocks 集群的查询性能一致。

在 3.1 及更高版本中,StarRocks 共享数据集群由前端引擎(FE)和计算节点(CN)组成。CN 代替了共享数据集群中的经典后端引擎(BE)。

与经典的共享存储 StarRocks 架构相比,存储和计算分离提供了广泛的优势。通过分离这些组件,StarRocks 提供了

  • 经济高效且无缝可扩展的存储。
  • 弹性可扩展的计算。由于数据不存储在计算节点(CN)中,因此无需跨节点进行数据迁移或混洗即可进行扩展。
  • 用于热数据的本地磁盘缓存,以提高查询性能。
  • 异步数据摄取到对象存储,从而显着提高加载性能。

架构

Shared-data Architecture

部署共享数据 StarRocks 集群

共享数据 StarRocks 集群的部署与共享存储 StarRocks 集群的部署类似。唯一的区别是您需要在共享数据集群中部署 CN 而不是 BE。本节仅列出了您在部署共享数据 StarRocks 集群时需要在 FE 和 CN fe.confcn.conf 配置文件中添加的额外 FE 和 CN 配置项。有关部署 StarRocks 集群的详细说明,请参阅 部署 StarRocks

注意

在本文档的下一节中配置为共享存储之前,请勿启动集群。

配置用于共享数据 StarRocks 的 FE 节点

在启动集群之前,请配置 FE 和 CN。下面提供了一个示例配置,然后提供了每个参数的详细信息。

Azure Storage 的 FE 配置示例

您可以将 fe.conf 的示例共享数据添加到每个 FE 节点上的 fe.conf 文件中。

Azure Blob Storage

  • 如果您使用共享密钥访问 Azure Blob Storage,请添加以下配置项

    run_mode = shared_data
    cloud_native_meta_port = <meta_port>
    cloud_native_storage_type = AZBLOB

    # For example, testcontainer/subpath
    azure_blob_path = <blob_path>

    # For example, https://test.blob.core.windows.net
    azure_blob_endpoint = <endpoint_url>

    azure_blob_shared_key = <shared_key>
  • 如果您使用共享访问签名 (SAS) 访问 Azure Blob Storage,请添加以下配置项

    run_mode = shared_data
    cloud_native_meta_port = <meta_port>
    cloud_native_storage_type = AZBLOB

    # For example, testcontainer/subpath
    azure_blob_path = <blob_path>

    # For example, https://test.blob.core.windows.net
    azure_blob_endpoint = <endpoint_url>

    azure_blob_sas_token = <sas_token>

注意

创建 Azure Blob Storage 帐户时,必须禁用分层命名空间。

Azure Data Lake Storage Gen2

  • 如果您使用共享密钥访问 Azure Data Lake Storage Gen2,请添加以下配置项

    run_mode = shared_data
    cloud_native_meta_port = <meta_port>
    cloud_native_storage_type = ADLS2

    # For example, testfilesystem/starrocks
    azure_adls2_path = <file_system_name>/<dir_name>

    # For example, https://test.dfs.core.windows.net
    azure_adls2_endpoint = <endpoint_url>

    azure_adls2_shared_key = <shared_key>
  • 如果您使用共享访问签名 (SAS) 访问 Azure Data Lake Storage Gen2,请添加以下配置项

    run_mode = shared_data
    cloud_native_meta_port = <meta_port>
    cloud_native_storage_type = ADLS2

    # For example, testfilesystem/starrocks
    azure_adls2_path = <file_system_name>/<dir_name>

    # For example, https://test.dfs.core.windows.net
    azure_adls2_endpoint = <endpoint_url>

    azure_adls2_sas_token = <sas_token>

注意

不支持 Azure Data Lake Storage Gen1。

run_mode

StarRocks 集群的运行模式。有效值

  • shared_data
  • shared_nothing (默认)

注意

  • 您不能同时为 StarRocks 集群采用 shared_datashared_nothing 模式。不支持混合部署。
  • 部署集群后,请勿更改 run_mode。否则,集群将无法重新启动。不支持从共享存储集群转换为共享数据集群,反之亦然。

cloud_native_meta_port

云原生元服务 RPC 端口。

  • 默认值:6090

enable_load_volume_from_conf

是否允许 StarRocks 使用 FE 配置文件中指定的对象存储相关属性创建默认存储卷。有效值

  • true 如果您在创建新的共享数据集群时将此项指定为 true,则 StarRocks 将使用 FE 配置文件中的对象存储相关属性创建内置存储卷 builtin_storage_volume,并将其设置为默认存储卷。但是,如果您没有指定对象存储相关属性,则 StarRocks 无法启动。
  • false(默认)如果您在创建新的共享数据集群时将此项指定为 false,则 StarRocks 将直接启动而不创建内置存储卷。您必须先手动创建一个存储卷并将其设置为默认存储卷,然后才能在 StarRocks 中创建任何对象。有关更多信息,请参阅 创建默认存储卷

从 v3.1.0 开始支持。

注意

我们强烈建议您在从 v3.0 升级现有共享数据集群时将此项保留为 true。如果您将此项指定为 false,则在升级之前创建的数据库和表将变为只读,并且您无法将数据加载到其中。

cloud_native_storage_type

您使用的对象存储的类型。在共享数据模式下,StarRocks 支持将数据存储在 Azure Blob 中(从 v3.1.1 开始支持)以及与 S3 协议兼容的对象存储(例如 AWS S3、Google GCP 和 MinIO)。有效值

  • S3 (默认)
  • AZBLOB
  • HDFS

注意

  • 如果您将此参数指定为 S3,则必须添加以 aws_s3 为前缀的参数。
  • 如果您将此参数指定为 AZBLOB,则必须添加以 azure_blob 为前缀的参数。
  • 如果您将此参数指定为 HDFS,则必须添加参数 cloud_native_hdfs_url

azure_blob_path

用于存储数据的 Azure Blob Storage 路径。它由存储帐户中的容器名称以及容器下的子路径(如果有)组成,例如 testcontainer/subpath

azure_blob_endpoint

您的 Azure Blob Storage 帐户的终结点,例如 https://test.blob.core.windows.net

azure_blob_shared_key

用于授权 Azure Blob Storage 请求的共享密钥。

azure_blob_sas_token

用于授权 Azure Blob Storage 请求的共享访问签名 (SAS)。

azure_adls2_path

用于存储数据的 Azure Data Lake Storage Gen2 路径。它由文件系统名称和目录名称组成,例如 testfilesystem/starrocks

azure_adls2_endpoint

您的 Azure Data Lake Storage Gen2 帐户的终结点,例如 https://test.dfs.core.windows.net

azure_adls2_shared_key

用于授权 Azure Data Lake Storage Gen2 请求的共享密钥。

azure_adls2_sas_token

用于授权 Azure Data Lake Storage Gen2 请求的共享访问签名 (SAS)。

注意

创建共享数据 StarRocks 集群后,只能修改与凭据相关的配置项。如果您更改了原始存储路径相关的配置项,则在更改之前创建的数据库和表将变为只读,并且您无法将数据加载到其中。

如果您想在集群创建后手动创建默认存储卷,则只需添加以下配置项

run_mode = shared_data
cloud_native_meta_port = <meta_port>

配置用于共享数据 StarRocks 的 CN 节点

在启动 CN 之前,请在 CN 配置文件 cn.conf 中添加以下配置项

starlet_port = <starlet_port>
storage_root_path = <storage_root_path>

starlet_port

StarRocks 共享数据集群的 CN 心跳服务端口。默认值:9070

storage_root_path

本地缓存数据所依赖的存储卷目录。多个卷用分号 (;) 分隔。示例:/data1;/data2

storage_root_path 的默认值为 ${STARROCKS_HOME}/storage

当查询频繁且查询的数据是最近的数据时,本地缓存有效,但在某些情况下,您可能希望完全关闭本地缓存。

  • 在 Kubernetes 环境中,CN pod 的数量可以按需向上和向下扩展,pod 可能没有附加存储卷。
  • 当查询的数据位于远程存储的数据湖中,并且大部分是归档(旧)数据时。如果查询不频繁,则数据缓存的命中率会很低,并且收益可能不值得拥有缓存。

要关闭数据缓存,请设置

storage_root_path =

注意

数据缓存在目录 <storage_root_path>/starlet_cache 下。

使用您的共享数据 StarRocks 集群

共享数据 StarRocks 集群的用法也类似于经典的共享存储 StarRocks 集群,不同之处在于共享数据集群使用存储卷和云原生表将数据存储在对象存储中。

创建默认存储卷

您可以使用 StarRocks 自动创建的内置存储卷,也可以手动创建和设置默认存储卷。本节介绍如何手动创建和设置默认存储卷。

注意

如果您的共享数据 StarRocks 集群是从 v3.0 升级的,则无需定义默认存储卷,因为 StarRocks 使用您在 FE 配置文件 fe.conf 中指定的对象存储相关属性创建了一个。您仍然可以使用其他对象存储资源创建新的存储卷,并以不同的方式设置默认存储卷。

要授予您的共享数据 StarRocks 集群在您的对象存储中存储数据的权限,您必须在创建数据库或云原生表时引用存储卷。存储卷由远程数据存储的属性和凭据信息组成。如果您部署了一个新的共享数据 StarRocks 集群,并且不允许 StarRocks 创建内置存储卷(通过将 enable_load_volume_from_conf 指定为 false),则必须先定义一个默认存储卷,然后才能在集群中创建数据库和表。

以下示例为具有共享密钥访问权限的 Azure Blob Storage 存储桶 defaultbucket 创建一个存储卷 def_volume,启用存储卷,并将其设置为默认存储卷

CREATE STORAGE VOLUME def_volume
TYPE = AZBLOB
LOCATIONS = ("azblob://defaultbucket/test/")
PROPERTIES
(
"enabled" = "true",
"azure.blob.endpoint" = "<endpoint_url>",
"azure.blob.shared_key" = "<shared_key>"
);

SET def_volume AS DEFAULT STORAGE VOLUME;

以下示例为具有 SAS 令牌的 Azure Data Lake Storage Gen2 文件系统 testfilesystem 创建一个存储卷 adls2,并禁用存储卷

CREATE STORAGE VOLUME adls2
TYPE = ADLS2
LOCATIONS = ("adls2://testfilesystem/starrocks")
PROPERTIES (
"enabled" = "false",
"azure.adls2.endpoint" = "<endpoint_url>",
"azure.adls2.sas_token" = "<sas_token>"
);

有关如何为其他对象存储创建存储卷并设置默认存储卷的更多信息,请参阅 CREATE STORAGE VOLUMESET DEFAULT STORAGE VOLUME

创建数据库和云原生表

创建默认存储卷后,您可以使用此存储卷创建数据库和云原生表。

共享数据 StarRocks 集群支持所有 StarRocks 表类型

以下示例创建一个数据库 cloud_db 和一个基于 Duplicate Key 表类型的表 detail_demo,启用本地磁盘缓存,将热数据有效期设置为一个月,并禁用异步数据摄取到对象存储

CREATE DATABASE cloud_db;
USE cloud_db;
CREATE TABLE IF NOT EXISTS detail_demo (
recruit_date DATE NOT NULL COMMENT "YYYY-MM-DD",
region_num TINYINT COMMENT "range [-128, 127]",
num_plate SMALLINT COMMENT "range [-32768, 32767] ",
tel INT COMMENT "range [-2147483648, 2147483647]",
id BIGINT COMMENT "range [-2^63 + 1 ~ 2^63 - 1]",
password LARGEINT COMMENT "range [-2^127 + 1 ~ 2^127 - 1]",
name CHAR(20) NOT NULL COMMENT "range char(m),m in (1-255) ",
profile VARCHAR(500) NOT NULL COMMENT "upper limit value 65533 bytes",
ispass BOOLEAN COMMENT "true/false")
DUPLICATE KEY(recruit_date, region_num)
DISTRIBUTED BY HASH(recruit_date, region_num)
PROPERTIES (
"storage_volume" = "def_volume",
"datacache.enable" = "true",
"datacache.partition_duration" = "1 MONTH"
);

注意

如果在共享数据 StarRocks 集群中创建数据库或云原生表时未指定存储卷,则使用默认存储卷。

除了常规的表 PROPERTIES 之外,在为共享数据 StarRocks 集群创建表时,您还需要指定以下 PROPERTIES

datacache.enable

是否启用本地磁盘缓存。

  • true (默认) 当此属性设置为 true 时,要加载的数据会同时写入对象存储和本地磁盘(作为查询加速的缓存)。
  • false 当此属性设置为 false 时,数据仅加载到对象存储中。

注意

在 3.0 版本中,此属性名为 enable_storage_cache

要启用本地磁盘缓存,您必须在 CN 配置项 storage_root_path 中指定磁盘的目录。

datacache.partition_duration

热数据的有效期。启用本地磁盘缓存后,所有数据都会加载到缓存中。当缓存已满时,StarRocks 会从缓存中删除最近较少使用的数据。当查询需要扫描已删除的数据时,StarRocks 会检查数据是否在从当前时间开始的有效期内。如果数据在有效期内,则 StarRocks 会再次将数据加载到缓存中。如果数据不在有效期内,则 StarRocks 不会将其加载到缓存中。此属性是一个字符串值,可以使用以下单位指定:YEARMONTHDAYHOUR,例如 7 DAY12 HOUR。如果未指定,则所有数据都将缓存为热数据。

注意

在 3.0 版本中,此属性名为 storage_cache_ttl

仅当 datacache.enable 设置为 true 时,此属性才可用。

查看表信息

您可以使用 SHOW PROC "/dbs/<db_id>" 查看特定数据库中的表信息。有关更多信息,请参阅 SHOW PROC

示例

mysql> SHOW PROC "/dbs/xxxxx";
+---------+-------------+----------+---------------------+--------------+--------+--------------+--------------------------+--------------+---------------+------------------------------+
| TableId | TableName | IndexNum | PartitionColumnName | PartitionNum | State | Type | LastConsistencyCheckTime | ReplicaCount | PartitionType | StoragePath |
+---------+-------------+----------+---------------------+--------------+--------+--------------+--------------------------+--------------+---------------+------------------------------+
| 12003 | detail_demo | 1 | NULL | 1 | NORMAL | CLOUD_NATIVE | NULL | 8 | UNPARTITIONED | s3://xxxxxxxxxxxxxx/1/12003/ |
+---------+-------------+----------+---------------------+--------------+--------+--------------+--------------------------+--------------+---------------+------------------------------+

共享数据 StarRocks 集群中表的 TypeCLOUD_NATIVE。在字段 StoragePath 中,StarRocks 返回表存储的对象存储目录。

将数据加载到共享数据 StarRocks 集群中

共享数据 StarRocks 集群支持 StarRocks 提供的所有加载方法。有关更多信息,请参阅 加载选项

在共享数据 StarRocks 集群中查询

共享数据 StarRocks 集群中的表支持 StarRocks 提供的所有类型的查询。有关更多信息,请参阅 StarRocks SELECT

注意

共享数据 StarRocks 集群从 v3.4.0 开始支持 同步物化视图