Apache Hive es un proyecto de software de almacenamiento de datos construido sobre Apache Hadoop para proporcionar consultas y análisis de datos. [3] Hive ofrece una interfaz similar a SQL para consultar datos almacenados en varias bases de datos y sistemas de archivos que se integran con Hadoop. Las consultas SQL tradicionales deben implementarse en MapReduce Java API para ejecutar aplicaciones SQL y consultas sobre datos distribuidos. Hive proporciona la abstracción SQL necesaria para integrar consultas similares a SQL ( HiveQL) en el Java subyacente sin la necesidad de implementar consultas en la API de Java de bajo nivel. Dado que la mayoría de las aplicaciones de almacenamiento de datos funcionan con lenguajes de consulta basados en SQL, Hive ayuda a la portabilidad de las aplicaciones basadas en SQL a Hadoop. [4] Aunque inicialmente fue desarrollado por Facebook , Apache Hive es utilizado y desarrollado por otras compañías como Netflix y la Autoridad Reguladora de la Industria Financiera (FINRA). [5] [6] Amazon mantiene una bifurcación de software de Apache Hive incluida en Amazon Elastic MapReduce en Amazon Web Services . [7]
Autor (es) original (es) | |
---|---|
Desarrollador (es) | Colaboradores |
Versión inicial | 1 de octubre de 2010 [1] |
Lanzamiento estable | 3.1.2 / 26 de agosto de 2019 [2] |
Repositorio | github |
Escrito en | Java |
Sistema operativo | Multiplataforma |
Disponible en | SQL |
Tipo | Almacén de datos |
Licencia | Licencia Apache 2.0 |
Sitio web | colmena |
Características
Apache Hive admite el análisis de grandes conjuntos de datos almacenados en HDFS de Hadoop y sistemas de archivos compatibles como el sistema de archivos Amazon S3 y Alluxio . Proporciona un lenguaje de consulta similar a SQL llamado HiveQL [8] con esquema en lectura y convierte de forma transparente consultas a trabajos MapReduce , Apache Tez [9] y Spark . Los tres motores de ejecución pueden ejecutarse en el negociador de recursos de Hadoop , YARN (Yet Another Resource Negotiator). Para acelerar las consultas, proporcionó índices, pero esta característica se eliminó en la versión 3.0 [10] Otras características de Hive incluyen:
- Diferentes tipos de almacenamiento como texto sin formato, RCFile , HBase , ORC y otros.
- Almacenamiento de metadatos en un sistema de administración de bases de datos relacionales , lo que reduce significativamente el tiempo para realizar verificaciones semánticas durante la ejecución de la consulta.
- Operar con datos comprimidos almacenados en el ecosistema de Hadoop utilizando algoritmos que incluyen DEFLATE , BWT , snappy , etc.
- Funciones integradas definidas por el usuario (UDF) para manipular fechas, cadenas y otras herramientas de extracción de datos. Hive admite la extensión del conjunto de UDF para manejar casos de uso que no son compatibles con las funciones integradas.
- Consultas similares a SQL (HiveQL), que se convierten implícitamente en trabajos de MapReduce o Tez o Spark.
De forma predeterminada, Hive almacena metadatos en una base de datos Apache Derby incrustada y, opcionalmente, se pueden utilizar otras bases de datos cliente / servidor como MySQL . [11]
Los primeros cuatro formatos de archivo admitidos en Hive fueron texto sin formato, [12] archivo de secuencia, formato de columnas de filas optimizadas (ORC) [13] y RCFile . [14] Apache Parquet se puede leer a través de un complemento en versiones posteriores a 0.10 y de forma nativa a partir de 0.13. [15] [16] Los complementos de Hive adicionales admiten la consulta de Bitcoin Blockchain . [17]
Arquitectura
Los componentes principales de la arquitectura de Hive son:
- Metastore: almacena metadatos para cada una de las tablas, como su esquema y ubicación. También incluye los metadatos de la partición que ayudan al controlador a rastrear el progreso de varios conjuntos de datos distribuidos en el clúster. [18] Los datos se almacenan en un formato RDBMS tradicional . Los metadatos ayudan al conductor a realizar un seguimiento de los datos y son cruciales. Por lo tanto, un servidor de respaldo replica regularmente los datos que se pueden recuperar en caso de pérdida de datos.
- Controlador: actúa como un controlador que recibe las declaraciones de HiveQL. Inicia la ejecución de la declaración creando sesiones y monitorea el ciclo de vida y el progreso de la ejecución. Almacena los metadatos necesarios generados durante la ejecución de una declaración HiveQL. El controlador también actúa como un punto de recopilación de datos o resultados de consultas obtenidos después de la operación Reducir. [14]
- Compilador: realiza la compilación de la consulta HiveQL, que convierte la consulta en un plan de ejecución. Este plan contiene las tareas y los pasos que debe realizar Hadoop MapReduce para obtener el resultado traducido por la consulta. El compilador convierte la consulta en un árbol de sintaxis abstracta (AST). Después de verificar la compatibilidad y los errores de tiempo de compilación, convierte el AST en un gráfico acíclico dirigido (DAG). [19] El DAG divide a los operadores en etapas y tareas de MapReduce según la consulta de entrada y los datos. [18]
- Optimizador: realiza varias transformaciones en el plan de ejecución para obtener un DAG optimizado. Las transformaciones se pueden agregar juntas, como convertir una canalización de combinaciones en una sola combinación, para un mejor rendimiento. [20] También puede dividir las tareas, como aplicar una transformación a los datos antes de una operación de reducción, para proporcionar un mejor rendimiento y escalabilidad. Sin embargo, la lógica de transformación utilizada para la optimización utilizada se puede modificar o canalizar utilizando otro optimizador. [14]
- Ejecutor: Después de la compilación y optimización, el ejecutor ejecuta las tareas. Interactúa con el rastreador de trabajos de Hadoop para programar las tareas que se ejecutarán. Se encarga de canalizar las tareas asegurándose de que una tarea con dependencia se ejecute solo si se ejecutan todos los demás requisitos previos. [20]
- CLI, UI y Thrift Server : una interfaz de línea de comandos (CLI) proporciona una interfaz de usuario para que un usuario externo interactúe con Hive enviando consultas, instrucciones y monitoreando el estado del proceso. El servidor Thrift permite que los clientes externos interactúen con Hive a través de una red, de forma similar a los protocolos JDBC u ODBC . [21]
HiveQL
Aunque se basa en SQL, HiveQL no sigue estrictamente el estándar SQL-92 completo . HiveQL ofrece extensiones que no están en SQL, incluidas inserciones de varias tablas y crear tablas como seleccionar . HiveQL carecía de soporte para transacciones y vistas materializadas , y solo soporte limitado para subconsultas. [22] [23] El soporte para insertar, actualizar y eliminar con la funcionalidad completa de ACID estuvo disponible con la versión 0.14. [24]
Internamente, un compilador traduce las declaraciones de HiveQL en un gráfico acíclico dirigido de trabajos MapReduce , Tez o Spark , que se envían a Hadoop para su ejecución. [25]
Ejemplo
El programa de conteo de palabras cuenta el número de veces que ocurre cada palabra en la entrada. El recuento de palabras se puede escribir en HiveQL como: [4]
DROP TABLE IF EXISTS docs ;CREATE TABLE docs ( línea STRING );CARGA DE DATOS INPATH 'archivo_entrada' SOBRESCRIBIR EN TABLA documentos ;CREAR TABLA recuentos_palabras COMOSELECCIONAR palabra , contar ( 1 ) COMO contar DESDE ( SELECT explotar ( dividir ( línea , '\ s' )) COMO palabra DE docs ) tempGRUPO POR palabraORDENAR POR palabra ;
Una breve explicación de cada una de las declaraciones es la siguiente:
DROP TABLE IF EXISTS docs ;CREATE TABLE docs ( línea STRING );
Comprueba si la tabla docs
existe y la elimina si existe. Crea una nueva tabla llamada docs
con una única columna de tipo STRING
llamada line
.
CARGA DE DATOS INPATH 'archivo_entrada' SOBRESCRIBIR EN TABLA documentos ;
Carga el archivo o directorio especificado (en este caso, "input_file") en la tabla. OVERWRITE
especifica que la tabla de destino en la que se cargan los datos debe volver a escribirse; De lo contrario, se agregarían los datos.
CREAR TABLA recuentos_palabras COMOSELECCIONAR palabra , contar ( 1 ) COMO contar DESDE( SELECT explotar ( dividir ( línea , '\ s' )) COMO palabra DE docs ) tempGRUPO POR palabraORDENAR POR palabra ;
La consulta CREATE TABLE word_counts AS SELECT word, count(1) AS count
crea una tabla llamada word_counts
con dos columnas: word
y count
. Esta consulta obtiene su entrada de la consulta interna . Esta consulta sirve para dividir las palabras de entrada en diferentes filas de una tabla temporal con alias . Los grupos de los resultados en función de sus llaves. Esto da como resultado que la columna contenga el número de ocurrencias de cada palabra de la columna. El ordena las palabras alfabéticamente.(SELECT explode(split(line, '\s')) AS word FROM docs) temp"
temp
GROUP BY WORD
count
word
ORDER BY WORDS
Comparación con bases de datos tradicionales
Las operaciones de almacenamiento y consulta de Hive se parecen mucho a las de las bases de datos tradicionales. Si bien Hive es un dialecto SQL, existen muchas diferencias en la estructura y el funcionamiento de Hive en comparación con las bases de datos relacionales. Las diferencias se deben principalmente a que Hive está construido sobre el ecosistema de Hadoop y tiene que cumplir con las restricciones de Hadoop y MapReduce .
Un esquema se aplica a una tabla en bases de datos tradicionales. En estas bases de datos tradicionales, la tabla normalmente aplica el esquema cuando los datos se cargan en la tabla. Esto permite que la base de datos se asegure de que los datos ingresados sigan la representación de la tabla según lo especificado por la definición de la tabla. Este diseño se denomina esquema al escribir . En comparación, Hive no verifica los datos con el esquema de la tabla al escribir. En su lugar, posteriormente ejecuta verificaciones de tiempo cuando se leen los datos. Este modelo se llama esquema al leer . [22] Los dos enfoques tienen sus propias ventajas e inconvenientes. Verificar los datos con el esquema de la tabla durante el tiempo de carga agrega una sobrecarga adicional, por lo que las bases de datos tradicionales tardan más en cargar los datos. Los controles de calidad se realizan con los datos en el momento de la carga para garantizar que los datos no estén corruptos. La detección temprana de datos corruptos garantiza un manejo temprano de excepciones. Dado que las tablas se ven obligadas a coincidir con el esquema después / durante la carga de datos, tiene un mejor rendimiento en el tiempo de consulta. Hive, por otro lado, puede cargar datos dinámicamente sin ninguna verificación de esquema, lo que garantiza una carga inicial rápida, pero con el inconveniente de un rendimiento comparativamente más lento en el momento de la consulta. Hive tiene una ventaja cuando el esquema no está disponible en el momento de la carga, sino que se genera más tarde de forma dinámica. [22]
Las transacciones son operaciones clave en las bases de datos tradicionales. Como cualquier RDBMS típico , Hive admite las cuatro propiedades de las transacciones ( ACID ): atomicidad , coherencia , aislamiento y durabilidad . Las transacciones en Hive se introdujeron en Hive 0.13 pero solo se limitaron al nivel de partición. [26] La versión reciente de Hive 0.14 tenía estas funciones completamente agregadas para admitir propiedades ACID completas . Hive 0.14 y posterior proporciona diferentes transacciones de nivel de fila como INSERT, DELETE y UPDATE . [27] Habilitación INSERT, UPDATE, DELETE transacciones requieren el establecimiento de los valores apropiados para las propiedades de configuración tales como hive.support.concurrency
, hive.enforce.bucketing
, y hive.exec.dynamic.partition.mode
. [28]
Seguridad
Hive v0.7.0 agregó integración con la seguridad de Hadoop. Hadoop comenzó a utilizar el soporte de autorización de Kerberos para brindar seguridad. Kerberos permite la autenticación mutua entre cliente y servidor. En este sistema, la solicitud del cliente de un ticket se transmite junto con la solicitud. Las versiones anteriores de Hadoop tenían varios problemas, como que los usuarios podían falsificar su nombre de usuario configurando la hadoop.job.ugi
propiedad y también las operaciones MapReduce que se ejecutaban bajo el mismo usuario: hadoop o mapred. Con la integración de Hive v0.7.0 con la seguridad de Hadoop, estos problemas se han solucionado en gran medida. Los trabajos de TaskTracker son ejecutados por el usuario que los inició y el nombre de usuario ya no puede ser falsificado estableciendo la hadoop.job.ugi
propiedad. Los permisos para los archivos recién creados en Hive los dicta HDFS . El modelo de autorización del sistema de archivos distribuido de Hadoop utiliza tres entidades: usuario, grupo y otras con tres permisos: lectura, escritura y ejecución. Los permisos predeterminados para los archivos recién creados se pueden establecer cambiando el valor de umask para la variable de configuración de Hive hive.files.umask.value
. [4]
Ver también
- Cerdo apache
- Sqoop
- Apache Impala
- Taladro Apache
- Apache Flume
- Apache HBase
Referencias
- ^ [1]
- ^ "26 de agosto de 2019: versión 3.1.2 disponible" . Consultado el 28 de agosto de 2019 .
- ^ Venner, Jason (2009). Pro Hadoop . Presione . ISBN 978-1-4302-1942-2.
- ^ a b c Programación de Hive [Libro] .
- ^ Utilice el estudio de caso de Hive / Hadoop
- ^ OSCON Data 2011, Adrian Cockcroft, "Flujo de datos en Netflix" en YouTube
- ^ Guía para desarrolladores de Amazon Elastic MapReduce
- ^ Manual del lenguaje HiveQL
- ^ Apache Tez
- ^ Manual de idioma de Hive
- ^ Lam, Chuck (2010). Hadoop en acción . Publicaciones Manning . ISBN 978-1-935182-19-1.
- ^ Optimización de Hadoop y Big Data con texto y HiveOptimización de Hadoop y Big Data con texto y Hive
- ^ "Manual de idiomas ORC" . Wiki del proyecto Hive . Consultado el 24 de abril de 2017 .
- ^ a b c "Almacén de datos a escala de petabytes de Facebook usando Hive y Hadoop" (PDF) . Archivado desde el original (PDF) el 28 de julio de 2011 . Consultado el 9 de septiembre de 2011 .
- ^ "Parquet" . 18 de diciembre de 2014. Archivado desde el original el 2 de febrero de 2015 . Consultado el 2 de febrero de 2015 .
- ^ Massie, Matt (21 de agosto de 2013). "Un poderoso trío de Big Data: Spark, Parquet y Avro" . zenfractal.com . Archivado desde el original el 2 de febrero de 2015 . Consultado el 2 de febrero de 2015 .
- ^ Franke, Jörn (28 de abril de 2016). "Hive & Bitcoin: análisis de datos de Blockchain con SQL" .
- ^ a b "Diseño - Apache Hive - Apache Software Foundation" . cwiki.apache.org . Consultado el 12 de septiembre de 2016 .
- ^ "Árbol de sintaxis abstracta" . c2.com . Consultado el 12 de septiembre de 2016 .
- ^ a b Dokeroglu, Tansel; Ozal, Serkan; Bayir, Murat Ali; Cinar, Muhammet Serkan; Cosar, Ahmet (29 de julio de 2014). "Mejorando el rendimiento de Hadoop Hive compartiendo tareas de escaneo y computación" . Revista de Computación en la Nube . 3 (1): 1–11. doi : 10.1186 / s13677-014-0012-6 .
- ^ "HiveServer - Apache Hive - Apache Software Foundation" . cwiki.apache.org . Consultado el 12 de septiembre de 2016 .
- ^ a b c Blanco, Tom (2010). Hadoop: la guía definitiva . O'Reilly Media . ISBN 978-1-4493-8973-4.
- ^ Manual de idioma de Hive
- ^ ACID y transacciones en Hive
- ^ "Hive, una solución de almacenamiento sobre un marco MapReduce" (PDF) . Archivado desde el original (PDF) el 8 de octubre de 2013 . Consultado el 3 de septiembre de 2011 .
- ^ "Introducción a las transacciones de Hive" . datametica.com . Archivado desde el original el 3 de septiembre de 2016 . Consultado el 12 de septiembre de 2016 .
- ^ "Transacciones de Hive - Apache Hive - Apache Software Foundation" . cwiki.apache.org . Consultado el 12 de septiembre de 2016 .
- ^ "Propiedades de configuración - Apache Hive - Apache Software Foundation" . cwiki.apache.org . Consultado el 12 de septiembre de 2016 .
enlaces externos
- Página web oficial