你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用外部 Hive 元存储数据库
注意
我们将于 2025 年 1 月 31 日停用 Azure HDInsight on AKS。 在 2025 年 1 月 31 日之前,你需要将工作负荷迁移到 Microsoft Fabric 或同等的 Azure 产品,以避免工作负荷突然终止。 订阅上的剩余群集会被停止并从主机中移除。
在停用日期之前,仅提供基本支持。
重要
此功能目前以预览版提供。 Microsoft Azure 预览版的补充使用条款包含适用于 beta 版、预览版或其他尚未正式发布的 Azure 功能的更多法律条款。 有关此特定预览版的信息,请参阅 Azure HDInsight on AKS 预览版信息。 如有疑问或功能建议,请在 AskHDInsight 上提交请求并附上详细信息,并关注我们以获取 Azure HDInsight Community 的更多更新。
Hive 元存储用作中央存储库,可以存储有关数据的元数据。 本文介绍如何使用 HDInsight on AKS 将 Hive 元存储数据库添加到 Trino 群集。 有两种方法:
可以在创建 Trino 群集期间添加 Hive 目录并将其链接到外部 Hive 元存储数据库。
可以使用 ARM 模板更新添加 Hive 目录,并将外部 Hive 元存储数据库附加到群集。
以下示例演示如何使用 ARM 模板向群集添加 Hive 目录和元存储数据库。
先决条件
- 与 HDInsight on AKS 配合使用的可操作 Trino 群集。
- 为群集创建 ARM 模板。
- 查看完整的群集 ARM 模板示例。
- 熟悉 ARM 模板创作和部署。
注意
- 目前,我们支持使用 Azure SQL 数据库作为内置元存储。
- 由于 Hive 的限制,不支持在元存储数据库名称中包含“-”字符(连字符)。
- 仅支持单个元存储数据库连接,
clusterProfile.trinoProfile.catalogOptions.hive
部分中列出的所有目录都将配置为使用一个连接,以及首先指定的相同数据库参数。
添加外部 Hive 元存储数据库
需要将几个重要部分添加到群集 ARM 模板才能配置 Hive 目录和 Hive 元存储数据库:
元存储配置
在 config.properties
文件中配置外部 Hive 元存储数据库:
{
"fileName": "config.properties",
"values": {
"hive.metastore.hdi.metastoreDbConnectionURL": "jdbc:sqlserver://server-name.database.windows.net;database=myhmsdb1;encrypt=true;trustServerCertificate=true;create=false;loginTimeout=30",
"hive.metastore.hdi.metastoreDbConnectionUserName": "trinoadmin",
"hive.metastore.hdi.metastoreDbConnectionPasswordSecret": "hms-db-pwd",
"hive.metastore.hdi.metastoreWarehouseDir": "abfs://container1@myadlsgen2account1.dfs.core.windows.net/hive/warehouse"
}
}
properties | 说明 | 示例 |
---|---|---|
hive.metastore.hdi.metastoreDbConnectionURL | 数据库的 JDBC 连接字符串。 | jdbc:sqlserver://server-name.database.windows.net;database=myhmsdb1;encrypt=true;trustServerCertificate=true;create=false;loginTimeout=30 |
hive.metastore.hdi.metastoreDbConnectionUserName | 要连接到数据库的 SQL 用户名。 | trinoadmin |
hive.metastore.hdi.metastoreDbConnectionPasswordSecret | 在 secretsProfile 中配置的机密 referenceName,包含密码。 | hms-db-pwd |
hive.metastore.hdi.metastoreWarehouseDir | 存储中数据的存储位置的 ABFS URI。 | abfs://container1@myadlsgen2account1.dfs.core.windows.net/hive/warehouse |
元存储身份验证
配置对指定 Azure Key Vault 机密的外部 Hive 元存储数据库的身份验证。
注意
referenceName
应匹配 hive.metastore.hdi.metastoreDbConnectionPasswordSecret
中提供的值
"secretsProfile": {
"keyVaultResourceId": "/subscriptions/{USER_SUBSCRIPTION_ID}/resourceGroups/{USER_RESOURCE_GROUP}/providers/Microsoft.KeyVault/vaults/{USER_KEYVAULT_NAME}",
"secrets": [
{
"referenceName": "hms-db-pwd",
"type": "Secret",
"keyVaultObjectName": "hms-db-pwd"
} ]
},
properties | 说明 | 示例 |
---|---|---|
secretsProfile.keyVaultResourceId | 用于存储 Hive 元存储机密的 Azure 密钥保管库的 Azure 资源 ID 字符串。 | /subscriptions/0000000-0000-0000-0000-000000000000/resourceGroups/trino-rg/providers/Microsoft.KeyVault/vaults/trinoakv |
secretsProfile.secrets[*].referenceName | 稍后要在 clusterProfile 中使用的机密的唯一引用名称。 | Secret1_ref |
secretsProfile.secrets[*].type | Azure Key Vault 中的对象类型,仅支持“机密”。 | 机密 |
secretsProfile.secrets[*].keyVaultObjectName | Azure 密钥保管库中包含实际机密值的机密对象的名称。 | secret1 |
目录配置
要支持 Trino 目录使用外部 Hive 元存储,它应指定 hive.metastore=hdi
属性。 有关详细信息,请参阅将目录添加到现有群集:
{
"fileName": "hive1.properties",
"values": {
"connector.name": "hive",
"hive.metastore": "hdi"
}
}
完整示例
若要将外部 Hive 元存储配置为现有的 Trino 群集,请参考以下示例在群集 ARM 模板中添加所需的部分:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": [
{
"type": "microsoft.hdinsight/clusterpools/clusters",
"apiVersion": "<api-version>",
"name": "<cluster-pool-name>/<cluster-name>",
"location": "<region, e.g. westeurope>",
"tags": {},
"properties": {
"clusterType": "Trino",
"clusterProfile": {
"secretsProfile": {
"keyVaultResourceId": "/subscriptions/{USER_SUBSCRIPTION_ID}/resourceGroups/{USER_RESOURCE_GROUP}/providers/Microsoft.KeyVault/vaults/{USER_KEYVAULT_NAME}",
"secrets": [
{
"referenceName": "hms-db-pwd",
"type": "Secret",
"keyVaultObjectName": "hms-db-pwd"
} ]
},
"serviceConfigsProfiles": [
{
"serviceName": "trino",
"configs": [
{
"component": "common",
"files": [
{
"fileName": "config.properties",
"values": {
"hive.metastore.hdi.metastoreDbConnectionURL": "jdbc:sqlserver://server-name.database.windows.net;database=myhmsdb1;encrypt=true;trustServerCertificate=true;create=false;loginTimeout=30",
"hive.metastore.hdi.metastoreDbConnectionUserName": "trinoadmin",
"hive.metastore.hdi.metastoreDbConnectionPasswordSecret": "hms-db-pwd",
"hive.metastore.hdi.metastoreWarehouseDir": "abfs://container1@myadlsgen2account1.dfs.core.windows.net/hive/warehouse"
}
}
]
},
{
"component": "catalogs",
"files": [
{
"fileName": "hive1.properties",
"values": {
"connector.name": "hive",
"hive.metastore": "hdi"
}
}
]
}
]
}
]
}
}
}
]
}
部署已更新的 ARM 模板以反映群集中的更改。 了解如何部署 ARM 模板。 成功部署后,可以在 Trino 群集中看到“hive1”目录。
可以运行几个简单的查询来尝试 Hive 目录。
检查是否已成功创建 Hive 目录。
show catalogs;
查询表(在此示例中,“hive1”是指定的 hive 目录的名称)。
create schema hive1.schema1;
create table hive1.schema1.tpchorders as select * from tpch.tiny.orders;
select * from hive1.schema1.tpchorders limit 100;
替代配置
或者,可以在 trinoProfile.catalogOptions.hive
与 hive.metastore=hdi
目录属性中指定外部 Hive 元存储数据库参数:
properties | 说明 | 示例 |
---|---|---|
trinoProfile.catalogOptions.hive | Hive、iceberg 或增量目录的列表,其中包含外部 Hive 元存储数据库的参数,需要每个目录的参数。 若要使用外部元存储数据库,目录必须存在于该列表中。 | |
trinoProfile.catalogOptions.hive[*].catalogName | serviceConfigsProfiles 中配置的 Trino 目录的名称,配置为使用外部 Hive 元存储数据库。 |
hive1 |
trinoProfile.catalogOptions.hive[*].metastoreDbConnectionURL | 数据库的 JDBC 连接字符串。 | jdbc:sqlserver://server-name.database.windows.net;database=myhmsdb1;encrypt=true;trustServerCertificate=true;create=false;loginTimeout=30 |
trinoProfile.catalogOptions.hive[*].metastoreDbConnectionUserName | 要连接到数据库的 SQL 用户名。 | trinoadmin |
trinoProfile.catalogOptions.hive[*].metastoreDbConnectionPasswordSecret | 在 secretsProfile 中配置的机密 referenceName,包含密码。 | hms-db-pwd |
trinoProfile.catalogOptions.hive[*].metastoreWarehouseDir | 存储中数据的存储位置的 ABFS URI。 | abfs://container1@myadlsgen2account1.dfs.core.windows.net/hive/warehouse |
完整示例
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": [
{
"type": "microsoft.hdinsight/clusterpools/clusters",
"apiVersion": "<api-version>",
"name": "<cluster-pool-name>/<cluster-name>",
"location": "<region, e.g. westeurope>",
"tags": {},
"properties": {
"clusterType": "Trino",
"clusterProfile": {
"secretsProfile": {
"keyVaultResourceId": "/subscriptions/{USER_SUBSCRIPTION_ID}/resourceGroups/{USER_RESOURCE_GROUP}/providers/Microsoft.KeyVault/vaults/{USER_KEYVAULT_NAME}",
"secrets": [
{
"referenceName": "hms-db-pwd",
"type": "Secret",
"keyVaultObjectName": "hms-db-pwd"
} ]
},
"serviceConfigsProfiles": [
{
"serviceName": "trino",
"configs": [
{
"component": "catalogs",
"files": [
{
"fileName": "hive1.properties",
"values": {
"connector.name": "hive",
"hive.metastore": "hdi"
}
}
]
}
]
}
],
"trinoProfile": {
"catalogOptions": {
"hive": [
{
"catalogName": "hive1",
"metastoreDbConnectionURL": "jdbc:sqlserver://server-name.database.windows.net;database=myhmsdb1;encrypt=true;trustServerCertificate=true;create=false;loginTimeout=30",
"metastoreDbConnectionUserName": "trinoadmin",
"metastoreDbConnectionPasswordSecret": "hms-db-pwd",
"metastoreWarehouseDir": "abfs://container1@myadlsgen2account1.dfs.core.windows.net/hive/warehouse"
}
]
}
}
}
}
}
]
}