You are on page 1of 27

Programa Ejecutivo en Big Data

Módulo 6: Tecnología de Spark


Procesamiento en Streaming
(2017/2018)

Tema 1:
Introducción a Spark
2017-2018

Dr. Rafael Bachiller Soler


Twitter: @RafaBachiller
E-mail: r.bachiller@cubenube.com

www.eoi.es
Índice Spark

• Spark: • Instalación de Spark.


• Motivación.
• Ejercicio.
• Descripción.
• Hadoop:
• Revisión.
• Functional
• Comparación.
• Características. Programming.
• Limitaciones. • Conceptos básicos.
• Ejercicios.
• Arquitectura de Spark:
• Componentes.
• Entorno de ejecución. • Resumen.
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 2
Motivación Spark

• ¿Cómo analizar una gran cantidad de datos (por ejemplo realizar


la operación MapReduce)?
• Ubicar todos los datos en memoria y trabajar con ellos.
• ¿Si todos los datos no caben en memoria? Se dividen los datos en
porciones, se ubica cada porción en memoria, se procesa y se
almacenan los datos. Después se procesan los resultados obtenidos en
cada porción.
• ¿Si los datos no caben en una única máquina? Distribución del análisis
de los datos en múltiples máquinas.

• ¿Qué ofrece Spark para resolver esta situación?


• API uniforme para el análisis de los datos, independientemente de la
máquina donde se realice el análisis de los datos.
• Distribución del análisis de los datos en varias máquinas de forma
transparente al usuario.
• Uso eficiente de los recursos para reducir el tiempo de análisis.
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 3
Apache Spark (I) Spark

• Data processing
• Obtiene, transforma (y almacena) información.
• Large-scale
• Volume: un volumen de datos grande y de origen/destino
distribuido.
• Variety (múltiples tipos de datos y formatos).
• Velocity (tasa variable de input/output de datos).
Fuente: https://spark.apache.org
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 4
Apache Spark (II) Spark

• Fast
• Análisis de datos en memoria.
• Aporta mecanismos para optimizar la ejecución del análisis.

Fuente: https://spark.apache.org
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 5
Apache Spark (III) Spark

• General engine
• API completa y genérica para realizar el análisis de los
datos.

Fuente: https://spark.apache.org
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 6
Apache Spark (y IV) Spark

• Otros datos:
• Open source.
• Creado en la laboratorio AMPLab de Berkeley por Matei
Zaharia.
• Co-fundador de Databricks (principal desarrallador de Spark).
Fuente: https://spark.apache.org
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 7
Revisión de Hadoop (I) Spark

• HDFS (Hadoop Distributed File System):


• https://en.wikipedia.org/wiki/Google_File_System
• https://research.google.com/archive/gfs.html

• MapReduce:
• https://en.wikipedia.org/wiki/MapReduce
• https://research.google.com/archive/mapreduce.html

• Ofrece una solución eficiente para los problemas de:


• Parallelization: Computación paralela de datos.
• Distribution: Distribución de la computación y de los datos.
• Fault tolerance: Recuperación ante fallo de los componentes del
sistema.

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 8


Revisión de Hadoop (y II) Spark

• Puntos débiles:
• Incremento de la complejidad de la aplicación al implementar
algunas tareas según el paradigma MapReduce:
• Modelo de programación rígido.
• Múltiples herramientas y elementos se han creado y añadido al
ecosistema Hadoop (Hive, Pig, Cascading…).
• Complejidad adicional: múltiples entornos de programación y
mantenimiento múltiples elementos.
• Incremento del tiempo total de procesamiento ya que todos
los trabajos necesitan coger los datos y almacenar los
resultados en el sistema de ficheros (HDFS).
• Todo el proceso (I/O y ciclo de vida de los trabajos) depende del
acceso a disco.
• Las aplicaciones generalmente incluyen múltiples trabajos
(operaciones, transformaciones, etapas…).
• El acceso a disco incrementa el tiempo total de procesamiento.
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 9
Comparación (I) Spark

• Aplicación para contar palabras en Hadoop:

Funcionalidad map

Funcionalidad reduce

Fuente: https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-
core/MapReduceTutorial.html#Example:_WordCount_v2.0

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 10


Comparación (II) Spark

• Aplicación para contar palabras en Spark:


Scala

Java

Python

Fuente: https://spark.apache.org/examples.html
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 11
Comparación (y III) Spark

