Get it on Google Play
Mas de 21 años en el mundo del IT corporativo

Analítica de datos Big Data con Apache Spark

08-07-2019
Apache Spark Logo

Apache Spark Logo

Apache Spark es el motor unificado para analítica para Big Data mas usado en estos momentos(O de los mas usados). En pasados artículos en el blog ya hablamos de alternativas tipo Hadoop/MapReduce o Storm.

Apache Spark tiene un montón de ventajas como: que es bastante mas rápido, que es fácil de usar o es compatible con un montón de tecnologías como Hadoop, Cassandra, Hbase, etc. Os recomiendo ver el vídeo mientras leéis el artículos:

Tal como mostramos en el vídeo, lo primero es descargar la versión de apache Spark que ya viene empaquetada con Hadoop del siguiente enlace.

Arrancamos el cluster

Apache Spark utiliza una arquitectura Master/Esclavo, por lo tanto lo primero será arrancar el nodo máster. Tal como explicamos en el vídeo, una vez tenemos arrancado el nodo máster, este nos arranca una consola web donde podremos consultar el estado del cluster y la URL donde se tendrán que conectar el resto de nodos esclavos:

# Arrancamos el master en modo standalone(Arranca WebUI en 127.0.0.1:8080)
<SPARK_HOME>/sbin/start-master.sh

# Arrancamos el primer esclavo
<SPARK_HOME>/sbin/start-slave.sh <url_de_conexión>

Descarga de datos de ejemplo

En el vídeo nos hemos descargado dos ficheros con datos de ejemplo(Necesitmos datos para trabajar con BigData 😀 ), uno con el libro ‘Moby Dick’ y el otro con unos datos de costes por trabajador del ayuntamiento de Chicago(En formato CSV). Los hemos descargado siguiendo estas instrucciones:

# Descarga del libro ‘Mobi Dick'
wget http://www.gutenberg.org/cache/epub/2489/pg2489.txt

# Descarga de los datos CSV
wget -O data.csv https://data.cityofchicago.org/api/views/xzkq-xp2w/rows.csv?accessType=DOWNLOAD

Scala Shell: Arrancar

Una vez tenemos arrancado nuestro cluster con Spark ya podemos ejecutar cosas sobre el, empezaremos trabajando con su shell. La manera de arrancar la shell es la siguiente, donde le indicamos como parámetro la URL del nodo máster:

<SPARK_HOME>/bin/spark-shell --master spark://albert-MS-7917:7077

Scala Shell: Trabajar con DataSets

Lo primero que hemos hecho ha sido cargar los datos del libro ‘Moby Dick’ dentro de la shell y hemos empezado a trastear(Filtrar líneas, contar líneas, etc.):

val dataset = spark.read.textFile("/ruta_a/pg2489.txt")
dataset.count()

val dataset2 = dataset.filter(line => line.contains("Moby")).count()
dataset2.count()
dataset2.first()
dataset2.show(4)
dataset2.summary().show()

Scala Shell: Trabajar con DataFrames

Despues hemos cargado el CSV en un DataFrame y hemos seguido trasteando, esta vez hemos cargado una columna y sacado un resumen de los datos:

val df =spark.read.option("header","true").csv("/ruta_a/data.csv")
df.head()
df.select("Hourly Rate").summary().show()

Cargar aplicaciones en el cluster

En el vídeo no hemos compilado ninguna aplicación, básicamente, porque esto lo dejo para el próximo. Pero si hemos cargado aplicaciones de ejemplo, de hecho, hemos explicado como cargamos las aplicaciones de ejemplo y como cargaríamos las aplicaciones si no tuviéramos un script específico para cargar los ejemplo:

Para cargar el ejemplo ‘JavaWordCount'(Código fuente disponible aquí):

./run-example --master spark://albert-MS-7917:7077 JavaWordCount /ruta_a/pg2489.txt

Ejecutando el mismo ejemplo como aplicación:

./spark-submit \
	--master spark://albert-MS-7917:7077 \
	--class org.apache.spark.examples.JavaWordCount \
	../examples/jars/spark-examples_2.11-2.4.3.jar \
	/ruta_a/pg2489.txt

También hemos ejecutado un segundo ejemplo, el que calcula el PageRank(Código fuente disponible aquí):

./spark-submit \
	--master spark://albert-MS-7917:7077 \
	--class org.apache.spark.examples.JavaPageRank \
	../examples/jars/spark-examples_2.11-2.4.3.jar \
	../data/mllib/pagerank_data.txt 10

Dejo para futuros vídeo crear aplicaciones propias y trabajar en profundidad con todo el stack: Spark SQL, Spark Streaming, Mllib(MAchine Learning) y GraphX

Si te ha servido, por favor comparte
 

Leave a Reply