¿Qué son Apache Hive y HiveQL en Azure HDInsight?

Apache Hive es un sistema de almacenamiento de datos para Apache Hadoop. Hive hace posibles el resumen de los datos, las consultas y el análisis de datos. Las consultas de Hive se escriben en HiveQL, que es un lenguaje de consulta similar a SQL.

Hive le permite proyectar la estructura del proyecto en datos que en gran medida no están estructurados. Después de definir la estructura, puede usar HiveQL para consultar los datos sin conocimientos de Java ni MapReduce.

HDInsight proporciona varios tipos de clúster, que están optimizados para cargas de trabajo específicas. Se suelen usar los siguientes tipos de clúster para consultas de Hive:

Tipo de clúster Descripción
Interactive Query un clúster de Hadoop que proporciona funcionalidad de procesamiento analítico de baja latencia (LLAP) para mejorar los tiempos de respuesta de las consultas interactivas. Para más información, vea el documento Uso de Hive interactivo con HDInsight (versión preliminar).
Hadoop un clúster de Hadoop que está optimizado para cargas de trabajo de procesamiento por lotes. Para más información, consulte el documento Introducción a Apache Hadoop en HDInsight.
Spark Apache Spark tiene funcionalidad integrada para trabajar con Hive. Para más información, consulte el documento Introducción a Apache Spark en HDInsight.
HBase se puede usar HiveQL para consultar datos almacenados en Apache HBase. Para más información, consulte el documento Introducción a Apache HBase en HDInsight.

Uso de Hive

Utilice la siguiente tabla para descubrir distintas formas de usar Hive con HDInsight:

Use este método si desea… ... consultas interactivas ...procesamiento porlotes ...desde este sistema operativo de cliente
Herramientas de HDInsight para Visual Studio Code Linux, Unix, macOS X o Windows
Herramientas de HDInsight para Visual Studio Windows
Vista de Hive Cualquiera (en función del explorador)
Cliente Beeline Linux, Unix, macOS X o Windows
REST API   Linux, Unix, macOS X o Windows
Windows PowerShell   Windows

Referencia del lenguaje HiveQL

La referencia del lenguaje de HiveQL está disponible en el manual del lenguaje.

Hive y estructura de datos

Hive entiende cómo trabajar con los datos estructurados y semiestructurados. Por ejemplo, archivos de texto donde los campos están delimitados por caracteres específicos. La siguiente instrucción HiveQL crea una tabla de datos delimitados por espacios:

CREATE EXTERNAL TABLE log4jLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';

Hive también admite serializador/deserializadores (SerDe) personalizados para datos estructurados irregularmente o complejos. Para obtener más información, consulte el documento Uso de un SerDe de JSON personalizado con HDInsight.

