En este proyecto, aprenderás a construir una canalización de datos utilizando varias herramientas del ecosistema Hadoop. Este proyecto te permitirá aplicar los conocimientos adquiridos en los módulos anteriores y te proporcionará una experiencia práctica en la gestión y procesamiento de grandes volúmenes de datos.

Objetivos del Proyecto

  1. Ingesta de Datos: Utilizar Apache Flume y Apache Sqoop para la ingesta de datos.
  2. Almacenamiento de Datos: Almacenar los datos en HDFS.
  3. Procesamiento de Datos: Procesar los datos utilizando Apache Pig y Apache Hive.
  4. Orquestación de Tareas: Automatizar el flujo de trabajo utilizando Apache Oozie.

Requisitos Previos

Antes de comenzar este proyecto, asegúrate de tener:

  • Un clúster Hadoop configurado.
  • Conocimientos básicos de HDFS, MapReduce, Apache Pig, Apache Hive, Apache Sqoop, Apache Flume y Apache Oozie.

Paso 1: Ingesta de Datos

1.1 Usando Apache Flume

Apache Flume es una herramienta para la ingesta de datos en tiempo real. En este paso, configuraremos Flume para capturar datos de un servidor web y almacenarlos en HDFS.

Configuración de Flume

  1. Instala Apache Flume en tu clúster Hadoop.
  2. Crea un archivo de configuración de Flume (flume.conf):
# Define the source, channel, and sink
agent.sources = r1
agent.channels = c1
agent.sinks = k1

# Configure the source
agent.sources.r1.type = exec
agent.sources.r1.command = tail -F /var/log/apache2/access.log

# Configure the channel
agent.channels.c1.type = memory
agent.channels.c1.capacity = 1000
agent.channels.c1.transactionCapacity = 100

# Configure the sink
agent.sinks.k1.type = hdfs
agent.sinks.k1.hdfs.path = hdfs://namenode:8020/user/flume/logs/
agent.sinks.k1.hdfs.fileType = DataStream
agent.sinks.k1.hdfs.writeFormat = Text
agent.sinks.k1.hdfs.batchSize = 1000
agent.sinks.k1.hdfs.rollSize = 0
agent.sinks.k1.hdfs.rollCount = 10000

# Bind the source and sink to the channel
agent.sources.r1.channels = c1
agent.sinks.k1.channel = c1
  1. Ejecuta Flume con la configuración:
flume-ng agent --conf ./conf --conf-file flume.conf --name agent -Dflume.root.logger=INFO,console

1.2 Usando Apache Sqoop

Apache Sqoop se utiliza para transferir datos entre Hadoop y bases de datos relacionales. En este paso, importaremos datos desde una base de datos MySQL a HDFS.

Importación de Datos con Sqoop

  1. Instala Apache Sqoop en tu clúster Hadoop.
  2. Ejecuta el siguiente comando para importar datos desde MySQL a HDFS:
sqoop import --connect jdbc:mysql://localhost/dbname --username root --password password --table tablename --target-dir /user/hadoop/sqoop_import

Paso 2: Almacenamiento de Datos en HDFS

Una vez que los datos han sido ingeridos, se almacenan en HDFS. Asegúrate de que los datos están correctamente almacenados en las rutas especificadas.

hdfs dfs -ls /user/flume/logs/
hdfs dfs -ls /user/hadoop/sqoop_import/

Paso 3: Procesamiento de Datos

3.1 Usando Apache Pig

Apache Pig es una plataforma de alto nivel para crear programas MapReduce. Utilizaremos Pig para procesar los datos almacenados en HDFS.

Script de Pig

  1. Crea un script de Pig (process_data.pig):
-- Cargar datos desde HDFS
logs = LOAD '/user/flume/logs/' USING TextLoader() AS (line:chararray);

-- Procesar datos
filtered_logs = FILTER logs BY (line MATCHES '.*GET.*');

-- Almacenar resultados en HDFS
STORE filtered_logs INTO '/user/hadoop/processed_logs/' USING PigStorage();
  1. Ejecuta el script de Pig:
pig -x mapreduce process_data.pig

3.2 Usando Apache Hive

Apache Hive es un sistema de data warehousing que facilita la consulta y el análisis de grandes conjuntos de datos almacenados en HDFS.

Creación de Tabla y Consulta en Hive

  1. Crea una tabla en Hive:
CREATE TABLE logs (line STRING) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
STORED AS TEXTFILE 
LOCATION '/user/flume/logs/';
  1. Ejecuta una consulta en Hive:
SELECT * FROM logs WHERE line LIKE '%GET%';

Paso 4: Orquestación de Tareas con Apache Oozie

Apache Oozie es un sistema de orquestación de flujos de trabajo que permite la definición y ejecución de flujos de trabajo complejos.

Configuración de Oozie

  1. Crea un archivo de flujo de trabajo (workflow.xml):
<workflow-app name="data-pipeline" xmlns="uri:oozie:workflow:0.5">
    <start to="sqoop-node"/>
    
    <action name="sqoop-node">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <command>import --connect jdbc:mysql://localhost/dbname --username root --password password --table tablename --target-dir /user/hadoop/sqoop_import</command>
        </sqoop>
        <ok to="pig-node"/>
        <error to="kill"/>
    </action>
    
    <action name="pig-node">
        <pig xmlns="uri:oozie:pig-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <script>process_data.pig</script>
        </pig>
        <ok to="end"/>
        <error to="kill"/>
    </action>
    
    <kill name="kill">
        <message>Workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    
    <end name="end"/>
</workflow-app>
  1. Ejecuta el flujo de trabajo:
oozie job -oozie http://localhost:11000/oozie -config job.properties -run

Conclusión

En este proyecto, has aprendido a construir una canalización de datos completa utilizando varias herramientas del ecosistema Hadoop. Has cubierto la ingesta de datos con Apache Flume y Apache Sqoop, el almacenamiento de datos en HDFS, el procesamiento de datos con Apache Pig y Apache Hive, y la orquestación de tareas con Apache Oozie. Este proyecto te proporciona una base sólida para construir y gestionar canalizaciones de datos complejas en un entorno Hadoop.

Resumen de Conceptos Clave

  • Apache Flume: Ingesta de datos en tiempo real.
  • Apache Sqoop: Transferencia de datos entre Hadoop y bases de datos relacionales.
  • HDFS: Almacenamiento distribuido de datos.
  • Apache Pig: Procesamiento de datos de alto nivel.
  • Apache Hive: Consulta y análisis de datos.
  • Apache Oozie: Orquestación de flujos de trabajo.

Próximos Pasos

  • Experimenta con diferentes fuentes de datos y tipos de procesamiento.
  • Optimiza el rendimiento de tu canalización de datos.
  • Explora otras herramientas del ecosistema Hadoop para ampliar tus capacidades.
© Copyright 2024. Todos los derechos reservados