MapReduce usando Apache Spark
En este artículo, aprenderemos cómo realizar un trabajo MapReduce
utilizando Apache Spark con la ayuda del lenguaje de programación Scala.
una descripción general de MapReduce
MapReduce
es un paradigma de programación de Hadoop
, y está diseñado para procesar una gran cantidad de datos en paralelo. Este procesamiento o todo el trabajo se realiza dividiéndolo en partes más pequeñas, también conocidas como tareas.
Dado que sigue la arquitectura maestro-esclavo
, el nodo maestro
asigna la tarea y los nodos esclavos
hacen los trabajos más pequeños (tareas). Estos esclavos
(agrupación de servidores) procesan y dan salidas individuales.
MapReduce
tiene dos componentes, uno es un mapper
y otro es un reductor
. En la primera fase, los datos se introducen en el mapeador, que convierte los datos entrantes en pares de clave y valor.
La salida generada por el mapeador a menudo se denomina salida intermedia. Esta salida del mapeador se proporciona como entrada al reductor, que realiza el tipo de cálculo de clasificación de agregación en función de la clave y proporciona el par final de clave-valor, que es nuestra salida final.
Ejecute MapReduce
con Apache Spark
Aunque MapReduce
es una parte importante del sistema Hadoop
, también podemos ejecutarlo usando Spark
. Veremos un programa muy conocido MapReduce
que utiliza como ejemplo el código de recuento de palabras para entenderlo mejor.
Entonces, el enunciado del problema es que dado un archivo de texto, tenemos que contar la frecuencia de cada palabra en él.
Requisitos previos:
Estas cosas deben instalarse en el sistema para ejecutar el siguiente programa.
- JDK8
- Escala
- Hadoop
- Chispa
Tenemos que poner el archivo en el sistema de archivos HDFS e iniciar el shell spark
.
Código de ejemplo: El siguiente código se ejecutó en el shell Spark
.
val ourData = sc.textFile("myFile.txt");
ourData.collect;
val splitLines = ourData.flatMap(line => line.split(" "));
splitLines.collect;
val mapperData = splitLines.map(word => (word,1));
mapperData.collect;
val reducerData = mapperData.reduceByKey(_+_)
reducerData.collect
Cuando se ejecuta el código anterior, da la frecuencia de cada palabra presente en miarchivo.txt
.