stringtranslate.com

Colmena Apache

Apache Hive es un proyecto de software de almacenamiento de datos . Está construido sobre Apache Hadoop para proporcionar consultas y análisis de datos. [3] [4] 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 la API de Java de MapReduce 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. Hive facilita la integración de lenguajes de consulta basados ​​en SQL con Hadoop, que se utiliza comúnmente en aplicaciones de almacenamiento de datos. [5] Aunque inicialmente fue desarrollado por Facebook , Apache Hive es utilizado y desarrollado por otras empresas como Netflix y la Autoridad Reguladora de la Industria Financiera (FINRA). [6] [7] Amazon mantiene una bifurcación de software de Apache Hive incluida en Amazon Elastic MapReduce en Amazon Web Services . [8]

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 [9] con esquema en lectura y convierte de forma transparente las consultas en trabajos de MapReduce , Apache Tez [10] 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 [11]. Otras características de Hive incluyen:

De forma predeterminada, Hive almacena metadatos en una base de datos Apache Derby incorporada , y opcionalmente se pueden utilizar otras bases de datos cliente/servidor como MySQL . [12]

Los primeros cuatro formatos de archivo admitidos en Hive fueron texto simple, [13] archivo de secuencia, formato de fila columnar optimizado (ORC) [14] [15] y RCFile . [16] [17] Apache Parquet se puede leer a través de un complemento en versiones posteriores a la 0.10 y de forma nativa a partir de la 0.13. [18] [19]

Arquitectura

Los componentes principales de la arquitectura de Hive son:

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 múltiples tablas, y crea tablas como select . HiveQL carecía de soporte para transacciones y vistas materializadas , y solo tenía un soporte limitado para subconsultas. [25] [26] El soporte para insertar, actualizar y eliminar con funcionalidad ACID completa se puso a disposición con la versión 0.14. [27]

Internamente, un compilador traduce las declaraciones de HiveQL en un gráfico acíclico dirigido de trabajos de MapReduce , Tez o Spark , que se envían a Hadoop para su ejecución. [28]

Ejemplo

El programa de conteo de palabras cuenta la cantidad de veces que aparece cada palabra en la entrada. El conteo de palabras se puede escribir en HiveQL como: [5]

Eliminar tabla si existe docs ;    CREAR TABLA docs ( linea CADENA );    CARGAR DATOS ENTRADA 'input_file' SOBRESCRIBIR EN LA TABLA docs ;       CREAR TABLA word_counts COMO   SELECCIONAR palabra , contar ( 1 ) COMO contar DESDE      ( SELECT explotar ( dividir ( línea , '\s' )) COMO palabra DE docs ) temp       AGRUPAR POR palabra  ORDENAR POR palabra ;  

A continuación se presenta una breve explicación de cada una de las afirmaciones:

Eliminar tabla si existe docs ;    CREAR TABLA docs ( linea CADENA );    

Comprueba si la tabla docsexiste y la elimina si es así. Crea una nueva tabla llamada docscon una sola columna de tipo STRINGdenominada line.

CARGAR DATOS ENTRADA 'input_file' SOBRESCRIBIR EN LA TABLA docs ;       

Carga el archivo o directorio especificado (en este caso, “input_file”) en la tabla. OVERWRITEespecifica que la tabla de destino en la que se están cargando los datos debe reescribirse; de ​​lo contrario, se agregarán los datos.

CREAR TABLA word_counts COMO   SELECCIONAR palabra , contar ( 1 ) COMO contar DESDE     ( SELECT explotar ( dividir ( línea , '\s' )) COMO palabra DE docs ) temp       AGRUPAR POR palabra  ORDENAR POR palabra ;  

La consulta CREATE TABLE word_counts AS SELECT word, count(1) AS countcrea una tabla llamada word_countscon dos columnas: wordy 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 el alias . La consulta agrupa los resultados en función de sus claves. Esto da como resultado que la columna contenga la cantidad de ocurrencias de cada palabra de la columna. La consulta ordena las palabras alfabéticamente.(SELECT explode(split(line, '\s')) AS word FROM docs) temp"tempGROUP BY WORDcountwordORDER 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 Hadoop y debe cumplir con las restricciones de Hadoop y MapReduce .

