Use S3 for shared-data
このトピックでは、共有データ StarRocks クラスタのデプロイと使用方法について説明します。この機能は、S3 互換ストレージでは v3.0 から、Azure Blob Storage では v3.1 からサポートされています。
注意
- StarRocks バージョン 3.1 では、共有データのデプロイと構成にいくつかの変更があります。バージョン 3.1 以上を使用している場合は、このドキュメントを使用してください。
- バージョン 3.0 を使用している場合は、3.0 ドキュメント を使用してください。
- 共有データ StarRocks クラスタは、データのバックアップとリストアをサポートしていません。
共有データ StarRocks クラスタは、ストレージとコンピュートの分離を前提にクラウド向けに特別に設計されています。データをオブジェクトストレージ(例: AWS S3、Google GCS、Azure Blob Storage、MinIO)に保存することができます。これにより、より安価なストレージと優れたリソース分離を実現し、クラスタの弾力的なスケーラビリティを達成できます。共有データ StarRocks クラスタのクエリパフォーマンスは、ローカルディスクキャッシュがヒットした場合、共有なし StarRocks クラスタと一致します。
バージョン 3.1 以上では、StarRocks 共有データクラスタは Frontend Engines (FEs) と Compute Nodes (CNs) で構成されています。CNs は、共有データクラスタにおいて従来の Backend Engines (BEs) に取って代わります。
従来の共有なし StarRocks アーキテクチャと比較して、ストレージとコンピュートの分離は幅広い利点を提供します。これらのコンポーネントを分離することにより、StarRocks は以下を提供します:
- 安価でシームレスにスケーラブルなストレージ。
- 弾力的にスケーラブルなコンピュート。データが Compute Nodes (CNs) に保存されないため、ノード間でのデータ移行やシャッフルなしでスケーリングが可能です。
- クエリパフォーマンスを向上させるためのホットデータ用ローカルディスクキャッシュ。
- オブジェクトストレージへの非同期データ取り込みにより、ロードパフォーマンスが大幅に向上します。
アーキテクチャ
共有データ StarRocks クラスタをデプロイする
共有データ StarRocks クラスタのデプロイは、共有なし StarRocks クラスタのデプロイと似ています。唯一の違いは、共有データクラスタでは BEs の代わりに CNs をデプロイする必要があることです。このセクションでは、共有データ StarRocks クラスタをデプロイする際に、FE と CN の fe.conf および cn.conf の設定ファイルに追加する必要がある追加の FE および CN 設定項目のみをリストします。StarRocks クラスタのデプロイに関する詳細な手順については、 Deploy StarRocks を参照してください。
注意
このドキュメントの次のセクションで共有ストレージ用に設定されるまで、クラスタを開始しないでください。
共有データ StarRocks 用の FE ノードを設定する
クラスタを開始する前に、FEs と CNs を設定します。以下に例を示し、各パラメータの詳細を提供します。
S3 用の FE 設定例
これらは、各 FE ノードの fe.conf
ファイルに追加する共有データの例です。例は、使用されている AWS 認証方法に基づいて異なります。
デフォルト認証資格情報
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 例: testbucket/subpath
aws_s3_path = <s3_path>
# 例: us-west-2
aws_s3_region = <region>
# 例: https://s3.us-west-2.amazonaws.com
aws_s3_endpoint = <endpoint_url>
aws_s3_use_aws_sdk_default_behavior = true
# 上記の詳細を使用してオブジェクトストレージに
# デフォルトストレージを作成したくない場合は false に設定
enable_load_volume_from_conf = true
IAM ユーザー認証資格情報
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 例: testbucket/subpath
aws_s3_path = <s3_path>
# 例: us-west-2
aws_s3_region = <region>
# S3 オブジェクトの読み書き用資格情報
aws_s3_access_key = <access_key>
aws_s3_secret_key = <secret_key>
# 上記の詳細を使用してオブジェクトストレージに
# デフォルトストレージを作成したくない場合は false に設定
enable_load_volume_from_conf = true
インスタンスプロファイル
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 例: testbucket/subpath
aws_s3_path = <s3_path>
# 例: us-west-2
aws_s3_region = <region>
# 例: https://s3.us-west-2.amazonaws.com
aws_s3_endpoint = <endpoint_url>
aws_s3_use_instance_profile = true
# 上記の詳細を使用してオブジェクトストレージに
# デフォルトストレージを作成したくない場合は false に設定
enable_load_volume_from_conf = true
クラスタ内の FE および CN ノードへのアクセス権を付与していることを確認してください。FE ノードは CN ノードへのアクセスを委任できません。
アサインされたロール
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 例: testbucket/subpath
aws_s3_path = <s3_path>
# 例: us-west-2
aws_s3_region = <region>
# 例: https://s3.us-west-2.amazonaws.com
aws_s3_endpoint = <endpoint_url>
aws_s3_use_instance_profile = true
aws_s3_iam_role_arn = <role_arn>
# 上記の詳細を使用してオブジェクトストレージに
# デフォルトストレージを作成したくない場合は false に設定
enable_load_volume_from_conf = true
クラスタ内の FE および CN ノードへのアクセス権を付与していることを確認してください。FE ノードは CN ノードへのアクセスを委任できません。
外部アカウントからのアサインされたロール
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 例: testbucket/subpath
aws_s3_path = <s3_path>
# 例: us-west-2
aws_s3_region = <region>
# 例: https://s3.us-west-2.amazonaws.com
aws_s3_endpoint = <endpoint_url>
aws_s3_use_instance_profile = true
aws_s3_iam_role_arn = <role_arn>
aws_s3_external_id = <external_id>
# 上記の詳細を使用してオブジェクトストレージに
# デフォルトストレージを作成したくない場合は false に設定
enable_load_volume_from_conf = true
クラスタ内の FE および CN ノードへのアクセス権を付与していることを確認してください。FE ノードは CN ノードへのアクセスを委任できません。
S3 を使用した共有ストレージに関連するすべての FE パラメータ
run_mode
StarRocks クラスタの実行モード。有効な値:
shared_data
shared_nothing
(デフォルト)
注意
- StarRocks クラスタで
shared_data
とshared_nothing
モードを同時に採用することはできません。混在デプロイはサポートされていません。- クラスタがデプロイされた後に
run_mode
を変更しないでください。そうしないと、クラスタが再起動に失敗します。共有なしクラスタから共有データクラスタへの変換、またはその逆はサポートされていません。
cloud_native_meta_port
クラウドネイティブメタサービスの RPC ポート。
- デフォルト:
6090
enable_load_volume_from_conf
FE 設定ファイルで指定されたオブジェクトストレージ関連のプロパティを使用して、StarRocks がデフォルトのストレージボリュームを作成できるかどうか。有効な値:
true
(デフォルト) 新しい共有データクラスタを作成する際にこの項目をtrue
に指定すると、StarRocks は FE 設定ファイルのオブジェクトストレージ関連のプロパティを使用して組み込みストレージボリュームbuiltin_storage_volume
を作成し、デフォルトのストレージボリュームとして設定します。ただし、オブジェクトストレージ関連のプロパティを指定していない場合、StarRocks は起動に失敗します。false
新しい共有データクラスタを作成する際にこの項目をfalse
に指定すると、StarRocks は組み込みストレージボリュームを作成せずに直接起動します。StarRocks でオブジェクトを作成する前に、手動でストレージボリュームを作成し、デフォルトのストレージボリュームとして設定する必要があります。詳細については、 Create the default storage volume を参照してください。
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
パラメータを追加する必要があります。
aws_s3_path
データを保存するために使用する S3 パス。S3 バケットの名前とその下のサブパス (存在する場合) で構成されます。例: testbucket/subpath
。
aws_s3_endpoint
S3 バケットにアクセスするために使用するエンドポイント。例: https://s3.us-west-2.amazonaws.com
。
aws_s3_region
S3 バケットが存在するリージョン。例: us-west-2
。
aws_s3_use_aws_sdk_default_behavior
AWS SDK デフォルト資格情報プロバイダーチェーン を使用するかどうか。有効な値:
true
false
(デフォルト)
aws_s3_use_instance_profile
S3 へのアクセスのための資格情報メソッドとしてインスタンスプロファイルとアサインされたロールを使用するかどうか。有効な値:
true
false
(デフォルト)
IAM ユーザー認証資格情報 (アクセスキーとシークレットキー) を使用して S3 にアクセスする場合、この項目を false
に指定し、aws_s3_access_key
と aws_s3_secret_key
を指定する必要があります。
インスタンスプロファイルを使用して S3 にアクセスする場合、この項目を true
に指定する必要があります。
アサインされたロールを使用して S3 にアクセスする場合、この項目を true
に指定し、aws_s3_iam_role_arn
を指定する必要があります。
外部 AWS アカウントを使用する場合は、aws_s3_external_id
も指定する必要があります。
aws_s3_access_key
S3 バケットにアクセスするために使用するアクセスキー ID。
aws_s3_secret_key
S3 バケットにアクセスするために使用するシークレットアクセスキー。
aws_s3_iam_role_arn
データファイルが保存されている S3 バケットに対して権限を持つ IAM ロールの ARN。
aws_s3_external_id
S3 バケットへのクロスアカウントアクセスに使用される AWS アカウントの外部 ID。
注意
共有データ StarRocks クラスタが作成された後に変更できるのは、資格情報に関連する設定項目のみです。元のストレージパスに関連する設定項目を変更した場合、変更前に作成したデータベースとテーブルが読み取り専用になり、データをロードできなくなります。
クラスタが作成された後にデフォルトのストレージボリュームを手動で作成したい場合は、次の設定項目のみを追加する必要があります。
run_mode = shared_data
cloud_native_meta_port = <meta_port>
enable_load_volume_from_conf = false
共有データ 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 ポッドの数が需要に応じてスケールアップおよびスケールダウンするため、ポッドにストレージボリュームがアタッチされていない場合があります。
- クエリされるデータがリモートストレージのデータレイクにあり、そのほとんどがアーカイブ(古い)データである場合。クエリが頻繁でない場合、データキャッシュのヒット率は低くなり、キャッシュを持つことの利点がないかもしれません。
データキャッシュをオフにするには、次のように設定します。
storage_root_path =
注意
データはディレクトリ
<storage_root_path>/starlet_cache
にキャッシュされます。
共有データ StarRocks クラスタを使用する
共有データ StarRocks クラスタの使用法は、クラシックな共有なし StarRocks クラスタの使用法と似ていますが、共有データクラスタはストレージボリュームとクラウドネイティブテーブルを使用してデータをオブジェクトストレージに保存します。
デフォルトストレージボリュームの作成
StarRocks が自動的に作成する組み込みのストレージボリュームを使用することもできますし、手動でデフォルトストレージボリュームを作成して設定することもできます。このセクションでは、デフォルトストレージボリュームを手動で作成して設定する方法について説明します。
NOTE
共有データ StarRocks クラスタが v3.0 からアップグレードされた場合、FE 設定ファイル fe.conf に指定したオブジェクトストレージ関連のプロパティで StarRocks が作成したため、デフォルトストレージボリュームを定義する必要はありません。他のオブジェクトストレージリソースを使用して新しいストレージボリュームを作成し、デフォルトストレージボリュームを別のものに設定することもできます。
共有データ StarRocks クラスタにオブジェクトストレージにデータを保存する権限を与えるには、データベースやクラウドネイティブテーブルを作成する際にストレージボリュームを参照する必要があります。ストレージボリュームは、リモートデータストレージのプロパティと認証情報で構成されます。新しい共有データ StarRocks クラスタを展開し、StarRocks に組み込みのストレージボリュームを作成させないようにする場合(enable_load_volume_from_conf
を false
に指定することによって)、クラスタ内でデータベースやテーブルを作成する前にデフォルトストレージボリュームを定義する必要があります。
次の例では、IAM ユーザー認証資格情報 (アクセスキーとシークレットキー) を使用して AWS S3 バケット defaultbucket
のストレージボリューム def_volume
を作成し、Partitioned Prefix 機能を有効にし、デフォルトのストレージボリュームとして設定します。
CREATE STORAGE VOLUME def_volume
TYPE = S3
LOCATIONS = ("s3://defaultbucket")
PROPERTIES
(
"enabled" = "true",
"aws.s3.region" = "us-west-2",
"aws.s3.endpoint" = "https://s3.us-west-2.amazonaws.com",
"aws.s3.use_aws_sdk_default_behavior" = "false",
"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "xxxxxxxxxx",
"aws.s3.secret_key" = "yyyyyyyyyy",
"aws.s3.enable_partitioned_prefix" = "true"
);
SET def_volume AS DEFAULT STORAGE VOLUME;
他のオブジェクトストレージ用のストレージボリュームの作成方法およびデフォルトのストレージボリュームの設定方法については、CREATE STORAGE VOLUME および SET DEFAULT STORAGE VOLUME を参照してください。
データベースとクラウドネイティブテーブルを作成する
デフォルトのストレージボリュームを作成した後、このストレージボリュームを使用してデータベースとクラウドネイティブテーブルを作成できます。
共有データ StarRocks クラスターは、すべての StarRocks table types をサポートしています。
次の例では、データベース cloud_db
と重複キーテーブルタイプに基づいたテーブル detail_demo
を作成し、ローカルディスクキャッシュを有効にし、ホットデータの有効期間を1か月に設定し、オブジェクトストレージへの非同期データ取り込みを無効にしています。
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"
);
NOTE
共有データ StarRocks クラスターでデータベースまたはクラウドネイティブテーブルを作成する際にストレージボリュームが指定されていない場合、デフォルトのストレージボリュームが使用されます。
通常のテーブル PROPERTIES
に加えて、共有データ StarRocks クラスター用のテーブルを作成する際には、次の PROPERTIES
を指定する必要があります。
datacache.enable
ローカルディスクキャッシュを有効にするかどうか。
true
(デフォルト) このプロパティがtrue
に設定されている場合、ロードされるデータはオブジェクトストレージとローカルディスク(クエリアクセラレーションのキャッシュとして)に同時に書き込まれます。false
このプロパティがfalse
に設定されている場合、データはオブジェクトストレージにのみロードされます。
NOTE
バージョン 3.0 では、このプロパティは
enable_storage_cache
と呼ばれていました。ローカルディスクキャッシュを有効にするには、CN 設定項目
storage_root_path
にディスクのディレクトリを指定する必要があります。
datacache.partition_duration
ホットデータの有効期間。ローカルディスクキャッシュが有効になっている場合、すべてのデータがキャッシュにロードされます。キャッシュがいっぱいになると、StarRocks はキャッシュから最近使用されていないデータを削除します。クエリが削除されたデータをスキャンする必要がある場合、StarRocks は現在の時点からの有効期間内かどうかを確認します。データが有効期間内であれば、StarRocks はデータを再度キャッシュにロードします。データが有効期間外であれば、StarRocks はそれをキャッシュにロードしません。このプロパティは文字列値で、次の単位で指定できます: YEAR
、MONTH
、DAY
、および HOUR
。例えば、7 DAY
や 12 HOUR
です。指定されていない場合、すべてのデータがホットデータとしてキャッシュされます。
NOTE
バージョン 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 クラスター内のテーブルの Type
は CLOUD_NATIVE
です。StoragePath
フィールドには、テーブルが保存されているオブジェクトストレージのディレクトリが返されます。
共有データ StarRocks クラスターにデータをロードする
共有データ StarRocks クラスターは、StarRocks が提供するすべてのロード方法をサポートしています。詳細は Loading options を参照してください。
共有データ StarRocks クラスターでのクエリ
共有データ StarRocks クラスター内のテーブルは、StarRocks が提供するすべてのクエリタイプをサポートしています。詳細は StarRocks SELECT を参照してください。
NOTE
共有データ StarRocks クラスターは、v3.4.0 から 同期マテリアライズドビュー をサポートしています。