CREATE STORAGE VOLUME
説明
リモートストレージシステム用のストレージボリュームを作成します。この機能は v3.1 からサポートされています。
ストレージボリュームは、リモートデータストレージのプロパティと認証情報で構成されます。共有データ StarRocks クラスターでデータベースやクラウドネイティブテーブルを作成する際に、ストレージボリュームを参照できます。
注意
SYSTEM レベルで CREATE STORAGE VOLUME 権限を持つユーザーのみがこの操作を実行できます。
構文
CREATE STORAGE VOLUME [IF NOT EXISTS] <storage_volume_name>
TYPE = { S3 | HDFS | AZBLOB | ADLS2 | GS }
LOCATIONS = ('<remote_storage_path>')
[ COMMENT '<comment_string>' ]
PROPERTIES
("key" = "value",...)
パラメータ
| パラメータ | 説明 | 
|---|---|
| storage_volume_name | ストレージボリュームの名前です。 builtin_storage_volumeという名前のストレージボリュームは作成できません。これは組み込みストレージボリュームの作成に使用されるためです。命名規則については、System limits を参照してください。 | 
| TYPE | リモートストレージシステムのタイプです。有効な値は S3、HDFS、AZBLOBです。S3は AWS S3 または S3 互換ストレージシステムを示します。AZBLOBは Azure Blob Storage を示します(v3.1.1 以降でサポート)。ADLS2は Azure Data Lake Storage Gen2 を示します(v3.4.1 以降でサポート)。GSは Google Storage を示します(ネイティブ SDK はv3.5.1以降でサポート)。HDFSは HDFS クラスターを示します。 | 
| LOCATIONS | ストレージの場所です。形式は次のとおりです: 
 | 
| COMMENT | ストレージボリュームに関するコメントです。 | 
| PROPERTIES | リモートストレージシステムにアクセスするためのプロパティと認証情報を指定するための "key" = "value"ペアのパラメータです。詳細は PROPERTIES を参照してください。 | 
PROPERTIES
以下の表は、ストレージボリュームのすべての利用可能なプロパティを示しています。表の後には、認証情報 と 機能 の観点から異なるシナリオに基づいたこれらのプロパティの使用方法が示されています。
| プロパティ | 説明 | 
|---|---|
| enabled | このストレージボリュームを有効にするかどうか。デフォルトは falseです。無効なストレージボリュームは参照できません。 | 
| aws.s3.region | S3 バケットが存在するリージョンです。例: us-west-2。 | 
| aws.s3.endpoint | S3 バケットにアクセスするためのエンドポイント URL です。例: https://s3.us-west-2.amazonaws.com。[プレビュー] v3.3.0 以降、Amazon S3 Express One Zone ストレージクラスがサポートされています。例:https://s3express.us-west-2.amazonaws.com。Beta feature | 
| aws.s3.use_aws_sdk_default_behavior | AWS SDK のデフォルト認証情報を使用するかどうか。有効な値は trueとfalse(デフォルト)です。 | 
| aws.s3.use_instance_profile | S3 にアクセスするための認証方法としてインスタンスプロファイルとアサインドロールを使用するかどうか。有効な値は trueとfalse(デフォルト)です。
 | 