En las bases de datos tradicionales, se aplica un esquema a una tabla. En estas bases de datos tradicionales, la tabla normalmente aplica el esquema cuando se cargan los datos en ella. Esto permite que la base de datos se asegure de que los datos ingresados ​​sigan la representación de la tabla tal como se especifica en 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 cambio, posteriormente realiza verificaciones en tiempo de ejecución cuando se leen los datos. Este modelo se denomina esquema al leer . [25] Los dos enfoques tienen sus propias ventajas y desventajas.

La comprobación de los datos con el esquema de la tabla durante el tiempo de carga añade una sobrecarga adicional, por lo que las bases de datos tradicionales tardan más tiempo en cargar los datos. Se realizan comprobaciones de calidad de los datos en el momento de la carga para garantizar que no estén corruptos. La detección temprana de datos corruptos garantiza un manejo temprano de las excepciones. Dado que las tablas se ven obligadas a coincidir con el esquema después o durante la carga de los datos, tiene un mejor rendimiento en el momento de la consulta. Hive, por otro lado, puede cargar datos de forma dinámica sin ninguna comprobación del 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. [25]

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 , consistencia , aislamiento y durabilidad . Las transacciones en Hive se introdujeron en Hive 0.13, pero solo se limitaron al nivel de partición. [29] La versión reciente de Hive 0.14 tenía estas funciones completamente agregadas para admitir propiedades ACID completas . Hive 0.14 y posteriores proporcionan diferentes transacciones de nivel de fila, como INSERT, DELETE y UPDATE . [30] Para habilitar las transacciones INSERT, UPDATE y DELETE es necesario configurar los valores apropiados para las propiedades de configuración, como hive.support.concurrency, hive.enforce.bucketingy hive.exec.dynamic.partition.mode. [31]

Seguridad

Hive v0.7.0 agregó integración con la seguridad de Hadoop. Hadoop comenzó a usar soporte de autorización Kerberos para brindar seguridad. Kerberos permite la autenticación mutua entre el cliente y el servidor. En este sistema, la solicitud del cliente para 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.ugipropiedad y también que las operaciones de MapReduce 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 se puede falsificar configurando la hadoop.job.ugipropiedad. Los permisos para los archivos recién creados en Hive están dictados por HDFS . El modelo de autorización del sistema de archivos distribuido de Hadoop usa tres entidades: usuario, grupo y otros con tres permisos: lectura, escritura y ejecución. Los permisos predeterminados para los archivos recién creados se pueden configurar cambiando el valor de desenmascaramiento de la variable de configuración de Hive hive.files.umask.value. [5]

Véase también

