CREATE STORAGE VOLUME
説明
リモートストレージシステム用のストレージボリュームを作成します。この機能は v3.1 からサポートされています。
ストレージボリュームは、リモートデータストレージのプロパティと認証情報で構成されます。共有データ StarRocks クラスターでデータベースやクラウドネイティブテーブルを作成する際に、ストレージボリュームを参照できます。
注意
SYSTEM レベルで CREATE STORAGE VOLUME 権限を持つユーザーのみがこの操作を実行できます。
構文
CREATE STORAGE VOLUME [IF NOT EXISTS] <storage_volume_name>
TYPE = { S3 | HDFS | AZBLOB }
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 以降でサポート)。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 。 |
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。 |
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)。 |
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>"
GCS
GCP Cloud Storage を使用する場合、以下のプロパティを設定します:
"enabled" = "{ true | false }",
-- 例: us-east-1
"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>"
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 アカウントを作成する際には、階層型名前空間を無効にする必要があります。
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 を介して KeyTab を使用して HDFS にアクセスすることを強制するだけです。各 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: AWS S3 バケット defaultbucket
のためのストレージボリューム my_s3_volume
を作成し、IAM ユーザー認証情報(アクセスキーとシークレットキー)を使用して S3 にアクセスし、有効にします。
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"
);