Nodo 1 Nodo 2
Disco RAM Disco RAM
(HDFS) (HDFS)

DATOS DATOS
1 2

Nodo 1 Nodo 2
Datos
Disco RAM Disco RAM (RDD)
(HDFS) (HDFS)

DATOS DATOS DATOS DATOS val textFile = sc.textFile("hdfs://ejemplo.txt")


1 1 2 2

Nodo 1 Nodo 2 Resultados


Disco RAM Disco RAM (RDD)
(HDFS) (HDFS) val counts = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
DATOS DATOS DATOS .reduceByKey(_ + _)
1 2 DATOS
1’ .filter(l => l._2 > 10)
2’ .cache()
counts.saveAsTextFile(”hdfs://resultado.txt")
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 12
Características de Spark Spark
• Ejecución del análisis de los datos en memoria.
• Alternativa al modelo de Hadoop dependiente de HDFS.

• Facilidad de uso: API flexible.


• Soporte de múltiples lenguajes de programación: Scala (functional programming), Java,
Python y R.
• Disminución de la complejidad de las aplicaciones.
• Disminución del tiempo de desarrollo (por ejemplo, a través del spark shell (REPL)).

• Una única plataforma: ecosistema cohesionado y compacto.


• Un único modelo de programación para procesamiento en batch (lotes), operaciones SQL,
procesamiento en streaming (Spark utiliza la técnica de micro-batching), machine learning
y procesamiento de gráficos.
• Adecuado para el online analytical procesing (OLAP).
• Soporte de múltiples tipos de entrada/salida de datos:
• Sistemas de ficheros.
• Bases de datos.
• Otros elementos: Kafka…
• Soporte de múltiples tipos de clúster: Standalone, YARN y Mesos.

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 13


Limitaciones de Spark Spark

• No es adecuado para la actualización asíncrona de datos compartidos (por


ejemplo, online transaction processing (OLTP)):
• OLTP se caracteriza por transacciones rápidas, numerosas y atómicas.

• En el caso de no necesitar procesamiento distribuido debido al bajo volumen de


datos a analizar, Spark aumenta considerablemente el esfuerzo de desarrollo de
la aplicación.

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 14


Arquitectura de Spark (I) Spark

Datos (BBDD, Datos (Kafka,


JSON…) Flume…)

Spark SQL Spark Streaming


DStream Spark GraphX Spark ML
DataFrame
Structure Graph RDD Modelo ML
DataSet
Streaming API

Spark Core

Transformaciones RDD Acciones

Sistema de
Ficheros
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 15
Arquitectura de Spark (II) Spark

• Spark Core:
• Funcionalidad básica del sistema (por ejemplo: ejecutar trabajos, seguridad,
planificación de recursos, distribución de las tareas en un clúster).
• RDD (resilient distributed dataset).
• Acciones y transformaciones.
• Broadcast variables y accumulators.
• Acceso al sistema de ficheros para la entrada y salida de datos.

• Spark SQL:
• Acceso a los datos a través de sentencias SQL.
• Lectura y escritura de datos en Hive, bases de datos relacionales, NoSQL,
ficheros JSON y ficheros Parquet.
• Optimizador de sentencias SQL (Catalyst).
• Permite el acceso externo a los datos almacenados a través de los protocolos
JDBC y ODBC (servidor Thrift).
• Funcionalidad equivalente a Apche Pig y Apache Sqoop.

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 16


Arquitectura de Spark (III) Spark

• Spark Streaming:
• Ingesta de datos desde varias fuentes (HDFS, Kafka, Flume, Twitter, ZeroMQ,
Sockets TCP/IP…).
• Dstream (discretized streams).
• Structured Stream API.
• Recuperación automática ante fallos (de entrada, de análisis, de salida…).
• Interactúa con otros módulos: Spark SQL, Spark ML y Spark GraphX.
• Funcionalidad equivalente a Apache Storm.

Spark SQL

Spark ML Spark GraphX

Spark Streaming

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 17


Arquitectura de Spark (y IV) Spark

• Spark ML (y MLlib):
• Librería que implementa algoritmos de machine learning:
logistic regression, clasificación naive Bayes, support vector
machines (SVM), árboles de decisión, regresión lineal…
• Interactúa con otros módulos: Spark SQL.
• Funcionalidad equivalente a Apache Mahout.

• Spark GraphX:
• graph RDD (grafo): EdgeRDD (arista de un grafo) y VertexRDD
(vértice de un grafo).
• Librería que implementa algoritmos basados en grafos: page
rank, camino más corto…
• Funcionalidad equivalente a Apache Giraph.
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 18
Instalación de Spark (I) Spark

• Máquina:
• Sistema operativo Linux o MacOS.
• Java Versión 8.
• Memoria y CPU dependientes de las necesidades de la aplicación a ejecutar.
• Proceso:
• Establecer la variable de entorno JAVA_HOME.
spark@bdeoi:~$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

• Descargar Spark.
spark@bdeoi:~$ wget "<spark_url>/<spark_file>.tgz"

• Desempaquetar en el directorio ~/bin/


spark@bdeoi:~$ tar zxvf <spark_file>.tgz –C ~/bin

• Crear un enlace simbólico a la carpeta spark.


spark@bdeoi:~$ ln –s ~/bin/<spark_file> ~/bin/spark

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 19


Instalación de Spark (II) Spark

• Crear la variable de entorno indicando la ubicación de Spark.


spark@bdeoi:~$ export SPARK_HOME=~/bin/spark

• Añadir el directorio ~/bin/spark/bin al path del sistema.


spark@bdeoi:~$ export PATH=$PATH:$HOME/bin/spark/bin/

• Comprobar la instalación.
spark@bdeoi:~$ spark-shell --master=local[*]
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use
setLogLevel(newLevel).
Spark context Web UI available at http://192.168.25.30:4040
Spark context available as 'sc' (master = local[*], app id = local-1515357843039).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.2.0
/_/
Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_151)
Type in expressions to have them evaluated.
Type :help for more information.

