Arquitectura de Hadoop y Pipeline de Ingesta de Datos hacia Hive

Componentes Fundamentales del Ecosistema

Sistema de Archivos Distribuido (HDFS)

El núcleo de almacenamiento en Hadoop se basa en una topología centralizada para la metadata y distribuida para los datos. En este modelo, el Namenode actúa como la autoridad central, gestionando el espacio de nombres del sistema de archivos y regulando el acceso de los clientes. Por otro lado, los Datanodes suelen desplegarse uno por cada nodo físico en el clúster, encargándose del almacenamiento real de los bloques de datos en sus discos locales.

Para el usuario, el sistema se presenta como un sistema de archivos jerárquico estándar. Internamente, los archivos se fragmentan en bloques que se replican a través de múltiples Datanodes para garantizar la tolerancia a fallos. El Namenode gestiona operaciones metabólicas como la apertura, cierre o renombrado de directorios y archivos, además de mantener el mapa de ubicación de los bloques. Los Datanode atienden las solicitudes de lectura y escritura, ejecutando la creación, eliminación y replicación de bloques bajo la coordinación del Namenode.

Gestor de Recursos (YARN)

YARN desacopla la gestión de recursos de la ejecución de tareas, dividiéndose principalmente en dos componentes:

  • ResourceManager: Funciona como el planificador global del clúster. Centraliza la asignación de recursos computacionales, atendiendo solicitudes de diversas aplicaciones. Además, supervisa la salud del clúster y gestiona la recuperación ante fallos para mantener la estabilidad del servicio.
  • NodeManager: Se ejecuta en cada nodo trabajador. Su función es abstraer los recursos locales (CPU, memoria) y reportarlos al ResourceManager. Gestiona el ciclo de vida de los contenedores, ejecuta las tareas asignadas y monitorea el consumo de recursos en su nodo específico.

Estrategias de Sincronización: MySQL hacia Hive

Una práctica común en ingeniería de datos consiste en replicar información transaccional desde bases de datos relacionales hacia almacenes de datos distribuidos. Un patrón frecuente implica capturar los logs de binlog de MySQL (utilizando herramientas como Canal) para transformarlos en datos estructurados que se fusionan en Hive, permitiendo posteriormente análisis con motores como Spark.

A continuación, se ilustran operaciones básicas de manipulación de datos en Hive y la importación directa mediante Sqoop.

Operaciones en la CLI de Hive

El siguiente ejemplo demuestra la creación de una tabla externa, la carga de datos desde el sistema de archivos local y la verificación del contenido. Se ha simplificado la salida para mostrar únicamente los resultados relevantes.

hive> create table clientes (id_cliente int, nombre_completo string) 
      ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
OK
Time taken: 0.412 seconds

hive> show tables;
OK
clientes
Time taken: 0.015 seconds

hive> load data local inpath '/tmp/carga/inicial.csv' into table clientes;
Loading data to table default.clientes
OK
Time taken: 0.621 seconds

hive> select * from clientes;
OK
101     Ana Garcia
102     Luis Perez
103     Carlos Ruiz
Time taken: 0.098 seconds, Fetched: 3 row(s)

Manipulación de Archivos en HDFS

Es posible interactuar directamente con el almacenamiento subyacente. Al subir archivos manualmente al directorio warehouse de Hive, es necesario considerar cómo se reflejan en las tablas gestionadas.

$ hdfs dfs -put /tmp/carga/adicional.csv /user/hive/warehouse/clientes/
$ hdfs dfs -ls /user/hive/warehouse/clientes/
Found 2 items
-rwxr-xr-x   1 user supergroup  1024  inicial.csv
-rwxr-xr-x   1 user supergroup  512   adicional.csv

hive> select * from clientes;
OK
101     Ana Garcia
102     Luis Perez
103     Carlos Ruiz
NULL    NULL
Time taken: 0.750 seconds, Fetched: 4 row(s)

Nota: La carga directa vía HDFS sin comando LOAD DATA puede resultar en lecturas inconsistentes dependiendo de la configuración de la tabla y el motor de ejecución.

Importación Masiva con Sqoop

Para automatizar la ingesta desde MySQL, Sqoop permite definir conexiones directas que importan los datos y los registran como tablas en Hive. El siguiente script configura la conexión, define el separador de campos y establece la política de sobrescritura.

./sqoop import \
--connect jdbc:mysql://172.16.0.10:3306/ventas_db \
--username admin_db \
--password secret_pass \
--table ordenes_venta \
--num-mappers 4 \
--hive-import \
--fields-terminated-by '\t' \
--overwrite-hive \
--hive-database analytics \
--hive-table ordenes_venta

Este comando transfiere los datos de la tabla relacional ordenes_venta hacia el entorno de Hive, asegurando que la tabla destino se sobrescriba en cada ejecución para mantener la consistencia con el origen.

Etiquetas: Hadoop HDFS YARN apache-hive apache-sqoop

Publicado el 10-23 16:57