CREATE STORAGE VOLUME
CREATE STORAGE VOLUME создаёт том хранения для удалённой системы хранения. Эта функция поддерживается начиная с v1.5.2.
Том хранения состоит из свойств и информации об учётных данных удалённого хранилища данных. Вы можете ссылаться на том хранения при создании баз данных и cloud-native таблиц в cluster Selena с разделяемыми данными.
ВНИМАНИЕ
Только пользователи с привилегией CREATE STORAGE VOLUME на уровне SYSTEM могут выполнять эту операцию.
Синтаксис
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, так как оно зарезервировано для встроенного тома хранения. Соглашения об именовании см. в Системные ограничения. |
| TYPE | Тип удалённой системы хранения. Допустимые значения: S3, HDFS, AZBLOB, ADLS2 и GS. S3 означает AWS S3 или S3-совместимые системы хранения. AZBLOB означает Azure Blob Storage (поддерживается с v1.5.2). ADLS2 означает Azure Data Lake Storage Gen2 (поддерживается с v1.5.2). HDFS означает cluster HDFS. GS означает Google Storage (доступ через нативный SDK, поддерживается с v1.5.2). |
| LOCATIONS | Расположения хранения. Формат следующий:
|
| COMMENT | Комментарий к тому хранения. |
| PROPERTIES | Параметры в парах "key" = "value", используемые для указания свойств и информации об учётных данных для доступа к удалённой системе хранения. Подробную информацию см. в PROPERTIES. |
PROPERTIES
В таблице ниже перечислены все доступные свойства томов хранения. После таблицы приведены инструкции по использованию этих свойств, разделённые по различным сценариям с точки зрения Информации об учётных данных и Функций.
| Свойство | Описание |
|---|---|
| enabled | Включить ли этот том хранения. По умолчанию: false. Отключённый том хранения не может быть использован. |
| aws.s3.region | Регион, в котором находится ваш бакет S3, например, us-west-2. |
| aws.s3.endpoint | URL конечной точки для доступа к вашему бакету S3, например, https://s3.us-west-2.amazonaws.com. [Превью] Начиная с v1.5.2 поддерживается класс хранения 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 | Использовать ли Instance Profile и Assumed Role в качестве методов аутентификации для доступа к S3. Допустимые значения: true и false (по умолчанию).
|
| aws.s3.access_key | Access Key ID для доступа к вашему бакету S3. |
| aws.s3.secret_key | Secret Access Key для доступа к вашему бакету S3. |
| aws.s3.iam_role_arn | ARN роли IAM с привилегиями на ваш бакет S3, в котором хранятся ваши файлы данных. |
| aws.s3.external_id | Внешний ID учётной записи AWS, который используется для межаккаунтного доступа к вашему бакету S3. |
| 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 | Shared Key для авторизации запросов к Azure Blob Storage. |
| azure.blob.sas_token | Подписи общего доступа (SAS) для авторизации запросов к Azure Blob Storage. |
| azure.adls2.endpoint | Конечная точка вашей учётной записи Azure Data Lake Storage Gen2, например, https://test.dfs.core.windows.net. |
| azure.adls2.shared_key | Shared Key для авторизации запросов к Azure Data Lake Storage Gen2. |
| azure.adls2.sas_token | Подписи общего доступа (SAS) для авторизации запросов к Azure Data Lake Storage Gen2. |
| azure.adls2.oauth2_use_managed_identity | Использовать ли Managed Identity для авторизации запросов к Azure Data Lake Storage Gen2. По умолчанию: false. |
| azure.adls2.oauth2_tenant_id | Tenant ID управляемого удостоверения для авторизации запросов к Azure Data Lake Storage Gen2. |
| azure.adls2.oauth2_client_id | Client ID управляемого удостоверения для авторизации запросов к Azure Data Lake Storage Gen2. |
| gcp.gcs.service_account_email | Адрес электронной почты в JSON-файле, созданном при создании Service Account, например, user@hello.iam.gserviceaccount.com. |
| gcp.gcs.service_account_private_key_id | Private Key ID в JSON-файле, созданном при создании Service Account. |
| gcp.gcs.service_account_private_key | Private Key в JSON-файле, созданном при создании Service Account, например, -----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n. |
| gcp.gcs.impersonation_service_account | Service Account, который вы хотите имперсонировать, если используете аутентификацию на основе имперсонации. |
| gcp.gcs.use_compute_engine_service_account | Использовать ли Service Account, привязанный к вашему Compute Engine. |
| hadoop.security.authentication | Метод аутентификации. Допустимые значения: simple (по умолчанию) и kerberos. simple означает простую аутентификацию, то есть по имени пользователя. kerberos означает аутентификацию Kerberos. |
| username | Имя пользователя для доступа к NameNode в cluster HDFS. |
| hadoop.security.kerberos.ticket.cache.path | Путь к Ticket Cache, сгенерированному kinit. |
| dfs.nameservices | Имя cluster 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> | Путь к монтируемому cluster ViewFS. Несколько путей должны быть разделены запятыми (,). <ViewFS_cluster> — имя 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>"
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 поддерживается начиная с v1.5.2.
-
Если вы используете 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 поддерживается начиная с v1.5.2.
-
Если вы используете 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
-
Если вы используете Service Account, привязанный к вашему Compute Engine, для доступа к Google Storage (поддерживается с v1.5.2), установите следующие свойства:
"enabled" = "{ true | false }",
"gcp.gcs.use_compute_engine_service_account" = "true" -
Если вы используете метод аутентификации на основе Service Account для доступа к Google Storage (поддерживается с v1.5.2), установите следующие свойства:
"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 (поддерживается с v1.5.2), установите следующие свойства:
"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>" -
Если вы используете протокол S3 с аутентификацией на основе IAM-пользователя для доступа к Google Storage, установите следующие свойства:
подсказка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 }" -
Если вы используете простую аутентификацию (поддерживается с v1.5.2) для доступа к HDFS, установите следующие свойства:
"enabled" = "{ true | false }",
"hadoop.security.authentication" = "simple",
"username" = "<hdfs_username>" -
Если вы используете аутентификацию Kerberos Ticket Cache (поддерживается с v1.5.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 или аналогичная периодическая задача для обновления тикетов.
-
Если в вашем cluster HDFS включена конфигурация NameNode HA (поддерживается с v1.5.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 (поддерживается с v1.5.2), установите следующие свойства:
"enabled" = "{ true | false }"Подробнее см. в документации WebHDFS.
-
Если вы используете Hadoop ViewFS (поддерживается с v1.5.2), установите следующие свойства:
-- Замените <ViewFS_cluster> на имя 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
Начиная с v1.5.2, Selena поддерживает создание томов хранения с функцией Partitioned Prefix для S3-совместимых систем объектного хранения. Когда эта функция включена, Selena сохраняет данные в несколько равномерно префиксированных partition (подпутей) в бакете. Это может легко увеличить производительность чтения и записи Selena для файлов данных, хранящихся в бакете, потому что лимит QPS или пропускной способности бакета установлен для каждой partition.
Чтобы включить эту функцию, установите следующие свойства в дополнение к приведённым выше параметрам учётных данных:
"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: Создание тома хранения my_s3_volume для бакета AWS S3 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 для cluster 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"
);
Пример 8: Создание тома хранения adls2 для Azure Data Lake Storage Gen2 с использованием SAS-токена.
CREATE STORAGE VOLUME adls2
TYPE = ADLS2
LOCATIONS = ("adls2://testfilesystem/selena")
PROPERTIES (
"azure.adls2.endpoint" = "https://test.dfs.core.windows.net",
"azure.adls2.sas_token" = "xxx"
);
Пример 9: Создание тома хранения gs для Google Storage с использованием имперсонированного Service Account.
CREATE STORAGE VOLUME gs
TYPE = GS
LOCATIONS = ("gs://testbucket/selena")
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"
);