El documento presenta una introducción a Spark y sus distintos módulos. Explica brevemente Spark Core, que incluye RDD, transformaciones y acciones; Spark SQL, que permite consultas SQL sobre RDD; y cómo se relacionan estos módulos. También menciona Spark Streaming y MLlib, pero se enfoca principalmente en describir Spark Core y SQL, y cómo pueden combinarse mediante la creación de DataFrames a partir de RDD o realizando operaciones de join.
Meetup de Apache Spark Madrid sobre los errores que todos cometemos en proyectos Big Data.
Como las animaciones no van muy bien podeis verla en el siguiente enlace:
https://docs.google.com/presentation/d/1W4Foy9u0NkZziQ36I5_00b_e-JlwhSshSFv-hcxaBpM/edit?usp=sharing
Monta una Infraestructura Big Data para tu Empresa - Sesión IUrko Zurutuza
Primera Sesión sobre el Curso de Enpresa Digitala "Monta una Infraestructura Big Data en tu Empresa", impartido por Urko Zurutuza de Mondragon Unibertsitatea. Hablaremos de Hadoop y de su ecosistema de herramientas.
Introducción a Hadoop y sus herramientas. Presentación de las herramientas de integración que ofrece SQL Server Integration Services 2016 con Hadoop y HDInsight
Monta una Infraestructura para Big Data en tu EmpresaUrko Zurutuza
Tercera y última sesión del curso "Monta una Infraestructura para Big Data en tu Empresa" impartida por Urko Zurutuza de Mondragon Unibertsitatea para Enpresa Digitala. En esta sesión se muestran ejercicios prácticos y guiados que darán pie a probar algunas de las herramientas que dispone la distribucion Hadoop Cloudera CDH5.
Meetup de Apache Spark Madrid sobre los errores que todos cometemos en proyectos Big Data.
Como las animaciones no van muy bien podeis verla en el siguiente enlace:
https://docs.google.com/presentation/d/1W4Foy9u0NkZziQ36I5_00b_e-JlwhSshSFv-hcxaBpM/edit?usp=sharing
Monta una Infraestructura Big Data para tu Empresa - Sesión IUrko Zurutuza
Primera Sesión sobre el Curso de Enpresa Digitala "Monta una Infraestructura Big Data en tu Empresa", impartido por Urko Zurutuza de Mondragon Unibertsitatea. Hablaremos de Hadoop y de su ecosistema de herramientas.
Introducción a Hadoop y sus herramientas. Presentación de las herramientas de integración que ofrece SQL Server Integration Services 2016 con Hadoop y HDInsight
Monta una Infraestructura para Big Data en tu EmpresaUrko Zurutuza
Tercera y última sesión del curso "Monta una Infraestructura para Big Data en tu Empresa" impartida por Urko Zurutuza de Mondragon Unibertsitatea para Enpresa Digitala. En esta sesión se muestran ejercicios prácticos y guiados que darán pie a probar algunas de las herramientas que dispone la distribucion Hadoop Cloudera CDH5.
Taller sobre la creación de un clúster de Apache Hadoop y aplicaciones de su entorno de las XIII Xornadas Libres de Gpul en la Universidade da Coruña http://gpul.es/e/2014/xornadas-libres/
En esta presentación se incentiva el desarrollo de aplicaciones para la resolución de problemas comunes de hoy en día que implican el manejo de grandes volúmenes de información, desde el enfoque de Big Data.
Se propone la combinación de OpenStack y Hadoop para apoyar el desarrollo de soluciones, que permitan extraer información valiosa a partir de grandes volúmenes de datos.
Tutorial en Apache Spark - Clasificando tweets en realtimeSocialmetrix
Apache Spark [1] es un nuevo framework de procesamiento distribuido para big data, escrito en Scala con wrappers para Python, que viene generando mucha atención de la comunidad por su potencia, simplicidad de uso y velocidad de procesamiento. Ya siendo llamado como el remplazo de Apache Hadoop.
Socialmetrix desarrolla soluciones en este framework para generar reportes y dashboards de información a partir de los datos extraídos de redes sociales.
Los participantes de este tutorial van aprender a levantar información de Twitter usando Spark Streaming, Desarrollar algoritmos para calcular hashtags más frecuentes, usuarios más activos en batch processing aplicarlos en realtime a los nuevos tweets que lleguen a través del stream.
Tutorial Introductorio a Big Data, Hadoop y sus tecnologías asociadas (Hive, Pig, HBase, HDFS), etc. Presentado en el XVIII Congreso Iberoamericano de Ingenieria del Software (CIBSE). Peru. Lima. Abril del 2015.
Charla impartida por Marco Antonio Sanz Molina Prados, Fundador de CloudAppi, que repasa las tecnologías más habituales del mundo Big Data y su aplicación en el desarrollo de las Apis.
En la ponencia se tratan os siguientes puntos:
• Arquitectura Lambda
• Arquitectura de APIs
• Bases de datos noSQL
• Datawarehouses Big Data
• Ejemplos de arquitecturas
Meetup: Cómo monitorizar y optimizar procesos de Spark usando la Spark Web - ...Stratio
Apache Spark ya es una realidad en el mundo de la informática y ahora necesitamos no sólo saber de lo que la tecnología es capaz, necesitamos hacerlo productivo. Para ello necesitamos saber cómo poder auditar cada uno de sus procesos de una manera sencilla y sin necesidad de conocimientos destacados de esta tecnología.
Jorge López-Malla muestra qué herramientas proporciona el propio framework de Apache Spark para poder monitorizar el rendimiento de los algoritmos y cómo sacarle partido para mejorar los jobs de Apache Spark, tanto streaming como batch, y ver qué magia hace SparkSQL cuando se quiere hacer un simple join.
Taller sobre la creación de un clúster de Apache Hadoop y aplicaciones de su entorno de las XIII Xornadas Libres de Gpul en la Universidade da Coruña http://gpul.es/e/2014/xornadas-libres/
En esta presentación se incentiva el desarrollo de aplicaciones para la resolución de problemas comunes de hoy en día que implican el manejo de grandes volúmenes de información, desde el enfoque de Big Data.
Se propone la combinación de OpenStack y Hadoop para apoyar el desarrollo de soluciones, que permitan extraer información valiosa a partir de grandes volúmenes de datos.
Tutorial en Apache Spark - Clasificando tweets en realtimeSocialmetrix
Apache Spark [1] es un nuevo framework de procesamiento distribuido para big data, escrito en Scala con wrappers para Python, que viene generando mucha atención de la comunidad por su potencia, simplicidad de uso y velocidad de procesamiento. Ya siendo llamado como el remplazo de Apache Hadoop.
Socialmetrix desarrolla soluciones en este framework para generar reportes y dashboards de información a partir de los datos extraídos de redes sociales.
Los participantes de este tutorial van aprender a levantar información de Twitter usando Spark Streaming, Desarrollar algoritmos para calcular hashtags más frecuentes, usuarios más activos en batch processing aplicarlos en realtime a los nuevos tweets que lleguen a través del stream.
Tutorial Introductorio a Big Data, Hadoop y sus tecnologías asociadas (Hive, Pig, HBase, HDFS), etc. Presentado en el XVIII Congreso Iberoamericano de Ingenieria del Software (CIBSE). Peru. Lima. Abril del 2015.
Charla impartida por Marco Antonio Sanz Molina Prados, Fundador de CloudAppi, que repasa las tecnologías más habituales del mundo Big Data y su aplicación en el desarrollo de las Apis.
En la ponencia se tratan os siguientes puntos:
• Arquitectura Lambda
• Arquitectura de APIs
• Bases de datos noSQL
• Datawarehouses Big Data
• Ejemplos de arquitecturas
Meetup: Cómo monitorizar y optimizar procesos de Spark usando la Spark Web - ...Stratio
Apache Spark ya es una realidad en el mundo de la informática y ahora necesitamos no sólo saber de lo que la tecnología es capaz, necesitamos hacerlo productivo. Para ello necesitamos saber cómo poder auditar cada uno de sus procesos de una manera sencilla y sin necesidad de conocimientos destacados de esta tecnología.
Jorge López-Malla muestra qué herramientas proporciona el propio framework de Apache Spark para poder monitorizar el rendimiento de los algoritmos y cómo sacarle partido para mejorar los jobs de Apache Spark, tanto streaming como batch, y ver qué magia hace SparkSQL cuando se quiere hacer un simple join.
Primeros pasos con Apache Spark - Madrid Meetupdhiguero
Primeros pasos con Spark dentro del Apache Spark Meetup group de Madrid (http://www.meetup.com/Madrid-Apache-Spark-meetup/events/198362002/)
Contenido:
- Introdución
- Conceptos básicos
- Ecosistema Spark
- Instalación del entorno
- Errores comunes
La presente investigación es para determinar si es más conveniente usar las herramientas que ofrece Apache Hadoop o escoger a su rival a decir de muchos: Apache Spark.
“Apache Spark es el motor más rápido y de uso general para el procesamiento de datos a gran escala.”
...O al menos es de lo que se informa en el sitio oficial pero ¿es eso cierto? En esta época del BigData aparecen y se ven muchas soluciones y tecnologías que enriquecen el entorno ampliamente dominado por Apache Hadoop, sin embargo en la era de los metadatos Spark brilla con una luz diferente y empieza a hacerle sombra a Hadoop en el negocio del BigData.
¿Eres desarrollador y emprendedor? En este ebook se recopilan tres análisis en profundidad con las mejores herramientas y las más populares entre los científicos de datos. Más información en http://bbva.info/2t1NEv7
Introducción (en Español) al framework de procesamiento distribuido en memoria Apache Spark. Elementos básicos de Spark, RDD, incluye demo de las librerías SparkSQL y Spark Streaming
Presentado en www.nardoz.com
http://arjon.es/2014/08/14/introduccion-a-apache-spark-en-espanol/
Introducción (en Español) al framework de procesamiento distribuido en memoria Apache Spark. Elementos básicos de Spark, RDD, incluye demo de las librerías SparkSQL y Spark Streaming
Presentado en www.nardoz.com
¿Por que cambiar de Apache Hadoop a Apache Spark?Socialmetrix
Abstract de la charla realizada en SUGAR - Scala User Group Argentina
Apache Spark [1] es un framework para procesamiento distribuído diseñado para ser amigable para Data-Scientists y programadores, con soporte nativo a muchos lenguajes y diversidad de formatos de datos es extramadamente flexible. Cambiando el modelo establecido por Hadoop v1 de Map-Reduce por un grafo de ejecución (DAG) y manteniendo los pasos intermédios en RAM, Spark brinda excelente performance y una API muy expresiva.
Gustavo Arjones [2], CTO de Socialmetrix, va contar la experiencia que tuvieron al cambiarse de Hadoop a Spark y lo que los llevaron a este cambio. Esta charla es una introducción teorica y practica a Spark y sus distintos componentes.
Los tópicos a discutir son:
• Qué és?
• Aspectos que hacen Spark tan atractivo para la comunidad
• Plataforma unificada para Data Science (Batch, Stream, ML, Graph)
• Soporte a distintos lenguajes
• Ejecución: RDD y DAG / Task Scheduller
• Tracción de la comunidad (# commits, # commiters)
• testing, etc
• Demos:
• Spark-shell: Explicar paso a paso el WordCount
• LogAnalytics - compilar y submeter al cluster
• SQL/DataFrames: Demostrar que se puede consumir directamente JSON y hacer queries con SQL
[1] http://spark.apache.org
[2] https://linkedin.com/in/arjones
La computación distribuída es un nuevo modelo de computación que surgió con el objetivo de resolver problemas de computación masiva donde diferentes máquinas trabajan en paralelo formando un clúster de computación.
En los últimos años han surgido diferentes frameworks como Apache Hadoop, Apache Spark y Apache Flink que permiten resolver este tipo de problemas donde tenemos datos masivos desde diferentes fuentes de datos.
Dentro del ecosistema de Python podemos destacar las librerías de Pyspark y Dask de código abierto que permiten la ejecución de tareas de forma paralela y distribuida en Python.
Entre los puntos a tratar podemos destacar:
Introducción a la computación distribuida
Comparando tecnologías de computación distribuida
Frameworks y módulos en Python para computación distribuida
Casos de uso en proyectos Big Data
Geoposicionamiento Big Data o It's bigger on the inside Commit conf 2018Jorge Lopez-Malla
Talk about how Big Data and geospatial processing worlds are merging to get the best insights.
(The presenetation with effects here: https://docs.google.com/presentation/d/1EniUHMrRR3vQaJp6q0qBdOyZxv62DcSv3-iZXpcfwOM/edit?usp=sharing)
Talk about add proxy user in Spark Task execution time given in Spark Summit East 2017 by Jorge López-Malla and Abel Ricon
full video:
https://www.youtube.com/watch?v=VaU1xC0Rixo&feature=youtu.be
Meetup de Spark y su interacción con Kerberos, para verlo como animación: https://docs.google.com/presentation/d/1DCjp_-s9J647Vydt5ltmqfXpS2PrJDo3KzoVz0C9T7Q/edit?usp=sharing
La problemática Big Data ha dejado de ser una nueva moda y se ha asentado como una nueva realidad en nuestro día a día, y la tecnolgía se ha adaptado a esta nueva realidad permitiendonos afortar problemas complejos de una manera sencilla y casi transaparete.
Pero, ¿y nosotros, hemos cambiado la forma de ver los proyectos y de atacar la solución?¿seguimos tratando de solucionar esta nueva problemática con la misma metodología?¿Seguimos creyendo que el Big Data nos va a solucionar todos nuestros problemas por arte de magia?
Esta charla versará sobre como, según la experiencia del ponente en distintos proyectos de distintas áreas de negocio, se han cambiado la forma de afrontar estos y de como se han solucionado los distintos problemas a la hora de afrontar un proyecto Big Data.
En este documento analizamos ciertos conceptos relacionados con la ficha 1 y 2. Y concluimos, dando el porque es importante desarrollar nuestras habilidades de pensamiento.
Sara Sofia Bedoya Montezuma.
9-1.
Inteligencia Artificial y Ciberseguridad.pdfEmilio Casbas
Recopilación de los puntos más interesantes de diversas presentaciones, desde los visionarios conceptos de Alan Turing, pasando por la paradoja de Hans Moravec y la descripcion de Singularidad de Max Tegmark, hasta los innovadores avances de ChatGPT, y de cómo la IA está transformando la seguridad digital y protegiendo nuestras vidas.
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informáticavazquezgarciajesusma
En este proyecto de investigación nos adentraremos en el fascinante mundo de la intersección entre el arte y los medios de comunicación en el campo de la informática.
La rápida evolución de la tecnología ha llevado a una fusión cada vez más estrecha entre el arte y los medios digitales, generando nuevas formas de expresión y comunicación.
Continuando con el desarrollo de nuestro proyecto haremos uso del método inductivo porque organizamos nuestra investigación a la particular a lo general. El diseño metodológico del trabajo es no experimental y transversal ya que no existe manipulación deliberada de las variables ni de la situación, si no que se observa los fundamental y como se dan en su contestó natural para después analizarlos.
El diseño es transversal porque los datos se recolectan en un solo momento y su propósito es describir variables y analizar su interrelación, solo se desea saber la incidencia y el valor de uno o más variables, el diseño será descriptivo porque se requiere establecer relación entre dos o más de estás.
Mediante una encuesta recopilamos la información de este proyecto los alumnos tengan conocimiento de la evolución del arte y los medios de comunicación en la información y su importancia para la institución.
Actualmente, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital, siendo este un componente electrónico, por tanto se ha desarrollado y se ofrece un amplio rango de soluciones al problema del almacenamiento de datos.
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Telefónica
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0xWord escrito por Ibón Reinoso ( https://mypublicinbox.com/IBhone ) con Prólogo de Chema Alonso ( https://mypublicinbox.com/ChemaAlonso ). Puedes comprarlo aquí: https://0xword.com/es/libros/233-big-data-tecnologias-para-arquitecturas-data-centric.html
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...espinozaernesto427
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta intensidad son un tipo de lámpara eléctrica de descarga de gas que produce luz por medio de un arco eléctrico entre electrodos de tungsteno alojados dentro de un tubo de alúmina o cuarzo moldeado translúcido o transparente.
lámparas más eficientes del mercado, debido a su menor consumo y por la cantidad de luz que emiten. Adquieren una vida útil de hasta 50.000 horas y no generan calor alguna. Si quieres cambiar la iluminación de tu hogar para hacerla mucho más eficiente, ¡esta es tu mejor opción!
Las nuevas lámparas de descarga de alta intensidad producen más luz visible por unidad de energía eléctrica consumida que las lámparas fluorescentes e incandescentes, ya que una mayor proporción de su radiación es luz visible, en contraste con la infrarroja. Sin embargo, la salida de lúmenes de la iluminación HID puede deteriorarse hasta en un 70% durante 10,000 horas de funcionamiento.
Muchos vehículos modernos usan bombillas HID para los principales sistemas de iluminación, aunque algunas aplicaciones ahora están pasando de bombillas HID a tecnología LED y láser.1 Modelos de lámparas van desde las típicas lámparas de 35 a 100 W de los autos, a las de más de 15 kW que se utilizan en los proyectores de cines IMAX.
Esta tecnología HID no es nueva y fue demostrada por primera vez por Francis Hauksbee en 1705. Lámpara de Nernst.
Lámpara incandescente.
Lámpara de descarga. Lámpara fluorescente. Lámpara fluorescente compacta. Lámpara de haluro metálico. Lámpara de vapor de sodio. Lámpara de vapor de mercurio. Lámpara de neón. Lámpara de deuterio. Lámpara xenón.
Lámpara LED.
Lámpara de plasma.
Flash (fotografía) Las lámparas de descarga de alta intensidad (HID) son un tipo de lámparas de descarga de gas muy utilizadas en la industria de la iluminación. Estas lámparas producen luz creando un arco eléctrico entre dos electrodos a través de un gas ionizado. Las lámparas HID son conocidas por su gran eficacia a la hora de convertir la electricidad en luz y por su larga vida útil.
A diferencia de las luces fluorescentes, que necesitan un recubrimiento de fósforo para emitir luz visible, las lámparas HID no necesitan ningún recubrimiento en el interior de sus tubos. El propio arco eléctrico emite luz visible. Sin embargo, algunas lámparas de halogenuros metálicos y muchas lámparas de vapor de mercurio tienen un recubrimiento de fósforo en el interior de la bombilla para mejorar el espectro luminoso y reproducción cromática. Las lámparas HID están disponibles en varias potencias, que van desde los 25 vatios de las lámparas de halogenuros metálicos autobalastradas y los 35 vatios de las lámparas de vapor de sodio de alta intensidad hasta los 1.000 vatios de las lámparas de vapor de mercurio y vapor de sodio de alta intensidad, e incluso hasta los 1.500 vatios de las lámparas de halogenuros metálicos.
Las lámparas HID requieren un equipo de control especial llamado balasto para funcionar
Es un diagrama para La asistencia técnica o apoyo técnico es brindada por las compañías para que sus clientes puedan hacer uso de sus productos o servicios de la manera en que fueron puestos a la venta.
2. Quienes somos
Quienes somos
JORGE LOPEZ-MALLA
Tras trabajar con algunas
metodologías tradicionales
empecé a centrarme en el
mundo del Big Data, del cual
me enamoré. Ahora soy
arquitecto Big Data en Stratio y
he puesto proyectos en
producción en distintas partes
del mundo.
SKILLS
3. Jorge López-Malla Matute
jlopezm@stratio.com
CONTACTO
Introducción
● Introducción al Big Data
● Hadoop
● ¿Por qué Spark?
1 2
5
3 Spark SQL
● Introducción
● Dataframe
● ¿Cómo relacionamos Core y
SQL?
● Ejemplos prácticos
Spark core
● RDD
● Transformaciones/Acciones con
RDD
● Ejemplo de operaciones
Spark Streaming
● Introducción
● DStreams
● Operaciones "Stateful"
● ¿Cómo se relaciona con el Batch?
MlLib
● Introducción
● Modelos
● ¿Cómo relacionamos Batch y
MLib?
● ¿Cómo usamos MlLib en Streaming
ÍndiceÍndice
4
7. Introducción
Map&Reduce es un modelo de programación utilizado por Google para dar soporte a
la computación paralela sobre grandes colecciones de datos en grupos de
computadoras y al commodity computing. El nombre del framework está inspirado
en los nombres de dos importantes métodos, macros o funciones en programación
funcional: Map y Reduce. MapReduce ha sido adoptado mundialmente, ya que
existe una implementación OpenSource denominada Hadoop. Su desarrollo fue
liderado inicialmente por Yahoo y actualmente lo realiza el proyecto Apache. En esta
década de los años 2010 existen diversas iniciativas similares a Hadoop tanto en la
industria como en el ámbito académico, entre ellas está Spark.
Introducción al Big Data
9. Introducción al Big Data
Fases opcionales del modelo
Aunque el modelo Map & Reduce puede realizarse únicamente con las fases de Map y de Reduce existen
una serie de fases opcionales que nos ayudan a mejorar y optimizar nuestros procesos. Estas fases son:
● Combiner (Fase de Combinación)
● Partitioner (Fase de Particionado)
Map Combiner Partitioner Reduce
Introducción
10. Hadoop
Apache Hadoop es un framework de procesamiento, almacenamiento y gestión de
procesos distribuido que facilita la programación de tareas mediante el paradigma map
& reduce y es escalable desde unos pocos hasta miles de nodos. Es bastante robusto y
está diseñado para trabajar en alta disponibilidad, con tolerancia a fallos y en su versión
reciente gestionar recursos de manera muy eficiente.
Introducción
12. ¿Por qué Spark?
Apache Spark es una framework de procesamiento distribuido en memoria de
segunda generación que facilita la analítica de grandes conjuntos de datos
integrando diferentes paradigmas como Bases de Datos NoSQL, analítica
en tiempo real, machine learning o análisis de grafos mediante un
único lenguaje común.
SPARK CORE
SQL RSTREAMING MlLib GraphX
Introducción
13. Introducción al Modelo de Map & Reduce
¿Por qué Spark?
• API única para
todo
• Presente y Futuro
• Gran adopción
• Integración con
Hadoop
• Facilidad de uso
• Tolerancia a fallos
• Production-ready
• Multilenguaje
15. Jorge López-Malla Matute
jlopezm@stratio.com
CONTACTO
Introducción
● Introducción al Big Data
● Hadoop
● ¿Por qué Spark?
1 2
5
3 Spark SQL
● Introducción
● Dataframe
● ¿Cómo relacionamos Core y
SQL?
● Ejemplos prácticos
Spark core
● RDD
● Transformaciones/Acciones
con RDD
● Ejemplo de operaciones
Spark Streaming
● Introducción
● DStreams
● Operaciones "Stateful"
● ¿Cómo se relaciona con el Batch?
MlLib
● Introducción
● Algoritmos
● Ejemplos prácticos
ÍndiceÍndice
4
16. Definición:
Un RDD en Spark es una colección de colecciones de objetos inmutable y distribuida. Cada RDD está
dividido en diferentes particiones, que pueden ser computadas en los distintos nodos del Cluster de Spark.
Es la Unidad mínima de computación en Spark
Ej:
El RDD numbers es un rdd de enteros que está distribuido por en un cluster con 3 Workers{W1, W2, W3}
numbers = RDD[1,2,3,4,5,6,7,8,9,10]
Conceptos de Spark
RDD
W1 W2 W2
[1,5,6,9] [2,7,8] [3,4,10]
17. Los RDD tienen dos tipos de operaciones:
1. Transformaciones: Son aquellas operaciones que tras ejecutarlas nos devuelven otro RDD. Como un RDD no
deja de ser una colección distribuida estas operaciones son Lazy por lo que no se realizará ningún cálculo a
no ser que al final del árbol de operaciones haya una acción.
2. Acciones: Son operaciones que una vez realizadas sobre un RDD nos devuelven un objeto distinto a un RDD
o vacío. Este tipo de operaciones hace que se lance la ejecución del workflow y por consiguiente que se
ejecute nuestra aplicación de Spark.
Spark Core
Transformaciones
18. Spark Core
Transformaciones
map
Devuelve el rdd resultante de aplicar una función a cada uno de los elementos del rdd que lo
invoca:
map
scala> val rddUpper = rddCow.map(_.toUpperCase)
rddUpper: org.apache.spark.rdd.RDD[String] = MappedRDD[1] at map
rddCow rddUpper
I've never seen a purple cow
I never hope to see one
But i can tell you, anyhow,
I’d rather see than be one
I'VE NEVER SEEN A PURPLE
COW
I NEVER HOPE TO SEE ONE
BUT I CAN TELL YOU, ANYHOW,
I’D RATHER SEE THAN BE ONE
19. Spark Core
Transformaciones
flatMap
scala> val rddCowWords = rddCow.flatMap(_.split(" "))
rddCowWords: org.apache.spark.rdd.RDD[String] = FlatMappedRDD[2] at flatMap
scala> rddCow.partitions.size == rddCowWords.partitions.size
res1: Boolean = true
scala> rddCow.count == rddCowWords.count
25/04/15 10:30:28 INFO SparkContext: Starting job: count
25/04/15 10:30:28 INFO DAGScheduler: Got job 2 (count) with 3 output partitions
(allowLocal=false)
…
25/04/15 10:30:20 INFO DAGScheduler: Job 3 finished: count, took 0,11456 s
res2: Boolean = false
flatMap
rddCowWords
I've never seen a purple cow
I never hope to see one
But i can tell you, anyhow,
I’ve
never
seen
a
purple
cow
I
never
hope
to
see
one
But
i
can
tell
you,
anyhow
rddCow
21. Acciones:
Las acciones son los métodos de Spark que hacen que se ejecute todo el workflow asociado a
una acción. Hasta el momento no se ha ejecutado ninguna operación ni se han movido los datos
de los repositorios distribuidos.
Hay que tener cuidado con algunas de estas operaciones porque pueden dar como resultado el
traer todos los datos de un repositorio Big Data a una sola máquina.
A continuación enumeramos algunas de las usadas.
Spark Core
Acciones
22. foreach
Recorre todo el RDD ejecutando una acción. Esta acción no debe devolver ningún valor.
Spark Core
Acciones
(January, (3, 5, 7))
(March, (3))
(February, (5))
(June, (1, 2))
(March, (4, 4))
(January, (4, 4))
rddVisitsByMonth
scala> rddVisitsByMonth.foreach(tuple => println(tuple._2.reduce(_ + _)))
15
3
5
3
8
8
24. Jorge López-Malla Matute
jlopezm@stratio.com
CONTACTO
Introducción
● Introducción al Big Data
● Hadoop
● ¿Por qué Spark?
1 2
5
3 Spark SQL
● Introducción
● Dataframe
● ¿Cómo relacionamos Core y
SQL?
● Ejemplos prácticos
Spark core
● RDD
● Transformaciones/Acciones con
RDD
● Ejemplo de operaciones
Spark Streaming
● Introducción
● DStreams
● Operaciones "Stateful"
● ¿Cómo se relaciona con el Batch?
MlLib
● Introducción
● Algoritmos
● Ejemplos prácticos
ÍndiceÍndice
4
25. Spark Sql
Introducción
Spark SQL nace en la versión 1.0 y quiere aunar y mejorar diferentes iniciativas de
"SQL-on-Hadoop" ya existentes.
•
Ejecuta consultas SQL / HiveQL sobre RDD’s o datasources.
•
Conecta herramientas de BI a Spark mediante JDBC vía "thrift server"
•
Manejo con Python, Scala, Java, R
26. Spark Sql
DataFrame
Un DataFrame es una colección de Rows que contiene un esquema específico
indícando el nombre de las columnas y el tipo de dato que contiene cada una de
ellas.
Conceptualmente es equivalente a una tabla en una base de datos relacional
pero con una capa de optimización que transforma lógica SQL en un plan
"físico" basado en RDD’s para ser ejecutados en Spark.
27. Spark Sql
DataFrame API
El trabajo con SQL puede hacerse de forma directa haciendo consultas en este
lenguaje o haciendo uso de una completa API que han desarrollado y que permite
trabajar de forma programática con todas la funcionalidad del lenguaje y
añadiendo la propia, integrada totalmente con el core de Spark.
• Proyección y filtrado de columnas
• Joins entre datasources
diferentes
• Funciones de agregación
• Soporte para UDF’s
• API extensible
30. Spark Sql
¿Cómo mezclamos el Core con el SQL?
Como hemos explicado antes, un Dataframe no deja de ser un RDD de un tipo
concreto, Row.
La forma más sencilla de mezclarlos es mediante la creación de un Dataframe a
partir de un RDDimport org.apache.spark.sql.functions._
import sqlContext.implicits._
val flightsTicketsText = sc.textFile("/home/meetup/datasets/flightsTickets.dat")
val flightsArray = flightsText.map(line => line.split(","))
val ticketsDF = flightsArray.map(ticket =>
(ticket(0).toInt, ticket(1), ticket(2), ticket(3).toBoolean))
.toDF("idFlight", "dni", "dest", "isPersonal").cache()
31. Spark Sql
¿Cómo mezclamos el Core con el SQL?
Al ser ambos RDD también podemos hacer cualquier operación de las vistas
anteriormente para los RDD
import org.apache.spark.sql.functions._
import sqlContext.implicits._
val personsRDD = sc.textFile("/home/jlmalla/meetup/datasets/persons.dat")
.map(line => line.split(","))
.map{case (id, name, gender, revenue) => (id, (name, gender, revenue))}
val joinTicketsPersons = ticketsDF.map(row => (row(1), row)).join(personsRDD)
val fligths = joinTicketsPersons.map{
case (id, (Array((idFlight, dni, dest, isPersonal), (name, gender, revenue))) =>
(dni, name, gender, revenue, idFligth, isPersonal)}
.toDF("dni", "name", "gender", "revenue", "dest", "idFligth", "isPersonal")
32. Spark Sql
¿Cómo mezclamos el Core con el SQL?
Pero hacer esto carecería de sentido dado que todo RDD con estructura se pude
transformar a un Dataframe y aprovechar las mejoras de Spark SQL
import org.apache.spark.sql.functions._
import sqlContext.implicits._
val personsDF = sc.textFile("/home/meetup/datasets/persons.dat").map(line => line.split(","))
.map{case (dni, name, gender, revenue) => (dni, (name, gender, revenue))}
.toDF(“id", "name", "gender", "revenue“)
val joinTicketsPersons = ticketsDF.join(personsDF, ticketsDF("dni") === personsDF("id"))
val fligths = joinTicketsPersons.select("dni", "name", "gender", "revenue", "dest", "idFligth",
"isPersonal")
33. Spark Sql
Ejemplos Prácticos
Leemos los datos de los aeropuertos de un CSV los juntamos con datos de vuelos
de un RDD y escribimos las estadísticas en Mongo
36. Jorge López-Malla Matute
jlopezm@stratio.com
CONTACTO
Introducción
● Introducción al Big Data
● Hadoop
● ¿Por qué Spark?
1 2
5
3 Spark SQL
● Introducción
● Dataframe
● ¿Cómo relacionamos Core y
SQL?
● Ejemplos prácticos
Spark core
● RDD
● Transformaciones/Acciones con
RDD
● Ejemplo de operaciones
Spark Streaming
● Introducción
● DStreams
● Operaciones "Stateful"
● ¿Cómo se relaciona con el Batch?
MlLib
● Introducción
● Algoritmos
● Ejemplos prácticos
ÍndiceÍndice
4
37. Introduccion
SPARK STREAMING OVERVIEW
Spark Streaming es la solución de Spark para la análitica en tiempo real.
Al igual que Spark Core y SparkSQL tienen como unidad mínima de computación el
RDD y el Dataframe correspondienmente Spark Streaming tiene como unidad
mínima de computación: el DStream
38. Definición:
Un DStream representa una corriente de datos, un conjunto de datos que llegan de manera continua desde una
fuente. En Spark este concepto se implementa como "micro batchs" de RDDs.
Es la unidad mínima de procesamiento de Spark Streaming
Ej:
Conceptos de Spark
DStream
DStream
R
D
D
R
D
D
R
D
D
R
D
D
39. Spark Streaming
InputDStream y Receivers
La entrada de streams de datos se produce a través de los llamados InputDStream
o Receiver
•
Es común usar sistemas como Kafka, Kinesis o Apache Flume
•
Existen también receivers básicos como sockets, stream de ficheros o actores de
akka.
•
Es importante usar entradas de datos con tolerancia a fallos y alto throughput.
40. Spark Streaming
DStream
Un DStream representa una entrada de datos en tiempo real en un intervalo de
tiempo determinado.
•
La entrada de datos es dividida en micro batches.
•
Cada micro-batch es un RDD
•
El Dstream es una secuencia de RDD’s
42. Spark Streaming
Operaciones stateful (I)
Hay operaciones especiales que mantienen estados y se actualizan en cada batch
interval, son llamadas stateful.
•
Estas operaciones son UpdateStateByKey y ReduceByKeyAndWindow
•
Estos estados se mantienen en memoria. Se pueden crear, actualizar y eliminar.
•
Estas operaciones requieren de checkpointing para recuperación de errores.
El flujo normal de un stream es el siguiente
•
Cada Batch interval se genera un Dstream
•
A los datos contenidos en ese Dstream se le aplican
transformaciones
•
Se realiza una o varias acciones con estos datos.
¿Cómo haríais un simple wordcou
que se mantenga a lo largo del
tiempo?
43. Operaciones Stateful (II)
Spark Streaming
UpdateStateByKey
def updateStateByKey[S](updateFunc: (Seq[V], Option[S]) ⇒ Option[S])
• Para cada clave K mantiene un
Option[S]
• Option a None elimina el estado.
44. Spark Sql
Ejemplo
val sparkConf = new SparkConf().setAppName(“StreamingTest")
val ssc = new StreamingContext(sparkConf, Seconds(2))
val stream = TwitterUtils.createStream(ssc, None, filters)
val hashTags = stream.flatMap(status => status.getText.split(" ").filter(_.startsWith("#")))
val topCounts60 = hashTags.map((_, 1)).reduceByKeyAndWindow(_ + _, Seconds(60))
.map{case (topic, count) => (count, topic)}
.transform(_.sortByKey(false))
val topCounts10 = hashTags.map((_, 1)).reduceByKeyAndWindow(_ + _, Seconds(10))
.map{case (topic, count) => (count, topic)}
.transform(_.sortByKey(false))
// Print popular hashtags
topCounts60.foreachRDD(rdd => {
val topList = rdd.take(10)
println("nPopular topics in last 60 seconds (%s total):".format(rdd.count()))
topList.foreach{case (count, tag) => println("%s (%s tweets)".format(tag, count))}
})
ssc.start()
ssc.awaitTermination()
45. ¿Cómo relacionamos Batch y Streaming?
Spark Streaming
Como el resto de relaciones entre módulos de Spark todo tiene que ver con sus
unidades mínimas de computación.
Los DStream no son sino conjuntos de mini batches de RDDs
La combinación entre ambos módulos se hace mediante las operaciones
forEachRDD y transform
46. ¿Cómo se relaciona con el Batch?
Spark Streaming
TransformRDD
def transform[U](transformFunc: (RDD[T]) ⇒ RDD[U]) : DStream[U]
Con esta operación transformaremos todos los RDDs pertenecientes a un
micro batch.
Las operaciones que crean los RDDs que representan el “Batch” se realizan en el
driver por lo que no se corre ningún riesgo de serialización.
Con esta operación, aún **, no se puede mezclar Streaming y SQL dado que la
salida que busca es un RDD y no un Dataframe
47. ¿Cómo se relaciona con el Batch?
Spark Streaming
foreachRDD
def foreachRR[U](transformFunc: (RDD[T]) ⇒ Unit : Unit
Esta operación es exactamente igual que el foreach de un RDD sólo que aplicada a
todos los RDD contenidos en un microbatch de Streaming.
Aquí ya se puede relacionar Streaming y SQL
48. ¿Cómo se relaciona con el Batch?
Spark Streaming
val ssc = new StreamingContext(sc, Seconds(2))
ssc.checkpoint("/tmp/chechkpointdir")
val props = Map("metadata.broker.list" -> "localhost:9092", "auto.offset.reset" -> "smallest")
val kafkaStream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, props, =
Set("meetup-1"))
Val batchStream = kafkaStream.map{case (key, value) => value}.transform(rdd =>{
val context: SparkContext = rdd.sparkContext
val persons = context.textFile("/home/jlmalla/meetup/datasets/persons.dat").map(line => line.split(","))
.map{case Array(dni, name, gender, revenue) => (dni, gender)}
val fligths = rdd.flatMap(line => {
val splitedLine: Array[String] = line.split(",")
if (splitedLine.size == 3)
{
val Array(id, airpot, _) = splitedLine
Some((id, airpot))
}else None
}
)
fligths.join(persons).map{case (id, (airpot, gender)) => {
val male = if (gender == "H") 1 else 0
val female = if (gender == "M") 1 else 0
(airpot, (male, female))
}}.reduceByKey((gender1, gender2) => (gender1._1 + gender2._1, gender1._2 + gender2._2)).map{case (dest, (male,
female)) => (dest, male.toDouble, female.toDouble)}
})
49. ¿Cómo se relaciona con el Batch?
Spark Streaming
batchStream.foreachRDD(rdd => {
val context = rdd.sparkContext
val sqlContext = new SQLContext(context)
import sqlContext.implicits._
val airportStatictis = rdd.toDF("name", "male", "female")
airportStatictis.select("name", "male", "female")
.write.format("com.stratio.datasource.mongodb").mode(SaveMode.Append).options(Map("host" ->
"localhost:27017", "database" -> "meetup", "collection" -> "staticts")).save()
})
ssc.start()
ssc.awaitTermination()
51. Jorge López-Malla Matute
jlopezm@stratio.com
CONTACTO
Introducción
● Introducción al Big Data
● Hadoop
● ¿Por qué Spark?
1 2
5
3 Spark SQL
● Introducción
● Dataframe
● ¿Cómo relacionamos Core y SQL?
● Ejemplos prácticos
Spark core
● RDD
● Transformaciones/Acciones con
RDD
● Ejemplo de operaciones
Spark Streaming
● Introducción
● DStreams
● Operaciones "Stateful"
● ¿Cómo se relaciona con el Batch?
MlLib
● Introducción
● Algoritmos
● ¿Cómo se relaciona con el Batch?
● ¿Cómo se relaciona con el SQL?
● ¿Cómo se relaciona con el Streaming?
ÍndiceÍndice
4
52. MlLib
Introducción
MlLib es la librería de Machine Learning de Spark. Su objetivo es dar los
mecanismos necesarios para poder realizar diferentes algoritmias de Machine
Learning aplicadas a grandes cantidades de datos.
Como todas las piezas del ecosistema de Spark, tiene como base los RDDs para la
ejecución de estas algoritmias.
MlLib "únicamente" nos proporciona, de una manera sencilla y eficiente, los
métodos y las API necesarias para poder ejecutarlos, pero estos algoritmos tienen
que ser alimentados por modelos matemáticos generados por el usuario.
53. MlLib
Algoritmos
MlLib tiene implementados varios algoritmos de distinta índole para distintos
problemas de Machine Learning.
Dada la variedad de algoritmia relacionadas con el Machine Learning y su
complejidad explicar cada uno de estos algoritmos queda fuera de este meetup.
No obstante mostraremos el funcionamiento, mediante ejemplos, de dos
algoritmos bastante usados dentro de la comunidad de Spark KMeans y ALS
54. MlLib
Algoritmos
Todos los algoritmos de MlLib necesitan alimentarse de un RDD que les proporcione
datos para formular modelos
Algunos de estos modelos podrán ser usados más adelante para predecir el
comportamiento de otros elementos ajenos al dataset de pruebas
55. MlLib
Ejemplo ALS relación con Batch
import org.apache.spark.mllib.recommendation.ALS
import org.apache.spark.mllib.recommendation.MatrixFactorizationModel
import org.apache.spark.mllib.recommendation.Rating
val data = sc.textFile("data/mllib/als/test.data")
val ratings = data.map(_.split(',') match { case Array(user, item, rate) =>
Rating(user.toInt, item.toInt, rate.toDouble)
})
val rank = 10
val numIterations = 10
val model = ALS.train(ratings, rank, numIterations, 0.01)
val usersProducts = ratings.map {
case Rating(user, product, rate) => (user, product)
}
val predictions = model.predict(usersProducts).map { case Rating(user, product, rate) =>
((user, product), rate)
}
val ratesAndPreds = ratings.map { case Rating(user, product, rate) =>
((user, product), rate)
}.join(predictions)
56. MlLib
Ejemplo Kmeans relación con Batch
import org.apache.spark.mllib.clustering.{KMeans, KMeansModel}
import org.apache.spark.mllib.linalg.Vectors
// Load and parse the data
val data = sc.textFile("data/mllib/kmeans_data.txt")
val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble))).cache()
// Cluster the data into two classes using KMeans
val numClusters = 2
val numIterations = 20
val clusters = KMeans.train(parsedData, numClusters, numIterations)
// Evaluate clustering by computing Within Set Sum of Squared Errors
val WSSSE = clusters.computeCost(parsedData)
println("Within Set Sum of Squared Errors = " + WSSSE)
// Save and load model
clusters.save(sc, "myModelPath")
val sameModel = KMeansModel.load(sc, "myModelPath")
57. ¿Cómo se relaciona con el SQL?
MlLib
A partir de la versión 1.4.0 de Spark se ha integrado una nueva forma de usar los
RDD para cargar información para los modelos.
En vez de usar un RDD y transformalo a un formato usable por el algoritmo se
pueden usar Dataframes y cargar la información directamente usando una
variable de la tabla.
58. ¿Cómo se relaciona con el SQL?
MlLib
import org.apache.spark.ml.clustering.KMeans
import org.apache.spark.mllib.linalg.Vectors
// Crates a DataFrame
val dataset: DataFrame = sqlContext.createDataFrame(Seq(
(1, Vectors.dense(0.0, 0.0, 0.0)),
(2, Vectors.dense(0.1, 0.1, 0.1)),
(3, Vectors.dense(0.2, 0.2, 0.2)),
(4, Vectors.dense(9.0, 9.0, 9.0)),
(5, Vectors.dense(9.1, 9.1, 9.1)),
(6, Vectors.dense(9.2, 9.2, 9.2))
)).toDF("id", "features")
// Trains a k-means model
val kmeans = new KMeans()
.setK(2)
.setFeaturesCol("features")
.setPredictionCol("prediction")
val model = kmeans.fit(dataset)
// Shows the result
println("Final Centers: ")
model.clusterCenters.foreach(println)
59. ¿Cómo se relaciona con el Streaming?
MlLib
La mayoría de algoritmia relacionada con el cáculo de algoritmos de Machine
Learning es de ámbito batch, necesitamos todos los datos para calcular los
algoritomos
Desde que Spark permitió el guardado de modelos en repositorios distribuidos
se puede mezclar ambos mundos mediante la lectura del módelo y pasando este
como variable, similar a la relación de Batch y Streaming, para predecir nuevos
registros que lleguen en Streaming.
60. ¿Cómo se relaciona con el Streaming?
MlLib
import org.apache.spark.SparkConf
import org.apache.spark.mllib.clustering.KMeansModel
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.streaming.twitter._
import org.apache.spark.streaming.{Seconds, StreamingContext}
/**
* Pulls live tweets and filters them for tweets in the chosen cluster.
*/
object Predict {
def main(args: Array[String]) {
if (args.length < 2) {
System.err.println("Usage: " + this.getClass.getSimpleName + " <modelDirectory> <clusterNumber>")
System.exit(1)
}
val Array(modelFile, Utils.IntParam(clusterNumber)) =
Utils.parseCommandLineWithTwitterCredentials(args)
println("Initializing Streaming Spark Context...")
val conf = new SparkConf().setAppName(this.getClass.getSimpleName)
val ssc = new StreamingContext(conf, Seconds(5))
println("Initializing Twitter stream...")
val tweets = TwitterUtils.createStream(ssc, Utils.getAuth)
val statuses = tweets.map(_.getText)
61. ¿Cómo se relaciona con el Streaming?
MlLib
println("Initalizaing the the KMeans model...")
val model = KmeansModel.load(ssc.sparkContext, modelFile)
val filteredTweets = statuses
.filter(t => model.predict(Utils.featurize(t)) == clusterNumber)
filteredTweets.print()
// Start the streaming computation
println("Initialization complete.")
ssc.start()
ssc.awaitTermination()
}
}