Introducció

En aquest projecte, aprendrem a construir una pipeline de dades utilitzant diverses eines de l'ecosistema Hadoop. Una pipeline de dades és un conjunt de processos que permeten moure dades des de diverses fonts fins a un destí final, on es poden analitzar i utilitzar per a la presa de decisions. Aquest projecte ens ajudarà a comprendre com integrar diferents components de l'ecosistema Hadoop per crear una solució completa de processament de dades.

Objectius del Projecte

  1. Ingestió de dades: Utilitzar Apache Sqoop i Apache Flume per importar dades des de bases de dades relacionals i fonts de dades en temps real.
  2. Emmagatzematge de dades: Emmagatzemar les dades importades en HDFS.
  3. Processament de dades: Utilitzar Apache Pig i Apache Hive per processar i transformar les dades.
  4. Orquestració de fluxos de treball: Utilitzar Apache Oozie per gestionar i orquestrar els diferents passos de la pipeline de dades.

Requisits Previs

Abans de començar, assegura't de tenir instal·lats i configurats els següents components de l'ecosistema Hadoop:

  • Hadoop (HDFS, YARN)
  • Apache Sqoop
  • Apache Flume
  • Apache Pig
  • Apache Hive
  • Apache Oozie

Pas 1: Ingestió de Dades

1.1 Utilitzar Apache Sqoop per Importar Dades des d'una Base de Dades Relacional

Apache Sqoop és una eina que permet transferir dades entre bases de dades relacionals i Hadoop. En aquest exemple, importarem dades des d'una base de dades MySQL a HDFS.

Comandament Sqoop per Importar Dades

sqoop import \
--connect jdbc:mysql://localhost:3306/nombredb \
--username usuari \
--password contrasenya \
--table nom_taula \
--target-dir /ruta/a/hdfs/dir \
--num-mappers 1

1.2 Utilitzar Apache Flume per Ingestar Dades en Temps Real

Apache Flume és una eina per a la ingestió de dades en temps real. Configurarem un agent Flume per recollir dades de logs i enviar-les a HDFS.

Configuració de l'Agent Flume

Crea un fitxer de configuració per a l'agent Flume (per exemple, flume.conf):

agent.sources = src
agent.sinks = sink
agent.channels = ch

agent.sources.src.type = exec
agent.sources.src.command = tail -F /ruta/a/log/file.log

agent.sinks.sink.type = hdfs
agent.sinks.sink.hdfs.path = hdfs://ruta/a/hdfs/dir
agent.sinks.sink.hdfs.fileType = DataStream

agent.channels.ch.type = memory
agent.channels.ch.capacity = 1000
agent.channels.ch.transactionCapacity = 100

agent.sources.src.channels = ch
agent.sinks.sink.channel = ch

Inicia l'agent Flume:

flume-ng agent --conf ./conf --name agent --conf-file flume.conf -Dflume.root.logger=INFO,console

Pas 2: Emmagatzematge de Dades en HDFS

Les dades importades amb Sqoop i Flume es troben ara emmagatzemades en HDFS. Podem verificar-ho utilitzant les comandes de HDFS:

hdfs dfs -ls /ruta/a/hdfs/dir

Pas 3: Processament de Dades

3.1 Utilitzar Apache Pig per Processar Dades

Apache Pig és una plataforma per a l'anàlisi de grans conjunts de dades. Utilitzarem Pig per processar les dades emmagatzemades en HDFS.

Script Pig

Crea un fitxer de script Pig (per exemple, processar_dades.pig):

data = LOAD '/ruta/a/hdfs/dir' USING PigStorage(',') AS (camp1:chararray, camp2:int, camp3:float);
filtered_data = FILTER data BY camp2 > 100;
grouped_data = GROUP filtered_data BY camp1;
result = FOREACH grouped_data GENERATE group, COUNT(filtered_data);
STORE result INTO '/ruta/a/hdfs/output' USING PigStorage(',');

Executa l'script Pig:

pig -x mapreduce processar_dades.pig

3.2 Utilitzar Apache Hive per Analitzar Dades

Apache Hive és una eina de data warehousing que permet fer consultes SQL sobre dades emmagatzemades en HDFS.

Crear una Taula Hive

CREATE EXTERNAL TABLE dades (
  camp1 STRING,
  camp2 INT,
  camp3 FLOAT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/ruta/a/hdfs/dir';

Executar una Consulta Hive

SELECT camp1, COUNT(*) FROM dades WHERE camp2 > 100 GROUP BY camp1;

Pas 4: Orquestració de Fluxos de Treball amb Apache Oozie

Apache Oozie és un sistema d'orquestració de fluxos de treball per a Hadoop. Crearem un flux de treball Oozie per automatitzar els passos anteriors.

4.1 Definir el Flux de Treball Oozie

Crea un fitxer XML per al flux de treball Oozie (per exemple, 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:3306/nombredb --username usuari --password contrasenya --table nom_taula --target-dir /ruta/a/hdfs/dir --num-mappers 1</command>
        </sqoop>
        <ok to="flume-node"/>
        <error to="fail"/>
    </action>
    
    <action name="flume-node">
        <shell xmlns="uri:oozie:shell-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <exec>flume-ng</exec>
            <argument>agent</argument>
            <argument>--conf</argument>
            <argument>./conf</argument>
            <argument>--name</argument>
            <argument>agent</argument>
            <argument>--conf-file</argument>
            <argument>flume.conf</argument>
            <argument>-Dflume.root.logger=INFO,console</argument>
        </shell>
        <ok to="pig-node"/>
        <error to="fail"/>
    </action>
    
    <action name="pig-node">
        <pig xmlns="uri:oozie:pig-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <script>processar_dades.pig</script>
        </pig>
        <ok to="hive-node"/>
        <error to="fail"/>
    </action>
    
    <action name="hive-node">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <script>consulta_hive.sql</script>
        </hive>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    
    <kill name="fail">
        <message>Workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    
    <end name="end"/>
</workflow-app>

4.2 Executar el Flux de Treball Oozie

Carrega el flux de treball a HDFS:

hdfs dfs -put workflow.xml /ruta/a/oozie/workflow.xml

Executa el flux de treball:

oozie job -oozie http://localhost:11000/oozie -config job.properties -run

Conclusió

En aquest projecte, hem construït una pipeline de dades completa utilitzant diverses eines de l'ecosistema Hadoop. Hem après a ingestir dades des de diferents fonts, emmagatzemar-les en HDFS, processar-les amb Apache Pig i Apache Hive, i orquestrar el flux de treball amb Apache Oozie. Aquest projecte ens proporciona una base sòlida per a la creació de solucions de processament de dades a gran escala amb Hadoop.

© Copyright 2024. Tots els drets reservats