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]
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]
Los componentes principales de la arquitectura de Hive son:
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]
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 docs
existe y la elimina si es así. Crea una nueva tabla llamada docs
con una sola columna de tipo STRING
denominada 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. OVERWRITE
especifica 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 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 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"
temp
GROUP BY WORD
count
word
ORDER BY WORDS
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.bucketing
y hive.exec.dynamic.partition.mode
. [31]
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.ugi
propiedad 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.ugi
propiedad. 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]
{{cite conference}}
: CS1 maint: multiple names: authors list (link){{cite conference}}
: CS1 maint: multiple names: authors list (link){{cite conference}}
: CS1 maint: multiple names: authors list (link){{cite conference}}
: CS1 maint: multiple names: authors list (link)