你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用外部 Hive 元存储数据库

重要

此功能目前以预览版提供。 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 目录和元存储数据库。

先决条件

注意

  • 目前,我们支持使用 Azure SQL 数据库作为内置元存储。
  • 由于 Hive 的限制,不支持在元存储数据库名称中包含“-”字符(连字符)。
  • 仅支持单个元存储数据库连接,clusterProfile.trinoProfile.catalogOptions.hive 部分中列出的所有目录都将配置为使用一个连接,以及首先指定的相同数据库参数。

添加外部 Hive 元存储数据库

需要将几个重要部分添加到群集 ARM 模板才能配置 Hive 目录和 Hive 元存储数据库:

元存储配置

config.properties 文件中配置外部 Hive 元存储数据库:

{
    "fileName": "config.properties",
    "values": {
        "hive.metastore.hdi.metastoreDbConnectionURL": "jdbc:sqlserver://mysqlserver1.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://mysqlserver1.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://mysqlserver1.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.hivehive.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://mysqlserver1.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://mysqlserver1.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"
                                }
                            ]
                        }
                    }
                }
            }
        }
    ]
}