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

共有データに Azure Storage を使用する

このトピックでは、共有データ StarRocks クラスタのデプロイと使用方法について説明します。この機能は、S3 互換ストレージではバージョン 3.0 から、Azure Blob Storage ではバージョン 3.1 から、Azure Data Lake Storage Gen2 ではバージョン 3.4.1 からサポートされています。

注意

  • StarRocks バージョン 3.1 では、共有データのデプロイと設定にいくつかの変更があります。バージョン 3.1 以上を使用している場合は、このドキュメントを使用してください。
  • バージョン 3.0 を使用している場合は、3.0 ドキュメントを使用してください。
  • 共有データ StarRocks クラスタは、データのバックアップとリストアをサポートしていません。

共有データ StarRocks クラスタは、ストレージとコンピュートの分離の前提でクラウド向けに特別に設計されています。データをオブジェクトストレージ(例えば、AWS S3、Google GCS、Azure Blob Storage、Azure Data Lake Storage Gen2、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 クラスタのデプロイと似ています。唯一の違いは、共有データクラスタでは BE の代わりに CN をデプロイする必要があることです。このセクションでは、共有データ StarRocks クラスタをデプロイする際に、FE と CN の設定ファイル fe.conf および cn.conf に追加する必要がある追加の FE および CN 設定項目のみをリストします。StarRocks クラスタのデプロイに関する詳細な手順については、Deploy StarRocks を参照してください。

注意

このドキュメントの次のセクションで共有ストレージ用に設定されるまで、クラスタを開始しないでください。

共有データ StarRocks 用の FE ノードを設定する

クラスタを開始する前に、FEs と CNs を設定します。以下に例として設定を示し、その後各パラメータの詳細を提供します。

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

    # 例: testcontainer/subpath
    azure_blob_path = <blob_path>

    # 例: https://test.blob.core.windows.net
    azure_blob_endpoint = <endpoint_url>

    azure_blob_shared_key = <shared_key>
  • Azure Blob Storage にアクセスするために共有アクセス署名 (SAS) を使用する場合、次の設定項目を追加します。

    run_mode = shared_data
    cloud_native_meta_port = <meta_port>
    cloud_native_storage_type = AZBLOB

    # 例: testcontainer/subpath
    azure_blob_path = <blob_path>

    # 例: 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>
  • Azure Data Lake Storage Gen2 にアクセスするために共有アクセス署名 (SAS) を使用する場合、次の設定項目を追加します。

    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 はサポートされていません。

Azure Storage に関連する共有ストレージのすべての 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

StarRocks が FE 設定ファイルに指定されたオブジェクトストレージ関連のプロパティを使用してデフォルトのストレージボリュームを作成できるかどうか。有効な値:

  • 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 パラメータを追加する必要があります。

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 のパスです。ストレージアカウント内のコンテナの名前と、コンテナ内のサブパス (存在する場合) で構成されます。例: testcontainer/subpath

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 ポッドには、ストレージボリュームがアタッチされていない場合があります。
  • クエリされるデータがリモートストレージのデータレイクにあり、そのほとんどがアーカイブ(古い)データである場合。クエリが頻繁でない場合、データキャッシュのヒット率は低く、キャッシュを持つことの利点がないかもしれません。

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

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_conffalse に指定することにより)、クラスタ内でデータベースやテーブルを作成する前にデフォルトストレージボリュームを定義する必要があります。

次の例では、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;

次の例では、Azure Data Lake Storage Gen2 ファイルシステム testfilesystem に対して SAS クセスを使用してストレージボリューム 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>"
);

For more information on how to create a ストレージボリューム for other オブジェクトストレージ and set the default ストレージボリューム, see CREATE STORAGE VOLUME and SET DEFAULT STORAGE VOLUME.

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

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

共有データ StarRocks クラスターは、すべての 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 はそれをキャッシュにロードしません。このプロパティは文字列値で、次の単位で指定できます: YEARMONTHDAY、および 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 が提供するすべてのロード方法をサポートしています。詳細は Loading options を参照してください。

共有データ StarRocks クラスターでのクエリ

共有データ StarRocks クラスター内のテーブルは、StarRocks が提供するすべてのクエリタイプをサポートしています。詳細は StarRocks SELECT を参照してください。

NOTE

共有データ StarRocks クラスターは、v3.4.0 から 同期マテリアライズドビュー をサポートしています。