Compartir vía


Uso de una base de datos externa de metastore de Hive

Importante

Esta funcionalidad actualmente está en su versión preliminar. En Términos de uso complementarios para las versiones preliminares de Microsoft Azure encontrará más términos legales que se aplican a las características de Azure que están en versión beta, en versión preliminar, o que todavía no se han lanzado con disponibilidad general. Para más información sobre esta versión preliminar específica, consulte la Información de Azure HDInsight sobre la versión preliminar de AKS. Para plantear preguntas o sugerencias sobre la característica, envíe una solicitud en AskHDInsight con los detalles y síganos para obtener más actualizaciones sobre Comunidad de Azure HDInsight.

El metastore de Hive se usa como repositorio central para almacenar metadatos sobre los datos. En este artículo se describe cómo agregar una base de datos de metastore de Hive al clúster de Trino con HDInsight en AKS. Existen dos formas:

  • Puede agregar un catálogo de Hive y vincularlo a una base de datos externa de metastore de Hive durante la creación del clúster de Trino.

  • Puede agregar un catálogo de Hive y adjuntar una base de datos externa de metastore de Hive al clúster mediante la actualización de plantillas de ARM.

En el ejemplo siguiente se describe la adición del catálogo de Hive y la base de datos de metastore al clúster mediante la plantilla de ARM.

Requisitos previos

Nota:

  • Actualmente, se admite Azure SQL Database como metastore integrado.
  • Debido a la limitación de Hive, no se admite el carácter "-" (guion) en el nombre de la base de datos de metastore.
  • Solo se admite la conexión de base de datos de metastore única, todos los catálogos enumerados en clusterProfile.trinoProfile.catalogOptions.hive sección se configurarán para usar uno y los mismos parámetros de base de datos que se especifican primero.

Adición de una base de datos externa de metastore de Hive

Hay algunas secciones importantes que debe agregar a la plantilla de ARM del clúster para configurar el catálogo de Hive y la base de datos de metastore de Hive:

Configuración de metastore

Configure la base de datos del metastore de Hive externo en el archivo config.properties:

{
    "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"
    }
}
Propiedad Descripción Ejemplo
hive.metastore.hdi.metastoreDbConnectionURL Cadena de conexión JDBC a la base de datos. jdbc:sqlserver://server-name.database.windows.net;database=myhmsdb1;encrypt=true;trustServerCertificate=true;create=false;loginTimeout=30
hive.metastore.hdi.metastoreDbConnectionUserName Nombre de usuario de SQL para conectarse a la base de datos. trinoadmin
hive.metastore.hdi.metastoreDbConnectionPasswordSecret Referencia secretaName configurada en secretsProfile con contraseña. hms-db-pwd
hive.metastore.hdi.metastoreWarehouseDir URI de ABFS a la ubicación en el almacenamiento donde se almacenan los datos. abfs://container1@myadlsgen2account1.dfs.core.windows.net/hive/warehouse

Autenticación del metastore

Configure la autenticación en una base de datos del metastore de Hive externo que especifique secretos de Azure Key Vault.

Nota:

referenceName debe coincidir con el valor proporcionado en 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"
        }                        ]
},
Propiedad Descripción Ejemplo
secretsProfile.keyVaultResourceId Cadena de identificador de recurso de Azure en Azure Key Vault donde se almacenan los secretos de metastore de Hive. /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/trino-rg/providers/Microsoft.KeyVault/vaults/trinoakv
secretsProfile.secrets[*].referenceName Nombre de referencia único del secreto que se usará más adelante en clusterProfile. Secret1_ref
secretsProfile.secrets[*].type Tipo de objeto en Azure Key Vault, solo se admite “Secreto”. Secreto
secretsProfile.secrets[*].keyVaultObjectName Nombre del objeto secreto en Azure Key Vault que contiene el valor de secreto real. secret1

Configuración del catálogo

Para que un catálogo de Trino use el metastore de Hive externo, debe especificar la propiedad hive.metastore=hdi. Para obtener más información, consulte Agregar catálogos al clúster existente:

{
    "fileName": "hive1.properties",
    "values": {
        "connector.name": "hive",
        "hive.metastore": "hdi"
    }
}

Ejemplo completo

Para configurar el metastore externo de Hive en un clúster de Trino existente, agregue las secciones necesarias en la plantilla de ARM del clúster haciendo referencia al ejemplo siguiente:

{
    "$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"
                                            }
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            }
        }
    ]
}

Implemente la plantilla de ARM actualizada para reflejar los cambios en el clúster. Obtenga información sobre cómo implementar una plantilla de ARM. Una vez implementado correctamente, puede ver el catálogo "hive1" en el clúster de Trino.

Puede ejecutar algunas consultas sencillas para probar el catálogo de Hive.

Compruebe si el catálogo de Hive se ha creado correctamente.

show catalogs;

Consulta de una tabla (en este ejemplo, "hive1" es el nombre del catálogo de Hive especificado).

create schema hive1.schema1;
create table hive1.schema1.tpchorders as select * from tpch.tiny.orders;
select * from hive1.schema1.tpchorders limit 100;

Configuración alternativa

Como alternativa, se pueden especificar parámetros de base de datos de metastore de Hive externo en trinoProfile.catalogOptions.hive junto con la propiedad de catálogo hive.metastore=hdi:

Propiedad Descripción Ejemplo
trinoProfile.catalogOptions.hive Lista de catálogos delta o hive o hive con parámetros de la base de datos externa de metastore de Hive, requieren parámetros para cada uno. Para usar la base de datos de metastore externa, el catálogo debe estar presente en esta lista.
trinoProfile.catalogOptions.hive[*].catalogName Nombre del catálogo de Trino configurado en serviceConfigsProfiles, que se configuró para usar la base de datos externa de metastore de Hive. hive1
trinoProfile.catalogOptions.hive[*].metastoreDbConnectionURL Cadena de conexión JDBC a la base de datos. jdbc:sqlserver://server-name.database.windows.net;database=myhmsdb1;encrypt=true;trustServerCertificate=true;create=false;loginTimeout=30
trinoProfile.catalogOptions.hive[*].metastoreDbConnectionUserName Nombre de usuario de SQL para conectarse a la base de datos. trinoadmin
trinoProfile.catalogOptions.hive[*].metastoreDbConnectionPasswordSecret Referencia secretaName configurada en secretsProfile con contraseña. hms-db-pwd
trinoProfile.catalogOptions.hive[*].metastoreWarehouseDir URI de ABFS a la ubicación en el almacenamiento donde se almacenan los datos. abfs://container1@myadlsgen2account1.dfs.core.windows.net/hive/warehouse

Ejemplo completo

{
    "$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"
                                }
                            ]
                        }
                    }
                }
            }
        }
    ]
}