Перейти к основному содержимому

CREATE STORAGE VOLUME

CREATE STORAGE VOLUME создает том хранения для удаленной системы хранения. Эта функция поддерживается начиная с версии 1.5.0.

Том хранения состоит из свойств и учетных данных удаленного хранилища данных. Вы можете ссылаться на том хранения при создании баз данных и облачных таблиц в кластере Selena с разделяемыми данными.

ВНИМАНИЕ

Только пользователи с привилегией CREATE STORAGE VOLUME на уровне SYSTEM могут выполнять эту операцию.

Синтаксис

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, поскольку оно используется для создания встроенного тома хранения. Для соглашений об именовании см. Системные ограничения.
TYPEТип удаленной системы хранения. Допустимые значения: S3, HDFS и AZBLOB. 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 для тома хранения, вы можете указать только имя bucket, указание подпути не разрешено.
  • Для 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/selena.
  • Для WebHDFS: webhdfs://<host>:<http_port>/<hdfs_path>, где <http_port> — это HTTP-порт NameNode. <hdfs_path> должен быть абсолютным путем, например, webhdfs://127.0.0.1:50070/user/xxx/selena.
  • Для ViewFS:viewfs://<ViewFS_cluster>/<viewfs_path>, где <ViewFS_cluster> — это имя кластера ViewFS. <viewfs_path> должен быть абсолютным путем, например, viewfs://myviewfscluster/user/xxx/selena.
COMMENTКомментарий к тому хранения.
PROPERTIESПараметры в парах "key" = "value", используемые для указания свойств и учетных данных для доступа к удаленной системе хранения. Подробную информацию см. в разделе PROPERTIES.

PROPERTIES

В таблице ниже перечислены все доступные свойства томов хранения. После таблицы приведены инструкции по использованию этих свойств, разделенные по различным сценариям с точки зрения Учетных данных и Функций.

СвойствоОписание
enabledВключить ли этот том хранения. По умолчанию: false. Отключенный том хранения не может использоваться.
aws.s3.regionРегион, в котором находится ваш S3 bucket, например, us-west-2.
aws.s3.endpointURL конечной точки для доступа к вашему S3 bucket, например, https://s3.us-west-2.amazonaws.com. [Предварительная версия] Начиная с версии 1.5.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Использовать ли Instance Profile и Assumed Role в качестве методов учетных данных для доступа к S3. Допустимые значения: true и false (по умолчанию).
  • Если вы используете учетные данные на основе пользователя IAM (Access Key и Secret Key) для доступа к S3, вы должны указать этот элемент как false и указать aws.s3.access_key и aws.s3.secret_key.
  • Если вы используете Instance Profile для доступа к S3, вы должны указать этот элемент как true.
  • Если вы используете Assumed Role для доступа к S3, вы должны указать этот элемент как true и указать aws.s3.iam_role_arn.
  • И если вы используете внешний аккаунт AWS, вы должны указать этот элемент как true и указать aws.s3.iam_role_arn и aws.s3.external_id.
