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

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リモートストレージシステムのタイプです。有効な値は S3HDFSAZBLOB です。S3 は AWS S3 または S3 互換ストレージシステムを示します。AZBLOB は Azure Blob Storage を示します(v3.1.1 以降でサポート)。HDFS は HDFS クラスターを示します。
LOCATIONSストレージの場所です。フォーマットは以下の通りです:
  • AWS S3 または S3 プロトコル互換ストレージシステムの場合:s3://<s3_path><s3_path> は絶対パスでなければなりません。例えば、s3://testbucket/subpath。ストレージボリュームに Partitioned Prefix 機能を有効にしたい場合、バケット名のみを指定する必要があり、サブパスの指定は許可されません。
  • Azure Blob Storage の場合:azblob://<azblob_path><azblob_path> は絶対パスでなければなりません。例えば、azblob://testcontainer/subpath
  • HDFS の場合:hdfs://<host>:<port>/<hdfs_path><hdfs_path> は絶対パスでなければなりません。例えば、hdfs://127.0.0.1:9000/user/xxx/starrocks
  • WebHDFS の場合:webhdfs://<host>:<http_port>/<hdfs_path><http_port> は NameNode の HTTP ポートです。<hdfs_path> は絶対パスでなければなりません。例えば、webhdfs://127.0.0.1:50070/user/xxx/starrocks
  • ViewFS の場合:viewfs://<ViewFS_cluster>/<viewfs_path><ViewFS_cluster> は ViewFS クラスター名です。<viewfs_path> は絶対パスでなければなりません。例えば、viewfs://myviewfscluster/user/xxx/starrocks
COMMENTストレージボリュームに関するコメントです。
PROPERTIESリモートストレージシステムにアクセスするためのプロパティと認証情報を指定するための "key" = "value" ペアのパラメータです。詳細については PROPERTIES を参照してください。

PROPERTIES

以下の表はストレージボリュームのすべての利用可能なプロパティを示しています。表の後には、認証情報機能 の観点から異なるシナリオに基づいたこれらのプロパティの使用方法が示されています。

プロパティ説明
enabledこのストレージボリュームを有効にするかどうか。デフォルトは false です。無効なストレージボリュームは参照できません。
aws.s3.regionS3 バケットが存在するリージョンです。例えば、us-west-2
aws.s3.endpointS3 バケットにアクセスするために使用されるエンドポイント URL です。例えば、https://s3.us-west-2.amazonaws.com
aws.s3.use_aws_sdk_default_behaviorAWS SDK のデフォルト認証情報を使用するかどうか。有効な値は truefalse(デフォルト)です。
aws.s3.use_instance_profileS3 にアクセスするための認証方法としてインスタンスプロファイルとアサインされたロールを使用するかどうか。有効な値は truefalse(デフォルト)です。
  • IAM ユーザー認証情報(アクセスキーとシークレットキー)を使用して S3 にアクセスする場合、この項目を false に設定し、aws.s3.access_keyaws.s3.secret_key を指定する必要があります。
  • インスタンスプロファイルを使用して S3 にアクセスする場合、この項目を true に設定する必要があります。
  • アサインされたロールを使用して S3 にアクセスする場合、この項目を true に設定し、aws.s3.iam_role_arn を指定する必要があります。
  • 外部 AWS アカウントを使用する場合、この項目を true に設定し、aws.s3.iam_role_arnaws.s3.external_id を指定する必要があります。
aws.s3.access_keyS3 バケットにアクセスするために使用されるアクセスキー ID です。
aws.s3.secret_keyS3 バケットにアクセスするために使用されるシークレットアクセスキーです。
aws.s3.iam_role_arnデータファイルが保存されている S3 バケットに対して権限を持つ IAM ロールの ARN です。
aws.s3.external_idS3 バケットへのクロスアカウントアクセスに使用される AWS アカウントの外部 ID です。
azure.blob.endpointAzure Blob Storage アカウントのエンドポイントです。例えば、https://test.blob.core.windows.net
azure.blob.shared_keyAzure Blob Storage のリクエストを認証するために使用される共有キーです。
azure.blob.sas_tokenAzure Blob Storage のリクエストを認証するために使用される共有アクセス署名(SAS)です。
hadoop.security.authentication認証方法です。有効な値は simple(デフォルト)と kerberos です。simple は単純認証、つまりユーザー名を示します。kerberos は Kerberos 認証を示します。
usernameHDFS クラスターの NameNode にアクセスするために使用されるユーザー名です。
hadoop.security.kerberos.ticket.cache.pathkinit によって生成されたチケットキャッシュを保存するパスです。
dfs.nameservicesHDFS クラスターの名前です。
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 以降でサポートされています。

  • 共有キーを使用して 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 またはスループット制限がパーティションごとに適用されるため、StarRocks のデータファイルの読み書き性能を容易に向上させることができます。

この機能を有効にするには、以下のプロパティを上記の認証関連パラメータに加えて設定します:

"aws.s3.enable_partitioned_prefix" = "{ true | false }",
"aws.s3.num_partitioned_prefix" = "<INT>"
注記
  • Partitioned Prefix 機能は S3 互換オブジェクトストレージシステムでのみサポートされており、ストレージボリュームの TYPES3 でなければなりません。
  • ストレージボリュームの 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"
);

関連する SQL ステートメント