メインコンテンツまでスキップ
バージョン: 3.1

GCS を使用して StarRocks をデプロイする

このトピックでは、共有データ 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) に保存されないため、ノード間でのデータ移行やシャッフルなしにスケーリングが可能です。
  • クエリパフォーマンスを向上させるためのホットデータ用ローカルディスクキャッシュ。
  • オブジェクトストレージへの非同期データ取り込みにより、ロードパフォーマンスが大幅に向上します。

アーキテクチャ

Shared-data Architecture

共有データ StarRocks クラスタをデプロイする

共有データ StarRocks クラスタのデプロイは、共有なし StarRocks クラスタのデプロイと似ています。唯一の違いは、共有データクラスタでは BEs の代わりに CNs をデプロイする必要があることです。このセクションでは、共有データ StarRocks クラスタをデプロイする際に、FE と CN の構成ファイル fe.confcn.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_datashared_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

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_keyaws_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 です。

ローカルキャッシュはクエリが頻繁で、クエリされるデータが最近のものである場合に効果的ですが、ローカルキャッシュを完全にオフにしたい場合もあります。

  • CN ポッドが需要に応じてスケールアップおよびスケールダウンする Kubernetes 環境では、ポッドにストレージボリュームがアタッチされていない場合があります。
  • クエリされるデータがリモートストレージのデータレイクにあり、そのほとんどがアーカイブ(古い)データである場合。クエリが頻繁でない場合、データキャッシュのヒット率は低くなり、キャッシュを持つことの利点がないかもしれません。

データキャッシュをオフにするには、次のように設定します。

storage_root_path =

注意

データはディレクトリ <storage_root_path>/starlet_cache の下にキャッシュされます。

共有データ StarRocks クラスタを使用する

共有データ StarRocks クラスタの使用方法は、クラシックな共有なし StarRocks クラスタと似ていますが、共有データクラスタはストレージボリュームとクラウドネイティブテーブルを使用して、データをオブジェクトストレージに保存します。

デフォルトストレージボリュームの作成

StarRocks が自動的に作成する組み込みのストレージボリュームを使用することも、手動でデフォルトストレージボリュームを作成して設定することもできます。このセクションでは、デフォルトストレージボリュームを手動で作成して設定する方法を説明します。

注意

共有データ StarRocks クラスタが v3.0 からアップグレードされた場合、FE 設定ファイル fe.conf に指定したオブジェクトストレージ関連のプロパティで StarRocks が作成したため、デフォルトストレージボリュームを定義する必要はありません。他のオブジェクトストレージリソースを使用して新しいストレージボリュームを作成し、デフォルトストレージボリュームを異なるものに設定することもできます。

共有データ StarRocks クラスタにオブジェクトストレージにデータを保存する権限を与えるには、データベースやクラウドネイティブテーブルを作成する際にストレージボリュームを参照する必要があります。ストレージボリュームは、リモートデータストレージのプロパティと認証情報で構成されます。新しい共有データ StarRocks クラスタをデプロイし、StarRocks が組み込みのストレージボリュームを作成することを許可しない場合(enable_load_volume_from_conffalse に指定することにより)、クラスタ内でデータベースやテーブルを作成する前にデフォルトストレージボリュームを定義する必要があります。

次の例では、GCS バケット defaultbucket に対して HMAC アクセスキーとシークレットキーを使用してストレージボリューム def_volume を作成し、ストレージボリュームを有効にしてデフォルトのストレージボリュームとして設定します:

CREATE STORAGE VOLUME def_volume
TYPE = S3
LOCATIONS = ("s3://defaultbucket/test/")
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>"
);

SET def_volume AS DEFAULT STORAGE VOLUME;

For more information on how to create a storage volume for other object storages and set the default storage volume, see CREATE STORAGE VOLUME and SET DEFAULT STORAGE VOLUME.

データベースとクラウドネイティブテーブルの作成

デフォルトのストレージボリュームを作成した後、このストレージボリュームを使用してデータベースとクラウドネイティブテーブルを作成できます。

現在、共有データ StarRocks クラスターは以下のテーブルタイプをサポートしています:

  • 重複キーテーブル
  • 集計テーブル
  • ユニークキーテーブル
  • 主キーテーブル (現在、主キーの永続性インデックスはサポートされていません。)

次の例では、重複キーテーブルタイプに基づいてデータベース 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 DAY12 HOUR です。指定されていない場合、すべてのデータがホットデータとしてキャッシュされます。

NOTE

バージョン 3.0 では、このプロパティは storage_cache_ttl と呼ばれていました。

このプロパティは datacache.enabletrue に設定されている場合にのみ利用可能です。

テーブル情報の表示

特定のデータベース内のテーブル情報を 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 を参照してください。