| 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 です。 | 
| aws.s3.enable_path_style_access | Path Style を使用して S3 にアクセスするかどうか。 有効な値: trueおよびfalse。デフォルト:false。 | 
| 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.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) です。 | 
| azure.adls2.oauth2_use_managed_identity | Azure Data Lake Storage Gen2 へのリクエストを認証するために Managed Identity を使用するかどうか。デフォルト: false。 | 
| azure.adls2.oauth2_tenant_id | Azure Data Lake Storage Gen2 へのリクエストを認証するために使用される Managed Identity の Tenant ID。 | 
| azure.adls2.oauth2_client_id | Azure Data Lake Storage Gen2 へのリクエストを認証するために使用される Managed Identity の Client ID。 | 
| gcp.gcs.service_account_email | Service Account 作成時に生成された JSON ファイル内のメールアドレスです。例: user@hello.iam.gserviceaccount.com。 | 
| gcp.gcs.service_account_private_key_id | Service Account 作成時に生成された JSON ファイル内の秘密鍵 ID です。 | 
| gcp.gcs.service_account_private_key | Service Account 作成時に生成された JSON ファイル内の秘密鍵です。例: -----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n。 | 
| gcp.gcs.impersonation_service_account | なりすましベースの認証を使用する場合、なりすます Service Account です。 | 
| gcp.gcs.use_compute_engine_service_account | Compute Engine にバインドされている Service Account を使用するかどうか。 | 
| hadoop.security.authentication | 認証方法です。有効な値は simple(デフォルト)とkerberosです。simpleはシンプル認証、つまりユーザー名を示します。kerberosは Kerberos 認証を示します。 | 
| username | HDFS クラスターの NameNode にアクセスするためのユーザー名です。 | 
| hadoop.security.kerberos.ticket.cache.path | kinit で生成されたチケットキャッシュを保存するパスです。 | 
| dfs.nameservices | HDFS クラスターの名前です。 | 
| dfs.ha.namenodes. <ha_cluster_name> | NameNode の名前です。複数の名前はカンマ (,) で区切る必要があります。ダブルクォート内にスペースは許可されません。 <ha_cluster_name>はdfs.nameservicesで指定された HDFS サービスの名前です。 | 
| dfs.namenode.rpc-address. <ha_cluster_name>.<NameNode> | NameNode の RPC アドレス情報です。 <NameNode>はdfs.ha.namenodes.<ha_cluster_name>で指定された NameNode の名前です。 | 
| dfs.client.failover.proxy.provider | クライアント接続のための NameNode のプロバイダーです。デフォルト値は org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProviderです。 | 
| fs.viewfs.mounttable. <ViewFS_cluster>.link./<viewfs_path> | マウントする ViewFS クラスターへのパスです。複数のパスはカンマ (,) で区切る必要があります。 <ViewFS_cluster>はLOCATIONSで指定された ViewFS クラスター名です。 | 
| aws.s3.enable_partitioned_prefix | ストレージボリュームに対して Partitioned Prefix 機能を有効にするかどうか。デフォルトは falseです。この機能の詳細については、Partitioned Prefix を参照してください。 | 
| aws.s3.num_partitioned_prefix | ストレージボリュームに対して作成されるプレフィックスの数です。デフォルトは 256です。有効範囲は [4, 1024] です。 | 
認証情報
AWS S3
- 
AWS SDK のデフォルト認証情報を使用して S3 にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "aws.s3.region" = "<region>",
 "aws.s3.endpoint" = "<endpoint_url>",
 "aws.s3.use_aws_sdk_default_behavior" = "true"
- 
IAM ユーザー認証(アクセスキーとシークレットキー)を使用して S3 にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "aws.s3.region" = "<region>",
 "aws.s3.endpoint" = "<endpoint_url>",
 "aws.s3.use_aws_sdk_default_behavior" = "false",
 "aws.s3.use_instance_profile" = "false",
 "aws.s3.access_key" = "<access_key>",
 "aws.s3.secret_key" = "<secrete_key>"
- 
インスタンスプロファイルを使用して S3 にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "aws.s3.region" = "<region>",
 "aws.s3.endpoint" = "<endpoint_url>",
 "aws.s3.use_aws_sdk_default_behavior" = "false",
 "aws.s3.use_instance_profile" = "true"
- 
アサインドロールを使用して S3 にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "aws.s3.region" = "<region>",
 "aws.s3.endpoint" = "<endpoint_url>",
 "aws.s3.use_aws_sdk_default_behavior" = "false",
 "aws.s3.use_instance_profile" = "true",
 "aws.s3.iam_role_arn" = "<role_arn>"
- 
外部 AWS アカウントからアサインドロールを使用して S3 にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "aws.s3.region" = "<region>",
 "aws.s3.endpoint" = "<endpoint_url>",
 "aws.s3.use_aws_sdk_default_behavior" = "false",
 "aws.s3.use_instance_profile" = "true",
 "aws.s3.iam_role_arn" = "<role_arn>",
 "aws.s3.external_id" = "<external_id>"