Para obtener más información sobre formatos de archivo compatibles con Hive, consulte el manual del lenguaje (https://cwiki.apache.org/confluence/display/Hive/LanguageManual)

Tablas internas frente a tablas externas de Hive.

Hay dos tipos de tablas que puede crear con Hive:

  • Internas: los datos se almacenan en el almacenamiento de datos de Hive. El almacenamiento de datos se encuentra en /hive/warehouse/ en el almacenamiento predeterminado para el clúster.

    Use las tablas internas cuando se cumpla alguna de las condiciones siguientes:

    • Los datos sean temporales.
    • Desee que Hive administre el ciclo de vida de la tabla y los datos.
  • Externas: los datos se almacenan fuera del almacenamiento de datos. Los datos se pueden almacenar en cualquier almacenamiento accesible desde el clúster.

    Use las tablas externas cuando se cumpla alguna de las condiciones siguientes:

    • Los datos también se utilicen fuera de Hive. Por ejemplo, los archivos de datos se actualizan en otro proceso (que no bloquea los archivos).
    • Los datos deban permanecer en la ubicación subyacente, incluso después de eliminarse la tabla.
    • Necesite una ubicación personalizada, como una cuenta de almacenamiento no predeterminada.
    • Un programa distinto de Hive administre el formato de datos, la ubicación, etc.

Para más información, consulte la entrada de blog Hive Internal and External Tables Intro (Introducción a las tablas internas y externas de Hive).

Funciones definidas por el usuario (UDF)

Hive también puede extenderse a través de funciones definidas por el usuario (UDF). Una UDF le permite implementar la funcionalidad o la lógica que no se modela con facilidad en HiveQL. Para obtener un ejemplo del uso de UDF con Hive, vea los siguientes documentos:

Datos de ejemplo

Hive en HDInsight tiene ya cargada una tabla interna denominada hivesampletable. Además, HDInsight proporciona conjuntos de datos de ejemplo que se pueden usar con Hive. Estos conjuntos de datos se almacenan en los directorios /example/data y /HdiSamples. Estos directorios existen en el almacenamiento predeterminado del clúster.

Ejemplo de consulta de Hive

Las siguientes instrucciones de HiveQL proyectan columnas sobre el archivo /example/data/sample.log:

DROP TABLE log4jLogs;
CREATE EXTERNAL TABLE log4jLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';
SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs
    WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log'
    GROUP BY t4;

En el ejemplo anterior, las instrucciones de HiveQL realizan las acciones siguientes:

. Descripción
DROP TABLE si la tabla ya existe, la elimina.
CREATE EXTERNAL TABLE crea una nueva tabla externa en Hive. Las tablas externas solo almacenan la definición de Tabla en Hive. Los datos permanecen en la ubicación y formato originales.
FORMATO DE FILA indica a Hive cómo se da formato a los datos. En este caso, los campos de cada registro se separan mediante un espacio.
STORED AS TEXTFILE LOCATION indica a Hive dónde se almacenan los datos (el directorio example/data) y que se almacenen como texto. Los datos pueden estar en un archivo o distribuidos en varios archivos dentro del directorio.
SELECT selecciona el número total de filas donde la columna t4 contiene el valor [ERROR]. Esta instrucción devuelve un valor de 3 porque hay tres filas que contienen este valor.
INPUT__FILE__NAME LIKE '%.log' Hive intenta aplicar el esquema a todos los archivos en el directorio. En este caso, el directorio contiene archivos que no coinciden con el esquema. Para evitar que haya datos inservibles en los resultados, esta instrucción indica a Hive que solo se deben devolver datos de archivos que terminen en .log.

Nota

Las tablas externas se deben utilizar cuando se espera que un origen externo actualice los datos subyacentes. Por ejemplo, un proceso de carga de datos automatizado o una operación de MapReduce.

La eliminación de una tabla externa no elimina los datos, solamente la definición de tabla.

Para crear una tabla interna en lugar de una externa, use el siguiente HiveQL:

CREATE TABLE IF NOT EXISTS errorLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
STORED AS ORC;
INSERT OVERWRITE TABLE errorLogs
SELECT t1, t2, t3, t4, t5, t6, t7 
    FROM log4jLogs WHERE t4 = '[ERROR]';

Estas instrucciones realizan las acciones siguientes:

. Descripción
CREATE TABLE IF NOT EXISTS Si la tabla no existe, créela. Dado que no se utiliza la palabra clave EXTERNAL, esta instrucción crea una tabla interna. La tabla se almacena en el almacenamiento de datos de Hive y Hive la administra por completo.
STORED AS ORC almacena los datos en el formato de columnas de filas optimizadas (ORC, Optimized Row Columnar). ORC es un formato altamente optimizado y eficiente para almacenar datos de Hive.
INSERT OVERWRITE ... SELECT selecciona filas de la tabla log4jLogs que contiene [ERROR] y luego inserta los datos en la tabla errorLogs.

Nota

A diferencia de las tablas externas, la eliminación de una tabla interna también eliminará los datos subyacentes.

Mejora del rendimiento de las consultas de Hive

Apache Tez

Apache Tez es un marco que permite que aplicaciones con uso intensivo de datos, como Hive, se ejecuten con mucha más eficacia a escala. Tez está habilitado de manera predeterminada. Los documentos de diseño de Apache Hive en Tez incluyen detalles sobre las opciones de implementación y las configuraciones de ajuste.

Procesamiento analítico de baja latencia (LLAP)

LLAP (conocido a veces como Larga vida y procesamiento) es una característica nueva de Hive 2.0 que permite el almacenamiento en memoria caché de las consultas.

HDInsight proporciona LLAP en el tipo de clúster Interactive Query. Para más información, vea el documento Uso de Hive interactivo con HDInsight (versión preliminar).

Programación de consultas de Hive

Hay varios servicios que se pueden usar para ejecutar consultas de Hive como parte de un flujo de trabajo programado o a petición.

Azure Data Factory

Azure Data Factory permite usar HDInsight como parte de una canalización de Data Factory. Para más información sobre el uso de Hive desde una canalización, consulte el documento Transformación de datos mediante una actividad de Hive en Azure Data Factory.

Trabajos de Hive y servicios de integración de SQL Server

Puede usar SQL Server Integration Services (SSIS) para ejecutar un trabajo de Hive. El paquete de características de Azure para SSIS proporciona los siguientes componentes que funcionan con trabajos de Hive en HDInsight.

Para más información, consulte la documentación del Paquete de características de Azure.

Apache Oozie

Apache Oozie es un sistema de coordinación y flujos de trabajo que administra trabajos de Hadoop. Para más información sobre el uso de Oozie con Hive, consulte el documento Uso de Apache Oozie para definir y ejecutar un flujo de trabajo.

Nota:

Phoenix Storage Handler for Hive no se admite en HDInsight

Pasos siguientes

Ahora que aprendió qué es Hive y cómo usarlo con Hadoop en HDInsight, use los siguientes vínculos para explorar otras formas de trabajar con HDInsight de Azure.