El conector de Hive le permite consultar y analizar los datos almacenados en un almacén de datos de Hive.
Contexto
Un almacén de datos de Hive consta de tres componentes:
Archivos de datos en diversos formatos, que por lo general se almacenan en Hadoop Distributed File System (HDFS) o en un sistema de object storage como Alibaba Cloud OSS.
Metadatos que asignan los archivos de datos a esquemas y tablas. Estos se almacenan en una base de datos como MySQL y se accede a ellos mediante Hive Metastore Service (HMS).
Un lenguaje de consulta llamado HiveQL, que se ejecuta sobre un framework de computación distribuida como MapReduce o Tez.
Este tema describe el conector de Hive y abarca lo siguiente:
Requisitos previos
Cree un clúster DataLake o un clúster Hadoop y seleccione el servicio Presto. Para obtener instrucciones, consulte Create cluster.
Limitaciones
El conector de Hive requiere que Hive Metastore Service esté configurado.
El conector de Hive es compatible con varios sistemas de almacenamiento distribuido, entre ellos HDFS, Alibaba Cloud OSS y otros sistemas compatibles con OSS. El nodo coordinador y todos los nodos worker deben tener acceso de red tanto al Hive Metastore como al sistema de almacenamiento subyacente. De forma predeterminada, Hive Metastore se comunica mediante el protocolo Thrift en el puerto 9083.
Modificar la configuración del conector de Hive
Para modificar la configuración del conector de Hive, consulte Configure a connector.
Configuración predeterminada del conector
En la consola de EMR, vaya a la
Configure
del servicio Presto. En la sección
Service Configuration
, haga clic en la pestaña
hive.properties
. Consulte los siguientes parámetros y modifíquelos según sea necesario.
| Parámetro | Descripción |
| hive.recursive-directories | Habilita la lectura de datos desde los subdirectorios de las ubicaciones de tablas o particiones. Es similar a la propiedad hive.mapred.supports.subdirectories de Hive. |
| hive.metastore.uri | URI para conectarse al Hive Metastore mediante el protocolo Thrift. El valor predeterminado tiene el formato |
| hive.config.resources | Lista de archivos de configuración de HDFS separados por comas. Estos archivos deben existir en todos los hosts de Presto. Importante Configure este parámetro solo cuando se requiera acceso a HDFS. |
| hive.delta-table-enabled | Especifica si Presto puede leer tablas de Delta Lake. Los valores válidos son:
|
| hive.delta-compatible-mode-enabled | Especifica si se habilita el modo de compatibilidad para las tablas de Delta Lake. Los valores válidos son:
|
| hive.hdfs.impersonation.enabled | Especifica si se habilita la suplantación de usuarios. Los valores válidos son:
|
Configuración para varios clústeres de Hive
Si cuenta con varios clústeres de Hive, agregue múltiples archivos de catálogo al directorio etc/catalog. Asegúrese de que cada archivo tenga la extensión .properties.
Por ejemplo, si el archivo de propiedades se llama sales.properties, Presto usa la configuración del conector contenida en ese archivo para crear un catálogo denominado sales.
Configuración de HDFS
Presto configura automáticamente el cliente de HDFS y, por lo general, no requiere archivos de configuración. Sin embargo, en algunos casos, como cuando se habilita HDFS federado o la alta disponibilidad de NameNode, debe especificar opciones adicionales del cliente de HDFS para acceder a su clúster. Para ello, agregue la propiedad
hive.config.resources
con el fin de hacer referencia a los archivos de configuración de HDFS necesarios.
Incluya únicamente el conjunto mínimo de propiedades obligatorias en los archivos para evitar incompatibilidades.
Los archivos de configuración deben existir en todos los hosts de Presto. Si hace referencia a archivos de configuración de Hadoop existentes, asegúrese de copiarlos a cualquier nodo de Presto que no ejecute Hadoop.
Nombre de usuario y permisos de HDFS
Antes de ejecutar cualquier instrucción CREATE TABLE o CREATE TABLE AS para tablas de Hive en Presto, asegúrese de que el usuario con el que Presto accede a HDFS tenga permisos sobre el directorio del almacén de Hive. Este directorio se define mediante la variable de configuración hive.metastore.warehouse.dir en el archivo hive-site.xml. El valor predeterminado es /user/hive/warehouse.
Tipos de archivo compatibles
El conector de Hive admite los siguientes tipos de archivo.
|
Tipo de archivo |
Notas |
|
ORC |
Ninguna |
|
Parquet |
Ninguna |
|
Avro |
Ninguna |
|
RCText |
RCFile que utiliza |
|
RCBinary |
RCFile que utiliza |
|
SequenceFile |
Ninguna |
|
JSON |
Utiliza |
|
CSV |
Utiliza |
|
TextFile |
Ninguna |
Tipos de tabla compatibles
El conector de Hive admite los siguientes tipos de tabla.
|
Tipo |
Descripción |
|
Tabla ACID |
Cuando se conecta a un Hive Metastore versión 3.x, el conector de Hive puede leer y escribir en tablas de solo inserción y tablas ACID. Además, admite particiones y buckets de manera completa. También es compatible con las operaciones DELETE y UPDATE a nivel de fila en tablas ACID. No obstante, no admite operaciones UPDATE en columnas de clave de partición ni en columnas de bucket. Tampoco permite consultar tablas ACID creadas mediante Hive Streaming Ingest. Para obtener más información, consulte Streaming Data Ingest. |
|
Vista materializada |
El conector de Hive puede leer datos de vistas materializadas de Hive. En Presto, estas vistas se presentan como tablas normales de solo lectura. |
Vistas de Hive
Una vista de Hive se define en HiveQL y se almacena en Hive Metastore Service.
El conector de Hive admite las vistas de Hive en los tres modos siguientes.
| Modo | Descripción |
| Disabled | La lógica de negocio y los datos codificados en la vista no son visibles en Presto. De forma predeterminada, Presto ignora las vistas de Hive. |
| Legacy | Implementación sencilla que permite a Presto leer datos de las vistas de Hive. Para habilitar este modo, establezca Si desea habilitar temporalmente el acceso heredado para un catálogo específico, defina la propiedad de sesión de catálogo Dado que HiveQL es muy similar a SQL, el modo heredado interpreta la consulta HiveQL de la vista como SQL estándar, sin traducción alguna. Este enfoque funciona bien con vistas simples de Hive, pero puede generar problemas en consultas complejas. Por ejemplo, si una función de HiveQL tiene la misma firma que una función de SQL pero un comportamiento distinto, los resultados pueden variar. En casos más extremos, la consulta podría fallar durante el análisis sintáctico o la ejecución. |
| Experimental | Este modo analiza, procesa y reescribe las vistas de Hive, incluidas sus expresiones e instrucciones. Para habilitarlo, establezca Aún no es compatible con las siguientes funciones:
|
Propiedades de configuración
Propiedades de configuración de Hive
El conector de Hive admite la aceleración con JindoTable. Los clústeres de EMR incluyen dos conectores de Hive integrados: hive.properties y hive-acc.properties. El archivo hive-acc.properties incorpora JindoTable Native Engine para optimizar y acelerar los archivos en formato ORC o Parquet. Consulte la documentación correspondiente a su versión de SmartData. Para obtener más detalles, consulte Enable native query acceleration.
A continuación se muestran las propiedades de configuración del conector de Hive.
| Parámetro | Descripción |
| hive.config.resources | Lista de archivos de configuración de HDFS separados por comas. Estos archivos deben existir en todos los hosts de Presto. Nota Configure esta propiedad solo cuando se requiera acceso a HDFS. |
| hive.recursive-directories | Permite leer datos desde los subdirectorios de las ubicaciones de tablas o particiones, de forma similar a la propiedad hive.mapred.supports.subdirectories de Hive. |
| hive.ignore-absent-partitions | Ignora una partición si falta su ubicación en el sistema de archivos, en lugar de hacer que la consulta falle. Esto puede provocar que se omitan datos. El valor predeterminado es false. |
| hive.storage-format | Especifica el formato de archivo predeterminado para las tablas nuevas. El valor predeterminado es ORC. |
| hive.compression-codec | Especifica el códec de compresión que se utilizará al escribir archivos. Valores válidos: NONE, SNAPPY, LZ4, ZSTD o GZIP. El valor predeterminado es GZIP. |
| hive.force-local-scheduling | Obliga a programar los splits en el mismo nodo que el DataNode de Hadoop. Esta configuración mejora la eficiencia en instalaciones donde Presto se ubica junto a cada DataNode. El valor predeterminado es false. |
| hive.respect-table-format | Controla si las particiones nuevas utilizan el formato de tabla existente o el formato de Presto. Valores válidos:
|
| hive.immutable-partitions | Controla si se pueden insertar datos nuevos en particiones existentes. Si se establece en true, El valor predeterminado es false. |
| hive.insert-existing-partitions-behavior | Especifica el comportamiento al insertar datos en una partición existente. Valores válidos:
|
| hive.create-empty-bucket-files | Controla si se crean archivos vacíos para los buckets vacíos. Valores válidos:
|
| hive.max-partitions-per-writers | Número máximo de particiones por escritor. El valor predeterminado es 100. |
| hive.max-partitions-per-scan | Número máximo de particiones para un único escaneo de tabla. El valor predeterminado es 100,000. |
| hive.hdfs.authentication.type | Especifica el tipo de autenticación de HDFS. Valores válidos:
|
| hive.hdfs.impersonation.enabled | Habilita la suplantación de usuarios de HDFS. Valores válidos:
|
| hive.hdfs.trino.principal | Principal de Kerberos que utiliza Presto para conectarse a HDFS. |
| hive.hdfs.trino.keytab | Ubicación del archivo keytab del cliente de HDFS. |
| hive.dfs.replication | Factor de replicación de HDFS. |
| hive.security | El valor predeterminado es legacy. Para obtener más información, consulte Configuración de seguridad del conector de Hive. |
| security.config-file | Especifica la ruta del archivo de configuración que se utiliza cuando se establece hive.security=file. |
| hive.non-managed-table-writes-enabled | Habilita las escrituras en tablas de Hive no administradas (externas). El valor predeterminado es false. |
| hive.non-managed-table-creates-enabled | Habilita la creación de tablas de Hive no administradas (externas). El valor predeterminado es true. |
| hive.collect-column-statistics-on-write | Habilita la recopilación automática de estadísticas a nivel de columna durante las escrituras. Para obtener más información, consulte Table statistics. El valor predeterminado es true. |
| hive.file-status-cache-tables | Lista de tablas para las cuales se almacenan en caché los estados de los archivos. Por ejemplo, |
| hive.file-status-cache-size | Número total máximo de entradas de estado de archivo almacenadas en caché. El valor predeterminado es 1,000,000. |
| hive.file-status-cache-expire-time | Tiempo durante el cual los estados de archivo almacenados en caché siguen siendo válidos. El valor predeterminado es 1m. |
| hive.rcfile.time-zone | Ajusta los valores de marca de tiempo codificados en binario a la zona horaria especificada. El valor predeterminado es la zona horaria de la JVM. Nota Para Hive 3.1 y versiones posteriores, este valor debe establecerse en UTC. |
| hive.timestamp-precision | Especifica la precisión de las columnas de marca de tiempo en Hive. Valores válidos:
El valor predeterminado es MILLISECONDS. Nota Los valores con una precisión mayor a la configurada se redondean. |
| hive.temporary-staging-directory-enabled | Controla si se utiliza el directorio de preparación temporal definido en hive.temporary-staging-directory-path para las operaciones de escritura. Este directorio no se emplea al escribir en OSS, en HDFS cifrado ni en tablas no ordenadas ubicadas en destinos externos. Al escribir en tablas ordenadas, la ruta sirve para preparar archivos temporales durante la operación de ordenamiento. Si se deshabilita, se usará el almacenamiento de destino para dicha preparación, lo cual puede resultar ineficiente en sistemas de object storage.El valor predeterminado es true. |
| hive.temporary-staging-directory-path | Especifica la ubicación del directorio de preparación temporal para las operaciones de escritura. El valor predeterminado es
/tmp/presto-${USER}.Nota El marcador de posición ${USER} permite asignar una ubicación distinta para cada usuario. |
| hive.translate-hive-views | Habilita la traducción de las vistas de Hive. El valor predeterminado es false. |
| hive.legacy-hive-view-translation | Utiliza el algoritmo heredado para traducir las vistas de Hive. La propiedad de sesión de catálogo legacy_hive_view_translation permite aplicarlo a catálogos específicos.El valor predeterminado es false. |
| hive.parallel-partitioned-bucketed-writes | Incrementa el paralelismo de escritura en tablas particionadas y con buckets. El valor predeterminado es true. Nota Si se deshabilita esta propiedad, la cantidad de hilos de escritura se limita al número de buckets. |
Propiedades de configuración del formato ORC
Las siguientes propiedades controlan cómo el conector de Hive lee y escribe archivos ORC.
|
Parámetro |
Descripción |
|
hive.orc.time-zone |
Establece la zona horaria predeterminada para los archivos ORC heredados que no declaran una zona horaria. El valor predeterminado es la zona horaria de la JVM. |
|
hive.orc.use-columns-names |
Controla si se accede a las columnas ORC por nombre. De forma predeterminada, se accede a las columnas de los archivos ORC según su posición ordinal en la definición de la tabla de Hive. Este comportamiento también se puede controlar mediante la propiedad de El valor predeterminado es false. |
Propiedades de configuración del formato Parquet
Las siguientes propiedades controlan cómo el conector de Hive lee y escribe archivos Parquet.
| Parámetro | Descripción |
| hive.parquet.time-zone | Ajusta los valores de marca de tiempo a la zona horaria especificada. El valor predeterminado es la zona horaria de la JVM. Nota Para Hive 3.1 y versiones posteriores, este valor debe establecerse en UTC. |
| hive.parquet.use-columns-names | Controla cómo se accede a las columnas Parquet. Valores válidos:
parquet_use_column_names catalog session. |
Propiedades de configuración del metastore
Las siguientes propiedades configuran el metastore de Hive. Para conocer las propiedades que configuran adicionalmente Thrift, consulte
Thrift metastore configuration properties
.
|
Parámetro |
Descripción |
|
hive.metastore |
Especifica el tipo de metastore de Hive que se utilizará. Presto admite el metastore Thrift predeterminado de Hive (thrift) y sus derivados. El valor predeterminado es thrift. |
|
hive.metastore-cache-ttl |
Define durante cuánto tiempo se consideran válidos los datos del metastore almacenados en la caché. El valor predeterminado es 0s. |
|
hive.metastore-cache-maximum-size |
Número máximo de objetos de datos del metastore que se almacenan en caché. El valor predeterminado es 10000. |
|
hive.metastore-refresh-interval |
Especifica la frecuencia con la que se actualizan de forma asíncrona los datos del metastore almacenados en caché después de acceder a ellos. Si los datos están obsoletos pero aún no han caducado, los accesos posteriores mostrarán la información actualizada. |
|
hive.metastore-refresh-max-threads |
Número máximo de hilos utilizados para actualizar la caché del metastore. El valor predeterminado es 10. |
|
hive.metastore-timeout |
Tiempo de espera para las solicitudes al metastore de Hive. El valor predeterminado es 10s. |
Propiedades de configuración del metastore Thrift
A continuación se describen las propiedades de configuración del metastore Thrift para el conector de Hive.
| Parámetro | Descripción |
| hive.metastore.uri | URI para conectarse al metastore de Hive mediante el protocolo Thrift. Si proporciona varias URI, se utilizará la primera de forma predeterminada y las demás funcionarán como metastores de respaldo. Esta propiedad es obligatoria. Ejemplo: |
| hive.metastore.username | Nombre de usuario con el que Presto accede al metastore de Hive. |
| hive.metastore.authentication.type | Especifica el tipo de autenticación del metastore de Hive. Valores válidos:
|
| hive.metastore.thrift.impersonation.enabled | Habilita la suplantación de usuarios en el metastore de Hive. |
| hive.metastore.thrift.delegation-token.cache-ttl | Tiempo de vida de la caché de tokens de delegación del metastore. El valor predeterminado es 1h. |
| hive.metastore.thrift.delegation-token.cache-maximum-size | Tamaño máximo de la caché de tokens de delegación. El valor predeterminado es 1000. |
| hive.metastore.thrift.client.ssl.enabled | Habilita o deshabilita SSL al conectarse al metastore. Valores válidos:
|
| hive.metastore.thrift.client.ssl.key | Ruta de la clave privada y del certificado de cliente (keystore). |
| hive.metastore.thrift.client.ssl.key-password | Contraseña de la clave privada. |
| hive.metastore.thrift.client.ssl.trust-certificate | Ruta de la cadena de certificados del servidor (truststore). Nota Esta propiedad es obligatoria cuando SSL está habilitado. |
| hive.metastore.thrift.client.ssl.trust-certificate-password | Contraseña de la cadena de certificados del servidor. |
| hive.metastore.service.principal | Principal de Kerberos del servicio de metastore de Hive. |
| hive.metastore.client.principal | Principal de Kerberos que utiliza Presto para conectarse al servicio de metastore de Hive. |
| hive.metastore.client.keytab | Ubicación del archivo keytab del cliente del metastore de Hive. |
Propiedades de ajuste de rendimiento
A continuación se describen las propiedades de ajuste de rendimiento del conector de Hive.
Modificar los valores predeterminados de estas propiedades puede provocar inestabilidad y degradación del rendimiento. Proceda con precaución.
|
Parámetro |
Descripción |
|
hive.max-outstanding-splits |
Número objetivo de splits almacenados en búfer por cada escaneo de tabla en una consulta, antes de que el planificador pause la detección. El valor predeterminado es 1000. |
|
hive.max-splits-per-second |
Número máximo de splits generados por segundo en cada escaneo de tabla. Esta configuración reduce la carga sobre el sistema de almacenamiento. De forma predeterminada no existe límite, por lo que Presto maximiza el paralelismo en el acceso a los datos. |
|
hive.max-initial-splits |
Para cada escaneo de tabla, el coordinador asigna una cantidad inicial de splits hasta alcanzar este límite. Los splits iniciales tienen un tamaño máximo definido por max-initial-split-size. Los splits posteriores respetan el tamaño indicado en max-split-size. El valor predeterminado es 200. |
|
hive.max-initial-split-size |
Tamaño de cada split inicial, utilizado hasta que la cantidad de splits alcanza el valor de max-initial-splits. Los splits más pequeños incrementan el paralelismo y pueden acelerar las consultas cortas. El valor predeterminado es 32MB. |
|
hive.max-split-size |
Tamaño máximo de un split individual asignado a un worker. Los splits más pequeños generan mayor paralelismo, lo cual reduce la latencia, aunque también aumenta la sobrecarga y la carga del sistema. El valor predeterminado es 64MB. |
Estadísticas de tablas
El conector de Hive permite recopilar y gestionar estadísticas de tablas para mejorar el rendimiento de las consultas.
De forma predeterminada, al escribir datos, el conector de Hive recopila estadísticas básicas de la tabla (como la cantidad de archivos, el número de filas y el tamaño de los datos), además de las estadísticas a nivel de columna que se muestran en la siguiente tabla.
|
Tipo de columna |
Estadísticas recopiladas |
|
TINYINT |
Cantidad de valores nulos, cantidad de valores distintos, valores mínimos y máximos |
|
SMALLINT |
Cantidad de valores nulos, cantidad de valores distintos, valores mínimos y máximos |
|
INTEGER |
Cantidad de valores nulos, cantidad de valores distintos, valores mínimos y máximos |
|
BIGINT |
Cantidad de valores nulos, cantidad de valores distintos, valores mínimos y máximos |
|
DOUBLE |
Cantidad de valores nulos, cantidad de valores distintos, valores mínimos y máximos |
|
REAL |
Cantidad de valores nulos, cantidad de valores distintos, valores mínimos y máximos |
|
DECIMAL |
Cantidad de valores nulos, cantidad de valores distintos, valores mínimos y máximos |
|
DATE |
Cantidad de valores nulos, cantidad de valores distintos, valores mínimos y máximos |
|
TIMESTAMP |
Cantidad de valores nulos, cantidad de valores distintos, valores mínimos y máximos |
|
VARCHAR |
Cantidad de valores nulos, cantidad de valores distintos |
|
CHAR |
Cantidad de valores nulos, cantidad de valores distintos |
|
VARBINARY |
Cantidad de valores nulos |
|
BOOLEAN |
Cantidad de valores nulos, cantidad de valores verdaderos y falsos |