MinIO
MinIO を使用する場合、次のプロパティを設定します:
"enabled" = "{ true | false }",
-- 例:us-east-1
"aws.s3.region" = "<region>",
-- 例:http://172.26.xx.xxx:39000
"aws.s3.endpoint" = "<endpoint_url>",
"aws.s3.access_key" = "<access_key>",
"aws.s3.secret_key" = "<secrete_key>"
Azure Blob Storage
Azure Blob Storage でのストレージボリュームの作成は v3.1.1 以降でサポートされています。
- 
Shared Key を使用して Azure Blob Storage にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "azure.blob.endpoint" = "<endpoint_url>",
 "azure.blob.shared_key" = "<shared_key>"
- 
共有アクセス署名 (SAS) を使用して Azure Blob Storage にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "azure.blob.endpoint" = "<endpoint_url>",
 "azure.blob.sas_token" = "<sas_token>"
Azure Blob Storage アカウントを作成する際には、階層型名前空間を無効にする必要があります。
Azure Data Lake Storage Gen2
Azure Data Lake Storage Gen2 でのストレージボリュームの作成は v3.4.1 以降でサポートされています。
- 
Shared Key を使用して Azure Data Lake Storage Gen2 にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "azure.adls2.endpoint" = "<endpoint_url>",
 "azure.adls2.shared_key" = "<shared_key>"
- 
共有アクセス署名 (SAS) を使用して Azure Data Lake Storage Gen2 にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "azure.adls2.endpoint" = "<endpoint_url>",
 "azure.adls2.sas_token" = "<sas_token>"
- 
Managed Identity を使用して Azure Data Lake Storage Gen2 にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "azure.adls2.endpoint" = "<endpoint_url>",
 "azure.adls2.oauth2_use_managed_identity" = "true",
 "azure.adls2.oauth2_tenant_id" = "<tenant_id>",
 "azure.adls2.oauth2_client_id" = "<client_id>"
Azure Data Lake Storage Gen1 はサポートされていません。
Google Storage
- 
Compute Engine にバインドされている Service Account を使用して Google Storage にアクセスする場合(v3.5.1 からサポート)、次のプロパティを設定します: "enabled" = "{ true | false }",
 "gcp.gcs.use_compute_engine_service_account" = "true"
- 
Service Account ベースの認証方法を使用して Google Storage にアクセスする場合(v3.5.1 からサポート)、次のプロパティを設定します: "enabled" = "{ true | false }",
 "gcp.gcs.use_compute_engine_service_account" = "false",
 "gcp.gcs.service_account_email" = "<google_service_account_email>",
 "gcp.gcs.service_account_private_key_id" = "<google_service_private_key_id>",
 "gcp.gcs.service_account_private_key" = "<google_service_private_key>"
- 
なりすましベースの認証を使用して Google Storage にアクセスする場合(v3.5.1 からサポート)、次のプロパティを設定します: "enabled" = "{ true | false }",
 "gcp.gcs.use_compute_engine_service_account" = "false",
 "gcp.gcs.service_account_email" = "<google_service_account_email>",
 "gcp.gcs.service_account_private_key_id" = "<google_service_private_key_id>",
 "gcp.gcs.service_account_private_key" = "<google_service_private_key>",
 "gcp.gcs.impersonation_service_account" = "<assumed_google_service_account_email>"
- 
IAM ユーザーベース認証で S3 プロトコルを使用して Google Storage にアクセスする場合(v3.5.1 からサポート)、次のプロパティを設定します: ヒントGoogle Storage は XML API を使用してサポートされており、設定は AWS S3 の構文を使用する。この場合、 TYPEをS3に、LOCATIONSを S3 プロトコルと互換性のあるストレージのロケーションに設定する必要がある。"enabled" = "{ true | false }",
 -- 例: us-east1
 "aws.s3.region" = "<region>",
 -- 例: https://storage.googleapis.com
 "aws.s3.endpoint" = "<endpoint_url>",
 "aws.s3.access_key" = "<access_key>",
 "aws.s3.secret_key" = "<secrete_key>"
HDFS
- 
認証を使用せずに HDFS にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }"
- 
シンプル認証(v3.2 からサポート)を使用して HDFS にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "hadoop.security.authentication" = "simple",
 "username" = "<hdfs_username>"
