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
- 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.
- Emmagatzematge de dades: Emmagatzemar les dades importades en HDFS.
- Processament de dades: Utilitzar Apache Pig i Apache Hive per processar i transformar les dades.
- 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:
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:
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:
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
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:
Executa el flux de treball:
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.
Curs de Hadoop
Mòdul 1: Introducció a Hadoop
- Què és Hadoop?
- Visió general de l'ecosistema Hadoop
- Hadoop vs Bases de dades tradicionals
- Configuració de l'entorn Hadoop
Mòdul 2: Arquitectura de Hadoop
- Components bàsics de Hadoop
- HDFS (Sistema de fitxers distribuït de Hadoop)
- Marc MapReduce
- YARN (Yet Another Resource Negotiator)
Mòdul 3: HDFS (Sistema de fitxers distribuït de Hadoop)
Mòdul 4: Programació MapReduce
- Introducció a MapReduce
- Flux de treball d'una feina MapReduce
- Escriure un programa MapReduce
- Tècniques d'optimització de MapReduce
Mòdul 5: Eines de l'ecosistema Hadoop
Mòdul 6: Conceptes avançats de Hadoop
- Seguretat de Hadoop
- Gestió de clústers de Hadoop
- Ajust de rendiment de Hadoop
- Serialització de dades de Hadoop
Mòdul 7: Aplicacions reals i estudis de cas
- Hadoop en emmagatzematge de dades
- Hadoop en aprenentatge automàtic
- Hadoop en processament de dades en temps real
- Estudis de cas d'implementacions de Hadoop