Introducció

Hadoop és un marc de programari de codi obert que permet el processament de grans volums de dades en un entorn distribuït. Va ser desenvolupat per la Fundació Apache i està dissenyat per escalar des de servidors individuals fins a milers de màquines, cadascuna oferint emmagatzematge i computació locals.

Objectius d'aprenentatge

En aquesta secció, aprendràs:

  • Què és Hadoop i per què és important.
  • Els components principals de Hadoop.
  • Les característiques clau que fan Hadoop únic.

Conceptes clau

  1. Definició de Hadoop

Hadoop és un marc que permet el processament distribuït de grans conjunts de dades a través de clústers d'ordinadors utilitzant models de programació senzills. Està dissenyat per escalar des d'un sol servidor fins a milers de màquines, cadascuna oferint emmagatzematge i computació locals.

  1. Història de Hadoop

Hadoop va ser creat per Doug Cutting i Mike Cafarella el 2005. El nom "Hadoop" prové del nom del peluix de l'elefant groc del fill de Doug Cutting. La seva creació va ser inspirada pel document de Google sobre el Sistema de Fitxers de Google (GFS) i MapReduce.

  1. Components principals de Hadoop

Hadoop consta de quatre components principals:

  • HDFS (Hadoop Distributed File System): Un sistema de fitxers distribuït que emmagatzema dades en múltiples màquines.
  • MapReduce: Un model de programació per al processament de dades.
  • YARN (Yet Another Resource Negotiator): Un sistema de gestió de recursos per a la gestió de recursos de clúster.
  • Hadoop Common: Les utilitats comunes que donen suport als altres mòduls de Hadoop.

  1. Característiques clau de Hadoop

  • Escalabilitat: Hadoop pot escalar des d'un sol servidor fins a milers de màquines.
  • Tolerància a fallades: HDFS replica dades en múltiples nodes per garantir la disponibilitat i la fiabilitat.
  • Processament paral·lel: MapReduce permet el processament paral·lel de grans conjunts de dades.
  • Cost-efectivitat: Utilitza maquinari de mercat per reduir costos.

Exemples pràctics

Exemple 1: Emmagatzematge de dades amb HDFS

# Crear un directori a HDFS
hdfs dfs -mkdir /user/hadoop/input

# Carregar un fitxer local a HDFS
hdfs dfs -put localfile.txt /user/hadoop/input

Exemple 2: Processament de dades amb MapReduce

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;

import java.io.IOException;

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 {
            String[] tokens = value.toString().split("\\s+");
            for (String token : tokens) {
                word.set(token);
                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);
    }
}

Exercicis pràctics

Exercici 1: Crear un directori a HDFS

  1. Obre la línia de comandes.
  2. Crea un directori anomenat /user/estudiant/input a HDFS.
hdfs dfs -mkdir /user/estudiant/input

Exercici 2: Carregar un fitxer a HDFS

  1. Crea un fitxer de text anomenat dades.txt al teu sistema local.
  2. Carrega aquest fitxer al directori /user/estudiant/input a HDFS.
hdfs dfs -put dades.txt /user/estudiant/input

Resum

En aquesta secció, hem après què és Hadoop, la seva història, els components principals i les seves característiques clau. També hem vist exemples pràctics d'emmagatzematge de dades amb HDFS i processament de dades amb MapReduce. Finalment, hem realitzat alguns exercicis pràctics per reforçar els conceptes apresos.

En la següent secció, explorarem una visió general de l'ecosistema Hadoop.

© Copyright 2024. Tots els drets reservats