Referencias

  1. ^ "Versión release-1.0.0 · apache/Hive". GitHub .
  2. ^ ab "Apache Hive - Descargas" . Consultado el 21 de noviembre de 2022 .
  3. ^ Venner, Jason (2009). Pro Hadoop . Presione . ISBN 978-1-4302-1942-2.
  4. ^ Yin Huai, Ashutosh Chauhan, Alan Gates, Gunther Hagleitner, Eric N. Hanson, Owen O'Malley, Jitendra Pandey, Yuan Yuan, Rubao Lee y Xiaodong Zhang (2014). "Principales avances técnicos en Apache Hive" . SIGMOD' 14. págs. 1235–1246. doi :10.1145/2588555.2595630.{{cite conference}}: CS1 maint: multiple names: authors list (link)
  5. ^ abc Programación Hive [Libro].
  6. ^ Estudio de caso de uso de Hive/Hadoop
  7. ^ Datos OSCON 2011, Adrian Cockcroft, "Flujo de datos en Netflix" en YouTube
  8. ^ Guía para desarrolladores de Amazon Elastic MapReduce
  9. ^ Manual del lenguaje HiveQL
  10. ^ Apache Tez
  11. ^ Manual del lenguaje de Hive
  12. ^ Lam, Chuck (2010). Hadoop en acción . Publicaciones Manning . ISBN. 978-1-935182-19-1.
  13. ^ "Optimización de Hadoop y Big Data con Text y HiveOptimización de Hadoop y Big Data con Text y Hive". Archivado desde el original el 15 de noviembre de 2014. Consultado el 16 de noviembre de 2014 .
  14. ^ "Manual del lenguaje ORC". Wiki del proyecto Hive . Consultado el 24 de abril de 2017 .
  15. ^ Yin Huai, Siyuan Ma, Rubao Lee, Owen O'Malley y Xiaodong Zhang (2013). "Comprensión de los conocimientos sobre la estructura básica y las cuestiones esenciales de los métodos de colocación de tablas en clústeres" . VLDB' 39. págs. 1750–1761. CiteSeerX 10.1.1.406.4342 . doi :10.14778/2556549.2556559. {{cite conference}}: CS1 maint: multiple names: authors list (link)
  16. ^ abc "Almacén de datos a escala de petabytes de Facebook con Hive y Hadoop" (PDF) . Archivado desde el original (PDF) el 28 de julio de 2011 . Consultado el 9 de septiembre de 2011 .
  17. ^ Yongqiang He, Rubao Lee, Yin Huai, Zheng Shao, Namit Jain, Xiaodong Zhang y Zhiwei Xu (2011). "RCFile: una estructura de ubicación de datos rápida y eficiente en términos de espacio en sistemas de almacenamiento basados ​​en MapReduce". 27.ª Conferencia internacional sobre ingeniería de datos del IEEE.{{cite conference}}: CS1 maint: multiple names: authors list (link)
  18. ^ "Parquet". 18 de diciembre de 2014. Archivado desde el original el 2 de febrero de 2015 . Consultado el 2 de febrero de 2015 .
  19. ^ Massie, Matt (21 de agosto de 2013). "Un trío poderoso 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 .
  20. ^ ab "Diseño - Apache Hive - Apache Software Foundation". cwiki.apache.org . Consultado el 12 de septiembre de 2016 .
  21. ^ "Árbol de sintaxis abstracta". c2.com . Consultado el 12 de septiembre de 2016 .
  22. ^ ab Dokeroglu, Tansel; Ozal, Serkan; Bayir, Murat Ali; Cinar, Muhammet Serkan; Cosar, Ahmet (29 de julio de 2014). "Mejora del rendimiento de Hadoop Hive compartiendo tareas de escaneo y cálculo". Journal of Cloud Computing . 3 (1): 1–11. doi : 10.1186/s13677-014-0012-6 .
  23. ^ Rubao Lee, Tian Luo, Yin Huai, Fusheng Wang, Yongqiang He y Xiaodong Zhang (2011). "YSmart: otro traductor de SQL a MapReduce". 31.ª Conferencia internacional sobre sistemas informáticos distribuidos. págs. 25–36.{{cite conference}}: CS1 maint: multiple names: authors list (link)
  24. ^ "HiveServer - Apache Hive - Apache Software Foundation". cwiki.apache.org . Consultado el 12 de septiembre de 2016 .
  25. ^ abc White, Tom (2010). Hadoop: la guía definitiva . O'Reilly Media . ISBN. 978-1-4493-8973-4.
  26. ^ Manual del lenguaje de Hive
  27. ^ ACID y transacciones en Hive
  28. ^ "Hive: una solución de almacenamiento en un marco de trabajo MapReduce" (PDF) . Archivado desde el original (PDF) el 2013-10-08 . Consultado el 2011-09-03 .
  29. ^ "Introducción a las transacciones de Hive". datametica.com . Archivado desde el original el 2016-09-03 . Consultado el 2016-09-12 .
  30. ^ "Transacciones de Hive - Apache Hive - Apache Software Foundation". cwiki.apache.org . Consultado el 12 de septiembre de 2016 .
  31. ^ "Propiedades de configuración - Apache Hive - Apache Software Foundation". cwiki.apache.org . Consultado el 12 de septiembre de 2016 .

Enlaces externos