- 
Kerberos チケットキャッシュ認証(v3.2 からサポート)を使用して HDFS にアクセスする場合、次のプロパティを設定します: "enabled" = "{ true | false }",
 "hadoop.security.authentication" = "kerberos",
 "hadoop.security.kerberos.ticket.cache.path" = "<ticket_cache_path>"注意 - この設定は、システムが Kerberos 経由で HDFS にアクセスするために KeyTab を使用することを強制するだけです。各 BE または CN ノードが KeyTab ファイルにアクセスできることを確認してください。また、/etc/krb5.conf ファイルが正しく設定されていることを確認してください。
- チケットキャッシュは外部の kinit ツールによって生成されます。チケットを更新するために crontab または類似の定期的なタスクを設定してください。
 
- 
HDFS クラスターが NameNode HA 構成を有効にしている場合(v3.2 からサポート)、さらに次のプロパティを設定します: "dfs.nameservices" = "<ha_cluster_name>",
 "dfs.ha.namenodes.<ha_cluster_name>" = "<NameNode1>,<NameNode2> [, ...]",
 "dfs.namenode.rpc-address.<ha_cluster_name>.<NameNode1>" = "<hdfs_host>:<hdfs_port>",
 "dfs.namenode.rpc-address.<ha_cluster_name>.<NameNode2>" = "<hdfs_host>:<hdfs_port>",
 [...]
 "dfs.client.failover.proxy.provider.<ha_cluster_name>" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"詳細については、HDFS HA Documentation を参照してください。 - WebHDFS を使用している場合(v3.2 からサポート)、次のプロパティを設定します:
 "enabled" = "{ true | false }"詳細については、WebHDFS Documentation を参照してください。 
- 
Hadoop ViewFS を使用している場合(v3.2 からサポート)、次のプロパティを設定します: -- <ViewFS_cluster> を ViewFS クラスターの名前に置き換えます。
 "fs.viewfs.mounttable.<ViewFS_cluster>.link./<viewfs_path_1>" = "hdfs://<hdfs_host_1>:<hdfs_port_1>/<hdfs_path_1>",
 "fs.viewfs.mounttable.<ViewFS_cluster>.link./<viewfs_path_2>" = "hdfs://<hdfs_host_2>:<hdfs_port_2>/<hdfs_path_2>",
 [, ...]詳細については、ViewFS Documentation を参照してください。 
