Particionamiento y agrupamiento en Hive

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Visión general

  • Comprenda el significado de particionar y agrupar en Hive en detalle.
  • Veremos, cómo crear particiones y cubos en el Hive.

Introducción

Es posible que haya visto una enciclopedia en la biblioteca de su escuela o universidad. Es un conjunto de libros que te darán información sobre casi cualquier cosa. ¿Sabes qué es lo mejor de la enciclopedia?

partitioning-vs-bucketing-in-apache-hive-2850988

Sí, lo adivinaste correctamente. Las palabras están ordenadas alfabéticamente. Por ejemplo, tiene una palabra en mente «Pirámides». Irás directamente a recoger el libro con el título “P”. No tiene que buscar eso en otros libros. ¿Te imaginas lo difícil que sería la tarea de buscar un solo libro si estuvieran almacenados sin ningún orden?

Aquí, almacenar las palabras alfabéticamente representa la indexación, pero el uso de una ubicación diferente para las palabras que comienzan con el mismo carácter se conoce como agrupamiento.

Hay tipos similares de técnicas de almacenamiento, como particiones y agrupaciones, en Apache Hive para que podamos obtener resultados más rápidos para las consultas de búsqueda. En este artículo, veremos qué es la partición y el agrupamiento, y cuándo usar cuál.

Tabla de contenido

  1. ¿Qué es el particionamiento?
  2. ¿Cuándo utilizar el particionamiento?
  3. ¿Qué es el agrupamiento?
  4. ¿Cuándo usar el agrupamiento?

¿Qué es el particionamiento?

Apache Hive nos permite organizar la tabla en múltiples particiones donde podemos agrupar el mismo tipo de datos. Se utiliza para distribuir la carga horizontalmente. Entendamos con un ejemplo:

Supongamos que tenemos que crear una tabla en la colmena que contiene los detalles del producto para una empresa de comercio electrónico de moda. Tiene las siguientes columnas:

screenshot-from-2020-11-03-02-39-29-4664491

Ahora, el primer filtro que usa la mayoría de los clientes es Género, luego seleccionan categorías como Camisa, su tamaño y color. Veamos cómo crear las particiones para este ejemplo.

CREATE TABLE products ( product_id string,
                        brand      string,
                        size       string,
                        discount   float,
                        price      float )
PARTITIONED BY (gender string,
                category string,
                color string);

Ahora, la colmena almacenará los datos en la estructura del directorio como:

/user/hive/warehouse/mytable/gender=male/category=shoes/color=black

screenshot-from-2020-11-11-14-45-38-9488485

La partición de los datos nos brinda beneficios de rendimiento y también nos ayuda a organizar los datos. Ahora, veamos cuándo usar la partición en la colmena.

¿Cuándo utilizar el particionamiento?

  • Cuando la columna con una consulta de búsqueda alta tiene una cardinalidad baja. Por ejemplo, si crea una partición con el nombre del país, se creará un máximo de 195 particiones y la colmena podrá administrar esta cantidad de directorios.
  • Por otro lado, no cree particiones en las columnas con cardinalidad muy alta. Por ejemplo, ID de producto, marca de tiempo y precio porque creará millones de directorios que serán imposibles de administrar para la colmena.
  • Es efectivo cuando el volumen de datos en cada partición no es muy alto. Por ejemplo, si tiene los datos de la aerolínea y desea calcular el número total de vuelos en un día. En ese caso, el resultado tomará más tiempo para calcular sobre la partición «Dubai», ya que tiene uno de los aeropuertos más activos del mundo, mientras que para un país como «Albania» devolverá los resultados más rápido.

¿Qué es el agrupamiento?

En el ejemplo anterior, sabemos que no podemos crear una partición sobre el precio de la columna porque su tipo de datos es flotante y hay un número infinito de precios únicos posibles.

Hive tendrá que generar un directorio separado para cada uno de los precios únicos y sería muy difícil para Hive administrarlos. En lugar de esto, podemos definir manualmente el número de depósitos que queremos para dichas columnas.

screenshot-from-2020-11-11-14-41-05-3002838

En el agrupamiento, las particiones se pueden subdividir en grupos según la función hash de una columna. Proporciona una estructura adicional a los datos que se pueden utilizar para consultas más eficientes.

CREATE TABLE products ( product_id string,
                        brand string,
                        size string,
                        discount float,
                        price float )
PARTITIONED BY (gender string,
                category string,
                color string)
CLUSTERED BY (price) INTO 50 BUCKETS;

Ahora, solo se crearán 50 depósitos sin importar cuántos valores únicos haya en la columna de precios. Por ejemplo, en el primer cubo, todos los productos con un precio [ 0 – 500 ] irán, y en el próximo grupo de productos con un precio [ 500 – 200 ] etcétera.

¿Cuándo usar el agrupamiento?

  • No podemos dividir en una columna con una cardinalidad muy alta. Demasiadas particiones darán como resultado varios archivos Hadoop, lo que aumentará la carga en el mismo nodo, ya que tiene que transportar los metadatos de cada una de las particiones.
  • Si algunas combinaciones del lado del mapa están involucradas en sus consultas, las tablas agrupadas son una buena opción. La unión del lado del mapa es un proceso en el que dos tablas se unen utilizando la función de mapa solo sin ninguna función reducida. Le recomiendo que lea este artículo para comprender mejor las combinaciones del lado del mapa: El lado del mapa se une en Hive

Notas finales

En este artículo, hemos visto qué es la partición y el agrupamiento, cómo crearlos y cuáles son sus pros y sus contras.

Le recomiendo encarecidamente que consulte los siguientes recursos para obtener más información sobre Apache Hive:

Si tiene alguna pregunta relacionada con este artículo, hágamelo saber en la sección de comentarios a continuación.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.