aws.s3.access_keyAccess Key ID, используемый для доступа к вашему S3 bucket.
aws.s3.secret_keySecret Access Key, используемый для доступа к вашему S3 bucket.
aws.s3.iam_role_arnARN роли IAM, которая имеет привилегии на ваш S3 bucket, в котором хранятся ваши файлы данных.
aws.s3.external_idВнешний ID аккаунта AWS, который используется для межаккаунтного доступа к вашему S3 bucket.
azure.blob.endpointКонечная точка вашего Azure Blob Storage Account, например, https://test.blob.core.windows.net.
azure.blob.shared_keyShared Key, используемый для авторизации запросов к вашему Azure Blob Storage.
azure.blob.sas_tokenПодписи общего доступа (SAS), используемые для авторизации запросов к вашему Azure Blob Storage.
hadoop.security.authenticationМетод аутентификации. Допустимые значения: simple(по умолчанию) и kerberos. simple указывает на простую аутентификацию, то есть имя пользователя. kerberos указывает на аутентификацию Kerberos.
usernameИмя пользователя, используемое для доступа к NameNode в кластере HDFS.
hadoop.security.kerberos.ticket.cache.pathПуть, в котором хранится Ticket Cache, сгенерированный kinit.
dfs.nameservicesИмя кластера HDFS
dfs.ha.namenodes.<ha_cluster_name>Имя NameNode. Несколько имен должны быть разделены запятыми (,). Пробелы в двойных кавычках не допускаются. <ha_cluster_name> — это имя службы HDFS, указанное в dfs.nameservices.
dfs.namenode.rpc-address.<ha_cluster_name>.<NameNode>Информация об RPC-адресе NameNode. <NameNode> — это имя NameNode, указанное в dfs.ha.namenodes.<ha_cluster_name>.
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> — это имя кластера ViewFS, указанное в LOCATIONS.
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 (Access Key и Secret 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" = "false",
    "aws.s3.access_key" = "<access_key>",
    "aws.s3.secret_key" = "<secrete_key>"
  • Если вы используете Instance Profile для доступа к 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"
  • Если вы используете Assumed Role для доступа к 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>"
  • Если вы используете Assumed Role для доступа к S3 из внешнего аккаунта AWS, установите следующие свойства:

    "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 поддерживается начиная с версии 1.5.0.

  • Если вы используете 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 Account.

HDFS
  • Если вы не используете аутентификацию для доступа к HDFS, установите следующие свойства:

    "enabled" = "{ true | false }"
  • Если вы используете простую аутентификацию (поддерживается с версии v3.2) для доступа к HDFS, установите следующие свойства:

    "enabled" = "{ true | false }",
    "hadoop.security.authentication" = "simple",
    "username" = "<hdfs_username>"
  • Если вы используете аутентификацию Kerberos Ticket Cache (поддерживается с версии v3.2) для доступа к HDFS, установите следующие свойства:

    "enabled" = "{ true | false }",
    "hadoop.security.authentication" = "kerberos",
    "hadoop.security.kerberos.ticket.cache.path" = "<ticket_cache_path>"

    ВНИМАНИЕ

    • Эта настройка только заставляет систему использовать KeyTab для доступа к HDFS через Kerberos. Убедитесь, что каждый узел BE или CN имеет доступ к файлам KeyTab. Также убедитесь, что файл /etc/krb5.conf настроен правильно.
    • Ticket cache генерируется внешним инструментом 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.

    • Если вы используете WebHDFS (поддерживается с версии v3.2), установите следующие свойства:
    "enabled" = "{ true | false }"

    Для получения дополнительной информации см. Документацию WebHDFS.

  • Если вы используете 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.

Функции

Partitioned Prefix

Начиная с версии 1.5.0, Selena поддерживает создание томов хранения с функцией Partitioned Prefix для S3-совместимых систем объектного хранения. Когда эта функция включена, Selena сохраняет данные в несколько равномерно префиксированных разделов (подпутей) под bucket. Это может легко умножить производительность чтения и записи Selena для файлов данных, хранящихся в bucket, поскольку лимит QPS или пропускной способности bucket действует для каждого раздела.

Чтобы включить эту функцию, установите следующие свойства в дополнение к вышеуказанным параметрам, связанным с учетными данными:

"aws.s3.enable_partitioned_prefix" = "{ true | false }",
"aws.s3.num_partitioned_prefix" = "<INT>"
примечание
  • Функция Partitioned Prefix поддерживается только для S3-совместимых систем объектного хранения, то есть TYPE тома хранения должен быть S3.
  • LOCATIONS тома хранения должен содержать только имя bucket, например, s3://testbucket. Указание подпути после имени bucket не разрешено.
  • Оба свойства неизменяемы после создания тома хранения.
  • Вы не можете включить эту функцию при создании тома хранения с использованием конфигурационного файла FE fe.conf.

Примеры

Пример 1: Создать том хранения my_s3_volume для AWS S3 bucket defaultbucket, использовать учетные данные на основе пользователя IAM (Access Key и Secret Key) для доступа к 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: Создать том хранения my_hdfs_volume для HDFS и включить его.

CREATE STORAGE VOLUME my_hdfs_volume
TYPE = HDFS
LOCATIONS = ("hdfs://127.0.0.1:9000/sr/test/")
PROPERTIES
(
"enabled" = "true"
);

Пример 3: Создать том хранения hdfsvolumehadoop для HDFS с использованием простой аутентификации.

CREATE STORAGE VOLUME hdfsvolumehadoop
TYPE = HDFS
LOCATIONS = ("hdfs://127.0.0.1:9000/sr/test/")
PROPERTIES(
"hadoop.security.authentication" = "simple",
"username" = "selena"
);

Пример 4: Использовать аутентификацию Kerberos Ticket Cache для доступа к 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: Создать том хранения hdfsvolha для кластера HDFS с включенной конфигурацией NameNode HA.

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: Создать том хранения webhdfsvol для WebHDFS.

CREATE STORAGE VOLUME webhdfsvol
TYPE = HDFS
LOCATIONS = ("webhdfs://namenode:9870/data/sr");

Пример 7: Создать том хранения viewfsvol с использованием Hadoop ViewFS.

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-операторы