Magia de Datos de Xara

HadoopHadoopBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En el mágico reino del desierto de Xara, el sabio y benevolente Rey Amir buscó aprovechar el poder de los vastos recursos de datos dispersos por su reino. Él convocó a sus más habilidosos magos de datos para idear un sistema que pudiera recopilar, procesar y analizar los datos del reino, desbloqueando conocimientos para ayudar en la toma de decisiones y la prosperidad para todos.

El objetivo era crear una plataforma de datos robusta y escalable que pudiera integrarse con el Hadoop Distributed File System (HDFS) y aprovechar el poder de MapReduce para un procesamiento de datos eficiente. Esta plataforma permitiría al reino analizar datos de diversas fuentes, como registros comerciales, rendimientos agrícolas e información censal, permitiendo al Rey Amir tomar decisiones informadas para el bienestar de sus súbditos.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHDFSGroup(["Hadoop HDFS"]) hadoop(("Hadoop")) -.-> hadoop/HadoopMapReduceGroup(["Hadoop MapReduce"]) hadoop(("Hadoop")) -.-> hadoop/HadoopYARNGroup(["Hadoop YARN"]) hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHDFSGroup -.-> hadoop/hdfs_setup("HDFS Setup") hadoop/HadoopHDFSGroup -.-> hadoop/fs_ls("FS Shell ls") hadoop/HadoopHDFSGroup -.-> hadoop/fs_mkdir("FS Shell mkdir") hadoop/HadoopHDFSGroup -.-> hadoop/fs_put("FS Shell copyToLocal/put") hadoop/HadoopMapReduceGroup -.-> hadoop/mappers_reducers("Coding Mappers and Reducers") hadoop/HadoopYARNGroup -.-> hadoop/yarn_jar("Yarn Commands jar") hadoop/HadoopHiveGroup -.-> hadoop/process("Process Control Function") subgraph Lab Skills hadoop/hdfs_setup -.-> lab-288981{{"Magia de Datos de Xara"}} hadoop/fs_ls -.-> lab-288981{{"Magia de Datos de Xara"}} hadoop/fs_mkdir -.-> lab-288981{{"Magia de Datos de Xara"}} hadoop/fs_put -.-> lab-288981{{"Magia de Datos de Xara"}} hadoop/mappers_reducers -.-> lab-288981{{"Magia de Datos de Xara"}} hadoop/yarn_jar -.-> lab-288981{{"Magia de Datos de Xara"}} hadoop/process -.-> lab-288981{{"Magia de Datos de Xara"}} end

Explorando el ecosistema de Hadoop

En este paso, te familiarizarás con el ecosistema de Hadoop y sus componentes principales: HDFS y MapReduce.

Hadoop es un marco de código abierto para el almacenamiento distribuido y el procesamiento de grandes conjuntos de datos en clústers de hardware de bajo coste. Está compuesto por dos componentes principales:

  1. Hadoop Distributed File System (HDFS): Un sistema de archivos distribuido diseñado para almacenar grandes archivos en múltiples máquinas, proporcionando tolerancia a fallos y acceso de alta rendimiento a los datos.

  2. MapReduce: Un modelo de programación y un marco de software para escribir aplicaciones que procesen grandes cantidades de datos en paralelo en un clúster de máquinas.

Para explorar el ecosistema de Hadoop, puedes utilizar los siguientes comandos en tu terminal:

Primero, asegúrate de estar registrado como el usuario hadoop ejecutando el siguiente comando en la terminal:

su - hadoop

Lista los directorios y archivos en HDFS:

hdfs dfs -ls /

Crea un nuevo directorio en HDFS:

hdfs dfs -mkdir -p /home/hadoop/input

Copia un archivo local a HDFS:

hdfs dfs -put /home/hadoop/local/file.txt /home/hadoop/input

Estos comandos demuestran cómo interactuar con HDFS, listando su contenido, creando directorios y copiando archivos desde tu sistema de archivos local.

