A partir de la versión V2.2, Hologres admite Hive Metastore (HMS) como origen de metadatos para los data lakes construidos sobre Object Storage Service (OSS). Si su data lake se ejecuta en un clúster de E-MapReduce (EMR) con OSS u OSS-HDFS como capa de almacenamiento, conecte Hologres a HMS para consultar los datos de OSS directamente mediante SQL, sin necesidad de migrar ni copiar información.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
El servicio OSS activado. Consulte Console quick start.
-
Un data lake cluster de EMR con datos de prueba cargados. Consulte 在EMR Hive或Spark中访问OSS-HDFS y Create a cluster. El clúster debe cumplir todas las condiciones siguientes:
Hive versión 3.1.3 o posterior
Autenticación Kerberos deshabilitada
Metadata configurado como Self-managed RDS o Built-in MySQL
-
Una instancia de Hologres con la aceleración de data lake habilitada y una base de datos creada. Consulte Purchase a Hologres instance y Create a database.
Para habilitar la aceleración de data lake, vaya a la consola de Hologres. En la columna Actions de la instancia de destino, haga clic en Lake Acceleration y confirme.
-
Una conexión de red entre Hologres y el clúster de EMR. Dado que Hologres se despliega en una red clásica y EMR se ejecuta en una virtual private cloud (VPC), se requiere un endpoint inverso para que ambos servicios se comuniquen. Envíe una solicitud de conexión de red. A continuación, el equipo de soporte de Hologres le guiará por los pasos siguientes:
Inicie sesión en la consola de VPC y cree un endpoint inverso. Consulte Access Alibaba Cloud services.
-
Para el parámetro Type, seleccione Other Endpoint Services e introduzca el nombre del servicio de endpoint correspondiente a la región donde se ubica su clúster de EMR:
Región
Nombre del servicio de endpoint
China (Beijing)
com.aliyuncs.privatelink.cn-beijing.epsrv-2zeokrydzjd6kx3cbwmbChina (Shanghai)
com.aliyuncs.privatelink.cn-shanghai.epsrv-uf61fvlfwta7f7dv9n3xChina (Zhangjiakou)
com.aliyuncs.privatelink.cn-zhangjiakou.epsrv-8vbno4k4wwvys0eg2swp
Si su región no aparece en la lista, el equipo de Hologres creará un servicio de endpoint y le proporcionará el nombre después de que envíe la solicitud. La conexión utiliza una dirección IP. Si la dirección IP del clúster de EMR cambia, vuelva a configurar la conexión.
Limitaciones
Las instancias secundarias de solo lectura de Hologres no admiten la aceleración de data lake.
Los comandos
UPDATE,DELETEyTRUNCATEno son compatibles con las tablas externas.No se admite Auto Load (mapeo por lotes de tablas externas desde HMS).
No se admiten los clústeres de EMR con autenticación Kerberos habilitada.
Conexión de Hologres a HMS
Hologres ofrece dos formas de conectarse a HMS. Elija una según la versión de su instancia y el nivel de control que necesite sobre el mapeo de columnas.
Método 1: base de datos externa (recomendado). Requiere Hologres V3.0 o posterior. Una base de datos externa mapea de forma simultánea cada base de datos y tabla de HMS a una base de datos externa, un esquema y una tabla externa en Hologres. De este modo, usted consulta los datos con un nombre de tres partes en lugar de crear una tabla externa a la vez.
Método 2: hive_fdw. Utilice este método en Hologres V2.2 o posterior, pero anterior a V3.0, o cuando necesite mapear un subconjunto de columnas o cambiar el nombre de las tablas.
Método 1: uso de una base de datos externa (recomendado)
-
Conéctese a su instancia de Hologres y cree la base de datos externa. Este paso requiere permisos de superusuario.
Para consultar la sintaxis completa, consulte CREATE EXTERNAL DATABASE.
CREATE EXTERNAL DATABASE <EXTERNAL_DATABASE_NAME> owner '<ACCOUNT_NAME>' metastore_type 'hms' catalog_type 'hive' hive_metastore_uris 'thrift://<HIVE_METASTORE_IP>:<PORT>' metadata_cache_ttl_sec '600' metadata_cache_update_interval_sec '60' metadata_refresh_interval_sec '7200' oss_endpoint 'oss-<REGION_ID>-internal.aliyuncs.com' table_count_limitation_per_schema '2000' comment '<EXTERNAL_DATABASE_COMMENT>';Parameter
Description
Example
external_database_nameNombre de la base de datos externa.
catalog_hiveownerCuenta de Hologres propietaria de la base de datos externa.
p4_<ACCOUNT_ID>metastore_typeTipo de servicio de metadatos. Establezca hms para Hive Metastore.
hmscatalog_typeTipo de catálogo. Establezca hive para un catálogo de Hive.
hivehive_metastore_urisURI de Hive Metastore. Formato: thrift://<HIVE_METASTORE_IP>:<PORT>. El puerto predeterminado es 9083.
thrift://10.0.0.1:9083metadata_cache_ttl_secOpcional. Tiempo durante el cual los metadatos almacenados en caché permanecen válidos, en segundos.
600 (default)metadata_cache_update_interval_secOpcional. Intervalo entre las actualizaciones de la caché de metadatos, en segundos.
60 (default)metadata_refresh_interval_secOpcional. Intervalo entre las actualizaciones completas de metadatos, en segundos.
7200 (default)oss_endpointEndpoint de OSS. Para OSS nativo, utilice el endpoint interno para obtener un mejor rendimiento.
oss-cn-beijing-internal.aliyuncs.comtable_count_limitation_per_schemaOpcional. Número máximo de tablas cargadas por esquema.
2000 (default)commentOpcional. Descripción de la base de datos externa.
holo-emr-hiveLos intervalos de caché y el límite de tablas anteriores son valores de ejemplo. Ajústelos según la frecuencia de actualización de sus metadatos y la cantidad de tablas en HMS.
-
(Opcional) Cree un mapeo de usuarios.
Un mapeo de usuarios proporciona las credenciales que utiliza una cuenta específica de Hologres para leer datos de OSS. Para más detalles, consulte CREATE USER MAPPING.
CREATE USER MAPPING FOR <ACCOUNT_NAME> EXTERNAL DATABASE <EXTERNAL_DATABASE_NAME> OPTIONS ( oss_access_id '<ACCESS_KEY_ID>', oss_access_key '<ACCESS_KEY_SECRET>' ); -
Consulte las tablas externas.
Una vez creada la base de datos externa, haga referencia a cualquier tabla mediante un nombre de tres partes: base de datos externa, base de datos de Hive y tabla de Hive.
Tabla sin particiones:
SELECT * FROM <EXTERNAL_DATABASE_NAME>.<HIVE_DATABASE_NAME>.<HIVE_TABLE_NAME>;Tabla con particiones: filtre por la clave de partición en la cláusula WHERE.
SELECT * FROM <EXTERNAL_DATABASE_NAME>.<HIVE_DATABASE_NAME>.<HIVE_PARTITION_TABLE_NAME> WHERE <PARTITION_KEY> = '<PARTITION_VALUE>';
Método 2: uso de hive_fdw
Paso 1: creación de la extensión
Ejecute el siguiente comando SQL para instalar el foreign data wrapper (FDW) hive_fdw. Esta operación requiere permisos de superusuario y solo es necesario ejecutarla una vez por base de datos.
CREATE EXTENSION IF NOT EXISTS hive_fdw;
Paso 2: creación de un servidor externo
Cree un servidor externo que apunte a su instancia de HMS y al almacenamiento de OSS.
Antes de ejecutar el comando, recopile los valores siguientes:
Dirección IP de HMS: en la consola de E-MapReduce, haga clic en Node Management para su clúster. En la pestaña Node Management, busque la Internal IP del nodo maestro.
Endpoint de OSS: en la consola de OSS, abra la página de descripción general del bucket y revise el área Access Ports.
CREATE SERVER IF NOT EXISTS <SERVER_NAME> FOREIGN DATA WRAPPER hive_fdw
OPTIONS (
hive_metastore_uris 'thrift://<HIVE_METASTORE_IP>:<PORT>',
oss_endpoint '<OSS_ENDPOINT>'
);
|
Parameter |
Required |
Description |
Example |
|
|
Sí |
Un nombre personalizado para el servidor externo. |
|
|
|
Sí |
La URI de Hive Metastore. Formato: |
|
|
|
Sí |
El endpoint de OSS. Para OSS nativo, utilice el endpoint interno para obtener un mejor rendimiento. Para OSS-HDFS, solo se admite el endpoint interno. |
Consulte los ejemplos siguientes |
Para oss_endpoint, elija la opción adecuada según su tipo de almacenamiento:
-
OSS nativo: utilice el endpoint interno.
oss-cn-shanghai-internal.aliyuncs.com -
OSS-HDFS: solo se admite el acceso por red interna.
<BUCKET_NAME>.cn-beijing.oss-dls.aliyuncs.com
Paso 3: (Opcional) creación de un mapeo de usuarios
Un mapeo de usuarios controla qué cuentas de Hologres pueden acceder a datos externos a través de un servidor externo. Por ejemplo, el propietario de un servidor externo puede otorgar a un usuario de Resource Access Management (RAM) acceso a los datos de OSS.
Para más detalles sobre la sintaxis de CREATE USER MAPPING, consulte la documentación de PostgreSQL.
-- Grant the current user access to the foreign server
CREATE USER MAPPING FOR current_user SERVER <SERVER_NAME> OPTIONS (
dlf_access_id '<ACCESS_KEY_ID>',
dlf_access_key '<ACCESS_KEY_SECRET>',
oss_access_id '<ACCESS_KEY_ID>',
oss_access_key '<ACCESS_KEY_SECRET>'
);
-- Grant a RAM user (123xxx) access to the foreign server
CREATE USER MAPPING FOR "p4_123xxx" SERVER <SERVER_NAME> OPTIONS (
dlf_access_id '<ACCESS_KEY_ID>',
dlf_access_key '<ACCESS_KEY_SECRET>',
oss_access_id '<ACCESS_KEY_ID>',
oss_access_key '<ACCESS_KEY_SECRET>'
);
-- Remove user mappings
DROP USER MAPPING FOR CURRENT_USER SERVER <SERVER_NAME>;
DROP USER MAPPING FOR "p4_123xxx" SERVER <SERVER_NAME>;
Paso 4: creación de una tabla externa
Hologres proporciona dos comandos para crear tablas externas:
|
Command |
Best for |
|
Recomendado para un número reducido de tablas, o cuando necesita mapear un subconjunto de columnas o asignar un nombre de tabla personalizado. |
|
|
Diseñado para el mapeo por lotes de varias tablas desde un esquema externo. |
Hologres admite tablas con particiones en OSS. Los tipos de clave de partición compatibles son TEXT, VARCHAR e INT.
Con CREATE FOREIGN TABLE : defina los campos de partición como columnas normales, ya que este comando mapea el esquema sin almacenar datos.
Con IMPORT FOREIGN SCHEMA : el sistema gestiona el mapeo de campos automáticamente.
Si el nombre de una tabla externa entra en conflicto con una tabla interna existente de Hologres,IMPORT FOREIGN SCHEMAomite dicha tabla. UtiliceCREATE FOREIGN TABLEpara mapearla con un nombre distinto.
-- Create a single foreign table
CREATE FOREIGN TABLE <HOLO_SCHEMA_NAME>.<TABLE_NAME>
(
column_name data_type
[, ...]
)
SERVER <SERVER_NAME>
OPTIONS (
schema_name '<HIVE_DATABASE_NAME>',
table_name '<HIVE_TABLE_NAME>'
);
-- Import multiple foreign tables in batch
IMPORT FOREIGN SCHEMA <HIVE_DATABASE_NAME>
[
{ LIMIT TO | EXCEPT }
( table_name [, ...] )
]
FROM SERVER <SERVER_NAME>
INTO <HOLO_SCHEMA_NAME>
OPTIONS (
if_table_exist 'update',
if_unsupported_type 'error'
);
Paso 5: consulta de la tabla externa
Después de crear la tabla externa, consúltela directamente para leer los datos de OSS.
Tabla sin particiones:
SELECT * FROM <HOLO_SCHEMA_NAME>.<TABLE_NAME>;
Tabla con particiones:
SELECT * FROM <HOLO_SCHEMA_NAME>.<PARTITION_TABLE_NAME>
WHERE <PARTITION_KEY> = '<PARTITION_VALUE>';