Apache Spark 2 : Conceptos básicos


portada_spark

Apache Spark es un cluster dedicado al procesamiento de información de forma muy rápida, provee soporte para el desarrollo de aplicaciones con Java, Scala, Python y R. Su engine cuenta con soporte para SQL, Machine Learning, Streaming, GraphX, etc.

Características

Cuando se procesan grandes datasets uno de los aspectos más importantes es la velocidad,  por esto Spark cuenta con un motor llamado DAG que permite ejecutar tareas incluso 100 veces más rápido que Hadoop.

Es posible escribir aplicaciones y comunicarlas en diferentes lenguajes como Java, Scala, Python, R y SQL.

Provee soporte para diferentes tipos de problemas, por esto es posible combinarlos para realizar soluciones más complejas.

Captura de pantalla 2018-08-31 a las 1.39.37 p.m.

Puedes ejecutarlo donde sea Apache Mesos, Kubernetes, standalone o incluso en la nube, además de que puede acceder a diferentes fuentes de datos.

Todo lo anterior lo convierte a una plataforma que permite resolver diferentes tipos de problemas, de diferentes fuentes de información y utilizando diferentes lenguajes de programación. Es importante entender que puedes usar uno o varios módulos de Spark para construir tu aplicación.

Requerimientos para nuestros ejemplos

En esta serie de posts utilizaremos el lenguaje Java para nuestros ejemplos, para esto es necesario tener instalado Java 8, Maven, Git y el IDE de tu preferencia en tu computadora.

Primer ejemplo con Java

Cuando trabajas con streaming y procesamiento en tiempo real el Hola mundo se convierte en el WordCount, un programa para contar palabras, veamos como hacerlo con Apache Spark y java.

Paso 1 Configurando nuestro projecto

Es posible iniciar un cluster standalone de spark solo definiendo la dependencia de maven de spark-core_2.11 y la versión de java a utilizar como se muestra a continuación:

Captura de pantalla 2018-08-31 a las 2.11.14 p.m.

Paso 2: Creando nuestro archivo de prueba

Para este ejemplo leeremos un texto de un archivo, en este caso lo crearemos en el folder src/main/resources y lo nombraremos words.txt en nuestro caso colocaremos información sobre Xochimilco.

Paso 3: Escribiendo la lógica de nuestra aplicación

El siguiente paso será escribir el código que realizará el conteo de palabras:


import java.util.Arrays;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

/**
 * @author raidentrance
 *
 */
public class WordCount {
	public static void main(String[] args) {
		JavaSparkContext sc = new JavaSparkContext(new SparkConf().setAppName("WordCount").setMaster("local[3]"));
		JavaRDD lines = sc.textFile("src/main/resources/words.txt");
		JavaRDD words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator());
		Map wordCounts = words.countByValue();

		for (Entry wordCount : wordCounts.entrySet()) {
			System.out.printf("%s - %d \n", wordCount.getKey(), wordCount.getValue());
		}
		sc.close();
	}
}

Como vemos leeremos el archivo y realizaremos el conteo de palabras utilizando Apache spark e imprimiremos el resultado, en el siguiente post explicaremos en detalle el significado de cada línea.

Paso 4 : Ejecutando la aplciación

Para ejecutar la aplicación no es necesario descargar nada, solo ejecutaremos nuestra clase Main y veremos la salida como la siguiente en la consola:

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
18/08/31 14:06:40 INFO SparkContext: Running Spark version 2.0.0
18/08/31 14:06:40 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
18/08/31 14:06:40 INFO SecurityManager: Changing view acls to: maagapi
18/08/31 14:06:40 INFO SecurityManager: Changing modify acls to: maagapi
18/08/31 14:06:40 INFO SecurityManager: Changing view acls groups to:
18/08/31 14:06:40 INFO SecurityManager: Changing modify acls groups to:
18/08/31 14:06:40 INFO SecurityManager: SecurityManager: authentication disabled; ui acls dis
.......
estado - 1
'flor', - 1
deterioro - 1
obras - 3
Noria" - 1
Xochimilco, - 1
Xochimilco - 10
quien - 1
pueblo - 1
cual - 1
......
18/08/31 14:06:42 INFO SparkUI: Stopped Spark web UI at http://192.168.14.141:4040
18/08/31 14:06:42 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!
18/08/31 14:06:42 INFO MemoryStore: MemoryStore cleared
18/08/31 14:06:42 INFO BlockManager: BlockManager stopped
18/08/31 14:06:42 INFO BlockManagerMaster: BlockManagerMaster stopped
18/08/31 14:06:42 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped!
18/08/31 14:06:42 INFO SparkContext: Successfully stopped SparkContext
18/08/31 14:06:42 INFO ShutdownHookManager: Shutdown hook called
18/08/31 14:06:42 INFO ShutdownHookManager: Deleting directory /private/var/folders/w6/3vf48tdj3fq0lchyt9d1yxyxhrgdrj/T/spark-cdf54202-63a3-4e4b-bb66-2dc386cd245d

Con esto tenemos nuestra primera aplicación con Apache Spark, en futuros posts veremos ejemplos cada vez más complejos, síguenos en nuestras redes sociales para enterarte sobre nuevo contenido https://www.facebook.com/devs4j/ y https://twitter.com/devs4j.

Puedes encontrar el código completo en el siguiente link https://github.com/raidentrance/spark-tutorial.

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com

Anuncios

1 comentario »

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s