機能
Partitioned Prefix
v3.2.4 から、StarRocks は S3 互換オブジェクトストレージシステムに対して Partitioned Prefix 機能を持つストレージボリュームの作成をサポートしています。この機能が有効になると、StarRocks はバケット内のデータを複数の均一にプレフィックスされたパーティション(サブパス)に保存します。これにより、バケットに保存されたデータファイルの読み書き性能が大幅に向上します。なぜなら、バケットの QPS またはスループット制限はパーティションごとに設定されるからです。
この機能を有効にするには、以下のプロパティを上記の認証関連パラメータに加えて設定します:
"aws.s3.enable_partitioned_prefix" = "{ true | false }",
"aws.s3.num_partitioned_prefix" = "<INT>"
- Partitioned Prefix 機能は S3 互換オブジェクトストレージシステムにのみ対応しています。つまり、ストレージボリュームの TYPEはS3でなければなりません。
- ストレージボリュームの LOCATIONSにはバケット名のみを含める必要があります。例:s3://testbucket。バケット名の後にサブパスを指定することはできません。
- 両方のプロパティは、ストレージボリュームが作成された後は変更できません。
- FE 設定ファイル fe.conf を使用してストレージボリュームを作成する際にこの機能を有効にすることはできません。
例
例 1: IAM ユーザー認証(アクセスキーとシークレットキー)を使用して S3 にアクセスし、有効化された AWS S3 バケット defaultbucket 用のストレージボリューム my_s3_volume を作成します。
CREATE STORAGE VOLUME my_s3_volume
TYPE = S3
LOCATIONS = ("s3://defaultbucket/test/")
PROPERTIES
(
    "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"
);
例 2: HDFS 用のストレージボリューム my_hdfs_volume を作成し、有効化します。
CREATE STORAGE VOLUME my_hdfs_volume
TYPE = HDFS
LOCATIONS = ("hdfs://127.0.0.1:9000/sr/test/")
PROPERTIES
(
    "enabled" = "true"
);
例 3: シンプル認証を使用して HDFS 用のストレージボリューム hdfsvolumehadoop を作成します。
CREATE STORAGE VOLUME hdfsvolumehadoop
TYPE = HDFS
LOCATIONS = ("hdfs://127.0.0.1:9000/sr/test/")
PROPERTIES(
    "hadoop.security.authentication" = "simple",
    "username" = "starrocks"
);
例 4: Kerberos チケットキャッシュ認証を使用して HDFS にアクセスし、ストレージボリューム hdfsvolkerberos を作成します。
CREATE STORAGE VOLUME hdfsvolkerberos
TYPE = HDFS
LOCATIONS = ("hdfs://127.0.0.1:9000/sr/test/")
PROPERTIES(
    "hadoop.security.authentication" = "kerberos",
    "hadoop.security.kerberos.ticket.cache.path" = "/path/to/ticket/cache/path"
);
例 5: NameNode HA 構成が有効な HDFS クラスター用のストレージボリューム hdfsvolha を作成します。
CREATE STORAGE VOLUME hdfsvolha
TYPE = HDFS
LOCATIONS = ("hdfs://myhacluster/data/sr")
PROPERTIES(
    "dfs.nameservices" = "myhacluster",
    "dfs.ha.namenodes.myhacluster" = "nn1,nn2,nn3",
    "dfs.namenode.rpc-address.myhacluster.nn1" = "machine1.example.com:8020",
    "dfs.namenode.rpc-address.myhacluster.nn2" = "machine2.example.com:8020",
    "dfs.namenode.rpc-address.myhacluster.nn3" = "machine3.example.com:8020",
    "dfs.namenode.http-address.myhacluster.nn1" = "machine1.example.com:9870",
    "dfs.namenode.http-address.myhacluster.nn2" = "machine2.example.com:9870",
    "dfs.namenode.http-address.myhacluster.nn3" = "machine3.example.com:9870",
    "dfs.client.failover.proxy.provider.myhacluster" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
);
例 6: WebHDFS 用のストレージボリューム webhdfsvol を作成します。
CREATE STORAGE VOLUME webhdfsvol
TYPE = HDFS
LOCATIONS = ("webhdfs://namenode:9870/data/sr");
例 7: Hadoop ViewFS を使用してストレージボリューム viewfsvol を作成します。
CREATE STORAGE VOLUME viewfsvol
TYPE = HDFS
LOCATIONS = ("viewfs://clusterX/data/sr")
PROPERTIES(
    "fs.viewfs.mounttable.clusterX.link./data" = "hdfs://nn1-clusterx.example.com:8020/data",
    "fs.viewfs.mounttable.clusterX.link./project" = "hdfs://nn2-clusterx.example.com:8020/project"
);
例 8: Azure Data Lake Storage Gen2 を使用してストレージボリューム adls2 を作成します。
CREATE STORAGE VOLUME adls2
TYPE = ADLS2
LOCATIONS = ("adls2://testfilesystem/starrocks")
PROPERTIES (
    "azure.adls2.endpoint" = "https://test.dfs.core.windows.net",
    "azure.adls2.sas_token" = "xxx"
);
例 9: なりすまし Service Account を使用して、Google Storage 用のストレージボリューム gs を作成する。
CREATE STORAGE VOLUME gs
TYPE = GS
LOCATIONS = ("gs://testbucket/starrocks")
PROPERTIES (
    "gcp.gcs.use_compute_engine_service_account" = "false",
    "gcp.gcs.service_account_email" = "user@hello.iam.gserviceaccount.com",
    "gcp.gcs.service_account_private_key_id" = "61d257bd847xxxxxxxxxxxxxxx4f0b9b6b9ca07af3b7ea",
    "gcp.gcs.service_account_private_key" = "-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n",
    "gcp.gcs.impersonation_service_account" = "admin@hello.iam.gserviceaccount.com"
);