El comando hdfs dfs se utiliza para interactuar con el Hadoop Distributed File System (HDFS). La opción -ls lista el contenido de un directorio en HDFS, mientras que -mkdir crea un nuevo directorio. La opción -put copia un archivo local a HDFS.

Ejecutando un trabajo MapReduce

En este paso, aprenderás a ejecutar un trabajo MapReduce en los datos almacenados en HDFS, aprovechando el poder del procesamiento en paralelo para analizar eficientemente grandes conjuntos de datos.

MapReduce es un modelo de programación para procesar grandes conjuntos de datos en paralelo en un clúster de máquinas. Está compuesto por dos fases principales:

  1. Map: Los datos de entrada se dividen en trozos más pequeños, y cada trozo es procesado por una tarea separada llamada "mapper". El mapper procesa los datos y emite pares clave-valor.

  2. Reduce: La salida de los mappers se ordena y agrupa por clave, y cada grupo es procesado por una tarea separada llamada "reducer". El reducer combina los valores asociados con cada clave y produce el resultado final.

Vamos a ejecutar un trabajo MapReduce simple que cuente la frecuencia de aparición de palabras en un archivo de texto. Primero, crea un archivo Java llamado WordCount.java con el siguiente contenido:

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WordCount {

    public static class TokenizerMapper
            extends Mapper<Object, Text, Text, IntWritable>{

        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();

        public void map(Object key, Text value, Context context
        ) throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken());
                context.write(word, one);
            }
        }
    }

    public static class IntSumReducer
            extends Reducer<Text,IntWritable,Text,IntWritable> {
        private IntWritable result = new IntWritable();

        public void reduce(Text key, Iterable<IntWritable> values,
                           Context context
        ) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            result.set(sum);
            context.write(key, result);
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        System.exit(job.waitForCompletion(true)? 0 : 1);
    }
}

A continuación, compila el archivo Java:

mkdir ~/wordcount
javac -source 8 -target 8 -classpath $(hadoop classpath) -d ~/wordcount WordCount.java
jar -cvf ~/wordcount.jar -C ~/wordcount.

Finalmente, ejecuta el trabajo MapReduce:

hadoop jar ~/wordcount.jar WordCount /home/hadoop/input/file.txt /home/hadoop/output

La clase WordCount define un trabajo MapReduce que cuenta la frecuencia de aparición de palabras en un archivo de texto. La clase TokenizerMapper tokeniza cada línea de texto de entrada y emite pares clave-valor (palabra, 1). La clase IntSumReducer suma los valores (conteos) para cada palabra y emite los pares finales (palabra, conteo).

El archivo Java se compila y empaqueta en un archivo JAR, que luego se ejecuta utilizando el comando hadoop jar. La ruta del archivo de entrada (/home/hadoop/input/file.txt) y la ruta del directorio de salida (/home/hadoop/output) se proporcionan como argumentos.

Resumen

En este laboratorio, emprendiste un viaje hacia el mágico reino del desierto de Xara, donde ayudaste al Rey Amir a aprovechar el poder del ecosistema de Hadoop para procesar y analizar los datos del reino. Exploraste los componentes principales de Hadoop, incluyendo HDFS para el almacenamiento distribuido y MapReduce para el procesamiento paralelo de datos.

A través de pasos prácticos, aprendiste cómo interactuar con HDFS, crear directorios y subir archivos. También adquiriste experiencia en la ejecución de un trabajo MapReduce, específicamente una aplicación de conteo de palabras, lo cual demostró las capacidades de procesamiento paralelo de Hadoop.

Al completar este laboratorio, has adquirido habilidades valiosas en la integración de Hadoop con HDFS y MapReduce, lo que te habilita con el conocimiento para enfrentar desafíos de big data del mundo real. Esta experiencia sin duda contribuirá a tu crecimiento como mago de datos, permitiéndote desbloquear conocimientos y impulsar la toma de decisiones en diversos dominios.