Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Real-time Learning with Spark

Real-time Learning with Spark

En los últimos años se está produciendo un uso intensivo de las técnicas de aprendizaje automático con el fin de construir sistemas más interactivos que mejoren la experiencia del usuarios. Los algoritmos de aprendizaje automático (ML) nos permiten identificar características o información sobre nuestros usuarios o sobre el comportamiento de nuestros sistemas que sería imposible de forma manual. Aunque el uso de estos algoritmos presenta dos importantes problemas: (1) el coste computacional de construcción del modelo; y (2) la accesibilidad a los datos en tiempo real.

En esta charla presentaremos de forma sencilla como procesar datos en tiempo real (streaming) mediante la utilización de algoritmos de Machine Learning mediante Spark y MLlib. De esta forma podemos hacer evolucionar nuestro modelo en tiempo real de acuerdo con los datos que vamos recibiendo y tomar decisiones en tiempo real.

Moisés Martínez

November 19, 2016
Tweet

More Decks by Moisés Martínez

Other Decks in Research

Transcript

  1. Acerca de mi PhD en Ciencias de la Computación Planificación

    de Tareas Aprendizaje Automático No supervisado Aprendizaje Automático por Refuerzo Organizador T3chFest https://t3chfest.uc3m.es Lead Data Scientist en beBee - Affinity Networking https://es.linkedin.com/in/momartinm @moisipm
  2. ¿Por qué Real-time learning? Ingente cantidad de datos 400 millones

    300 millones tweets 4.5 billones likes 20 billones
  3. ¿Para qué nos sirve el real-time Learning ? ◉ Streaming

    ETL (Extract, Transform and Load) ◉ Detección de anomalías en datos de servidores ◉ Enriquecimiento de datos (redes sociales) ◉ Detección de anomalías en sensores ◉ Detección de fraude en transacciones bancarias ◉ …...
  4. ¿Qué es el aprendizaje Automático? Proceso de construir sistemas capaces

    de generalizar comportamientos y/o características a partir de una información no estructurada suministrada en forma de ejemplos.
  5. ¿Qué es el aprendizaje Automático? Proceso de construir sistemas capaces

    de generalizar comportamientos y/o características a partir de una información no estructurada suministrada en forma de ejemplos. Datos no estructurados Algoritmos Modelo
  6. Tipos de aprendizaje Supervisado Ejemplo etiquetados regresión (número) clasificación (clase)

    No supervisado Ejemplos no etiquetados agrupación y clustering inferencia bayesiana Características resultado
  7. Tipos de aprendizaje Por Refuerzo MDPs y POMDPs Acciones y

    Estados Transiciones y refuerzo Supervisado Ejemplo etiquetados regresión (número) clasificación (clase) No supervisado Ejemplos no etiquetados agrupación y clustering inferencia bayesiana Características resultado
  8. Detectando sillas patas 4 4 4 4 4 4 tipo

    largas largas largas largas cortas cortas color marrón gris marrón veis rojo azul material cuero ante cuero plástico algodón algodón clase silla silla silla silla sillón sillón ...
  9. Detectando sillas patas 4 4 4 4 4 4 tipo

    largas largas largas largas cortas cortas color marrón gris marrón veis rojo azul material cuero ante cuero plástico algodón algodón clase silla silla silla silla sillón sillón ...
  10. Configuración básica de un cluster SPARK + HDFS Data Node

    Name Node Executor Spark Context Worker Executor Data Node Data Node Data Node Executor Worker Executor Executor Worker Executor Executor Worker Executor Driver
  11. Configuración básica de un cluster SPARK + HDFS Data Node

    Name Node Executor Spark Context Worker Executor Data Node Data Node Data Node Executor Worker Executor Executor Worker Executor Executor Worker Executor Driver DataNode: Nodos de almacenamiento masivo
  12. Configuración básica de un cluster SPARK + HDFS Data Node

    Name Node Executor Spark Context Worker Executor Data Node Data Node Data Node Executor Worker Executor Executor Worker Executor Executor Worker Executor Driver NameNode: Coordinación de namenode y almacenamientos de metadados
  13. Configuración básica de un cluster SPARK + HDFS Data Node

    Name Node Executor Spark Context Worker Executor Data Node Data Node Data Node Executor Worker Executor Executor Worker Executor Executor Worker Executor Driver Workers: Nodos de ejecución (esclavos)
  14. Configuración básica de un cluster SPARK + HDFS Data Node

    Name Node Executor Spark Context Worker Executor Data Node Data Node Data Node Executor Worker Executor Executor Worker Executor Executor Worker Executor Driver Executors: Procesos que ejecutan las diferentes tareas
  15. RDD (Resilient Distributed Dataset) ◉ Resilient: Tolerancía a fallos mediante

    RDD lineage graph ◉ Distributed: Datos están distribuidos en diferentes nodos ◉ Dataset: Colección de datos
  16. ¿Qué es Spark Streaming? z Datos Streaming Datos Estáticos Entrenamiento

    de modelos Consultas interactivas Almacenamiento
  17. ¿Cómo funciona Spark Streaming ? RDD RDD RDD RDD RDD

    RDD Discretized Stream (DStream) Secuencia de RDDs t1 t2 t3 t4 t5 t6
  18. Almacenando datos de Kafka en HDFS val conf = new

    SparkConf().setAppName(appName).setMaster(master) val ssc = new StreamingContext( conf, Durations.seconds(5) ) Tiempo de lectura 5 segundos
  19. Almacenando datos de Kafka en HDFS val conf = new

    SparkConf().setAppName(appName).setMaster(master) val ssc = new StreamingContext( conf, Durations.seconds(5) ) val kafkaParams = Map("metadata.broker.list" -> "svkafka1:9092,svkafka2:9092,svkafka3:9092")
  20. Almacenando datos de Kafka en HDFS val conf = new

    SparkConf().setAppName(appName).setMaster(master) val ssc = new StreamingContext( conf, Durations.seconds(5) ) val kafkaParams = Map("metadata.broker.list" -> "svkafka1:9092,svkafka2:9092,svkafka3:9092") val topics = Set("sensors", "camera")
  21. Almacenando datos de Kafka en HDFS val conf = new

    SparkConf().setAppName(appName).setMaster(master) val ssc = new StreamingContext( conf, Durations.seconds(5) ) val kafkaParams = Map("metadata.broker.list" -> "svkafka1:9092,svkafka2:9092,svkafka3:9092") val topics = Set("sensors", "camera") val data = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics)
  22. Almacenando datos de Kafka en HDFS val conf = new

    SparkConf().setAppName(appName).setMaster(master) val ssc = new StreamingContext( conf, Durations.seconds(5) ) val kafkaParams = Map("metadata.broker.list" -> "svkafka1:9092,svkafka2:9092,svkafka3:9092") val topics = Set("sensors", "camera") val data = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics) data.saveAsHadoopFiles("hdfs://...")
  23. Generando un modelo con datos de Kafka val kafkaParams =

    Map("metadata.broker.list" -> "svkafka1:9092,svkafka2:9092,svkafka3:9092") val topics = Set("sensors", "camera") val trainingData = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics)
  24. Generando un modelo con datos de Kafka val trainingData =

    KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics) val model = new StreamingKMeans() .setK(10) .setDecayFactor(1.0) .setRandomCenters(12, 0.0)
  25. Generando un modelo con datos de Kafka val trainingData =

    KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics) val model = new StreamingKMeans() .setK(10) .setDecayFactor( 1.0) .setRandomCenters(12, 0.0)
  26. Generando un modelo con datos de Kafka val trainingData =

    KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics) val model = new StreamingKMeans() .setK(10) .setDecayFactor(1.0) .setRandomCenters( 12, 0.0)
  27. Generando un modelo con datos de Kafka val trainingData =

    KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics) val model = new StreamingKMeans() .setK(10) .setDecayFactor(1.0) .setRandomCenters(12, 0.0) model.trainOn(trainingData)