Use GCS 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 を構成します。以下に例として構成を示し、各パラメータの詳細を提供します。
GCS 用の FE 構成例
fe.conf
の共有データ追加部分を各 FE ノードの fe.conf
ファイルに追加できます。GCS ストレージは Cloud Storage XML API を使用してアクセスされるため、パラメータはプレフィックス aws_s3
を使用します。
run_mode = shared_data
cloud_native_meta_port = <meta_port>
cloud_native_storage_type = S3
# 例: testbucket/subpath
aws_s3_path = <s3_path>
# 例: us-east1
aws_s3_region = <region>
# 例: https://storage.googleapis.com
aws_s3_endpoint = <endpoint_url>
aws_s3_access_key = <HMAC access_key>
aws_s3_secret_key = <HMAC secret_key>
GCS に関連するすべての 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 GCS、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://storage.googleapis.com/
aws_s3_region
S3 バケットが存在するリージョン。例: us-west-2
。
aws_s3_use_instance_profile
GCS にアクセスするためのクレデンシャル方法としてインスタンスプロファイルとアシュームドロールを使用するかどうか。有効な値:
true
false
(デフォルト)
IAM ユーザーに基づくクレデンシャル (アクセスキーとシークレットキー) を使用して GCS にアクセスする場合、この項目を false
に指定し、aws_s3_access_key
と aws_s3_secret_key
を指定する必要があります。
インスタンスプロファイルを使用して GCS にアクセスする場合、この項目を true
に指定する必要があります。
アシュームドロールを使用して GCS にアクセスする場合、この項目を true
に指定し、aws_s3_iam_role_arn
を指定する必要があります。
外部 AWS アカウントを使用する場合、aws_s3_external_id
も指定する必要があります。
aws_s3_access_key
GCS バケットにアクセスするために使用される HMAC アクセスキー ID。
aws_s3_secret_key
GCS バケットにアクセスするために使用される HMAC シークレットアクセスキー。
aws_s3_iam_role_arn
データファイルが保存されている GCS バケットに対して特権を持つ IAM ロールの ARN。
aws_s3_external_id
GCS バケットへのクロスアカウントアクセスに使用される 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
に指定することによって)、クラスタ内でデータベースやテーブルを作成する前にデフォルトストレージボリュームを定義する必要があります。
以下の例では、GCS バケット defaultbucket
に対してストレージボリューム def_volume
を作成し、HMAC アクセスキーとシークレットキーを使用し、 Partitioned Prefix 機能を有効にし、それをデフォルトのストレージボリュームとして設定します。
CREATE STORAGE VOLUME def_volume
TYPE = S3
LOCATIONS = ("s3://defaultbucket")
PROPERTIES
(
"enabled" = "true",
"aws.s3.region" = "us-east1",
"aws.s3.endpoint" = "https://storage.googleapis.com",
"aws.s3.access_key" = "<HMAC access key>",
"aws.s3.secret_key" = "<HMAC secret key>",
"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 クラスターは synchronous materialized views をサポートしていません。