scala>

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 20


Entorno de ejecución (I) Spark

• Una aplicación Spark (Driver Program) consiste en un conjunto de


procesos ejecutados de forma independiente dentro de un
clúster.
• El Cluster Manager se encarga de asignar los recursos (e.g. worker
nodes) a cada aplicación.
• El SparkContext se encarga de enviar tareas a los executors.
• Los Executors son los procesos que realizan el análisis de los datos.

Fuente: https://spark.apache.org/docs/latest/cluster-overview.html
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 21
Entorno de ejecución (II) Spark

Fuente: https://spark.apache.org/docs/latest/cluster-overview.html
M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 22
Entorno de ejecución (y III) Spark

• Entorno de ejecución en el caso de spark-shell:

Cliente (Java JVM)


Driver JVM Heap
Spark Scheduler
Executor
Spark Context Spark Tasks
Spark T T
Spark Submit
Shell (REPL)

http://<ip_address>:4040

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 23


Ejercicio: Contar palabras de
un fichero Spark

spark@bdeoi:~$ spark-shell

scala> val lineas = sc.textFile("bin/spark/LICENSE")


scala> val palabras = lineas.flatMap(linea => linea.split(" "))
scala> val palabras_mapping = palabras.map(palabra => (palabra,1))
scala> val palabras_reduce = palabras_mapping.reduceByKey(_ + _)
scala> palabras_reduce.cache
scala> palabras_reduce.saveAsTextFile("resultados.spark")

EJERCICIO 1.1

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 24


Functional Programming Spark

• Paradigma de programación en el que:


• Las aplicaciones se definen como un conjunto de funciones
matemáticas.
• Se evita el cambio de estado y los datos variables.

• Programación funcional: el valor devuelto por una función


depende exclusivamente de los parámetros de la llamada.
• Programación imperativa: el valor devuelto depende del estado
local o global de la aplicación.
Imperative Programming (Java) Functional Programming (Scala)

int[] tabla = new int[] {1, 2, 3, 4, 5};


for (int i = 0; i < tabla.length; i++) { val tabla = Array(1, 2, 3, 4, 5)
tabla[i] = tabla[i] * tabla[i]; val square = tabla.map(v => v * v)
}

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 25


Ejercicio: Fundamentos de
Scala Spark

• Spark soporta Scala, Java, Python y R.


• Spark está escrito en Scala (http://www.scala-lang.org).
• El desarrollo de las nuevas funcionalidades se centra
principalmente en Scala.
• Scala ofrece orientación a objetos.
• Se ejecuta sobre la máquina virtual de Java.

EJERCICIO 1.2

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 26


Resumen Spark

• Conceptos básicos de Spark:


• Arquitectura.
• Elementos.
• Instalación.

• Functional programming.

• Ejercicios.

M6 - Streaming (17/18) Spark - Tema 1: Introducción a Spark 27

You might also like