Alta performance no processamento de Big Data com Spark e Lambda Expressions Claudio Seidi @claudio_seidi Fabio Velloso @fabiovelloso Cláudio Seidi Bacharel em Ciência da Computação - IME/USP Java desde 1998 Arquiteto de Sistemas desde 2001 Certificado Cloudera Atualmente na área de BI da Telefonica/VIVO Fabio Velloso Consultor da Summa Technologies Co-Fundador e Diretor SouJava Bacharel em Ciência da Computação - UFSCar ! Professor de Arquitetura Orientada a Serviços - UFSCar Projetos com Java desde 1996 Ü Atualmente trabalhando em projetos de Integração, Big Data e Cloud Computing Y Palestrante em JavaOne, Abaporu, TDC, JustJava, Dia de Java, Café Brasil, Campus Party Agenda ! Contexto ! Spark ! Aplicações ! API ! Arquiteturas F Big Data - Um Minuto na Internet em 2014 306 horas de conteúdo enviados 80 mil produtos vendidos SectionName 4.19 milhões de buscas 433 mil tweets 67 mil uploads de fotos 600 mil logins 50.200 downloads 3,4 mil uploads Fonte: http://www.adweek.com/socialtimes/internet-minute-2013-2014/504301 www.companyname.com 450 uploads 136.319.444 de emails biG data ! Hadoop Framework open source em Java para processar um grande volume de dados em cluster de hardware “commodity” F Hadoop Responsável por distribuir e armazenar dados no cluster Responsável pelo Processamento dos dados ! Hadoop MAP MAP Worker Java for all Dados de Entrada MAP Worker Hadoop for all MAP Worker Hello World Java Reduce all 1 for 1 Java 1 reduce Worker Dados de Intermediários all 1 for 1 Hadoop 1 Hello 1 Java 1 World 1 Batch Dados de saída reduce Worker reduce Worker Hadoop 1 Hello 1 Java 2 World 1 all 2 for 2 ! Hadoop / Map Reduce ! MapReduce possibilitou e difundiu o conceito de “Big Data” analítics Não é eficiente para analises mais complexas e multi-stage: Iterative Machine Learning & graph processing (não map/reduce) Iterative ad-hoc queries & Iterative algorithms Streaming processing Doug Cutting e Spark “It’s easy to program, and it uses memory more efficiently, as not all intermediate data goes to disk.” “Over time, fewer projects will use MapReduce, and more will use Spark” “But it doesn’t make MapReduce obsolete overnight” http://www.techweekeurope.co.uk/workspace/cloudera-offers-apache-spark-hadoop-big-data-138723 SPARK “Fast and general engine for large-scale data processing” Criado para Machine Learning Distribuído e Data Mining ! Abstração de alto nível ! API’s em Java, Python e Scala e shell iterativo Mais rápido que Hadoop até 100 vezes? ! Camadas Aplicações RDD based tables Spark Engine e API’s Spark SQL RDD Based Matrices RDD Streams Spark Streaming (real time processing) MLlib (Machine Learning) Spark Core Resource Management Storage Spark Core Spark Libs RDD Based Graphs GraphX (Graph Processing) Java Python Scala ! Camadas e HFDS Aplicações RDD based tables Spark Engine e API’s Spark SQL RDD Streams Spark Streaming (real time processing) RDD Based Matrices MLlib (Machine Learning) Spark Core YARN HDFS Spark Core Resource/Cluster Manager Spark Libs Storage RDD Based Graphs GraphX (Graph Processing) Java Python Scala ! Camadas Aplicações RDD based tables Spark Engine e API’s Spark SQL RDD Based Matrices RDD Streams Spark Streaming (real time processing) MLlib (Machine Learning) Spark Core Standalone, YARN, Mesos HDFS, Lustre, EC2/S3 Spark Core Resource/Cluster Manager Spark Libs Storage RDD Based Graphs GraphX (Graph Processing) Java Python Scala ! Camadas e conceitos Driver Program SparkContext Cluster Manager Standalone, YARN ou MESOS Worker Node Worker Node Worker Node Worker Node Executor Cache Executor Cache Executor Cache Executor Cache Task Task Task Task Task Task Task Task RDD - Resilient Distributed dataset ! Unidade básica de dado no Spark ! Abstração de memória distribuída ! Coleção de registros para leitura ! Se particionado é executado em vários nós do cluster ! Não é replicado, é reconstruído em caso de falha RDD sparqsql.txt Seamlessly mix SQL queries with Spark programs. Spark SQL lets you query structured data as a distributed dataset (RDD) in Spark, with integrated APIs in Python, Scala and Java. This tight integration makes it easy to run SQL queries alongside complex analytic algorithms. RDD Seamlessly mix SQL queries with Spark programs. Spark SQL lets you query structured data as a distributed dataset (RDD) in Spark, with integrated APIs in Python, Scala and Java. This tight integration makes it easy to run SQL queries alongside complex analytic algorithms. RDD ! Criado através de leitura de um dataset externo ! Criado através coleções de objetos (List ou Set) Operações RDD Transformações Ações Retorna um novo RDD filter map Retornam valores first count RDD inputRDD Seamlessly mix SQL queries with Spark programs. Spark SQL lets you query structured data as a distributed dataset (RDD) in Spark, with integrated map log => data, bytes trafegados filter log => codRet == 304 APIs in Python, Scala and Java. This tight integration makes it easy to run SQL queries alongside complex analytic algorithms. mappedRDD count [23/Mar/2014:15:08:07 - 0700] , 189937 filteredRDD # de palavras Operações RDD Transformações map(func), filter(func), flatMap(func), mapPartitionsWithIndex(func), union(otherDataset), groupByKey([numTasks]), sample(withReplacement, fraction, seed), intersection(otherDataset), reduceByKey(func, [numTasks]), (seqOp, combOp, [numTasks]), join(otherDataset, [numTasks]), cartesian(otherDataset), mapPartitions(func), aggregateByKey(zeroValue), sortByKey([ascending], [numTasks]), cogroup(otherDataset, [numTasks]), pipe(command, [envVars]), repartition(numPartitions), distinct([numTasks])), coalesce(numPartitions), repartitionAndSortWithinPartitions(partitioner) Operações RDD Ações reduce(func), collect(), count(), first(), takeSample(withReplacement, num, [seed]), saveAsTextFile(path), takeOrdered(n, [ordering]), *saveAsSequenceFile(path) , *saveAsObjectFile(path), foreach(func) * (Java e Scala) take(n), countByKey(), Spark e java 7 SectionName www.companyname.com Lambda Expressions ! Funções anônimas ou closures () -> ! Características de programação funcional ! Programação concorrente e event-driven (ou “reactive") ! Código mais conciso, claro e elegante SectionName www.companyname.com Lambda Expressions ! Uma expressão Lambda é composta de três partes Argument List Arrow Token (int x, int y) ! ! SectionName -> (x, y) -> x+y x -> x*10 (name) -> { System.out.println(“Olá” + name); } Processamento de coleções www.companyname.com Body x+y () -> ! Spark e Lambda Expressions ! Java 7 ! Java 8 e Lambda Expression SectionName www.companyname.com Spark e Lambda Expressions SectionName Spark e Lambda Expressions scala> val arqTxt = sc.textFile(“teste.txt") Shell scala> val palavras = arqTxt.flatMap(line => line.split(“\\W")) scala> val contaPalavras = palavras.countByValue() JaVA SPARK - Alta Performance Processamento em memória e cache de dados Carga e processamento respeitando localidade Micro batch architecture e Stream Directed Acyclic Graph (DAG) engine RDD - Lineage graph filter _.(isAtivo) textFile() Clientes Clientes Ativos Clientes JOIN Cliente Produto textFile() Produtos JOIN Campanha Adequação FILTER Consumo > Franquia Produtos textFile() fillter Consumo Mensal Consumo Mensal Cliente Consumo Consumo 2015 Jan_MAIO REDUCE BY KEY Média Consumo save() DAG Clientes Clientes Ativos Cliente Produto filter _.(isAtivo) Produtos Cliente Consumo CampanhA Adequação JOIN save() estágio 1 Consumo Mensal Consumo 2015 Jan_MAIO filter FILTER Consumo > Franquia Média Consumo JOIN estágio 2 REDUCE BY KEY estágio 3 \ Mineração de dados ! SectionName Atividade com o objetivo de obter conhecimento ! Algoritmos de Machine Learning ! Reconhecimento de Padrões ! Estatística www.companyname.com ! Machine Learning Definição Formal - Tom Mitchell (1998) ! Dizemos que um programa de computador está aprendendo quando: de uma experiência E, a respeito de uma tarefa T e com uma medida de desempenho P, se o seu desempenho em T, medido em P, melhora com a experiência E. T SectionName ! T (Tarefa) - fazer gol ! E (experiência) - chutar a bola ! P (Desempenho) - número de gols marcados www.companyname.com P E ! Machine Learning 29/Maio/2015 http://www.computerworld.com/article/2927931/robotics/why-apple-is-developing-artificial-intelligence.html SectionName www.companyname.com ! Machine Learning 29/Maio/2015 http://www.zdnet.com/article/google-bets-machine-learning-can-create-an-edge-with-android-apps-cloud/ SectionName www.companyname.com ! Machine Learning Não é ficção! Vários serviços/produtos são baseados nesta tecnologia. Facebook: Detecção e Reconhecimento de Faces É capaz de reconhecer até o rosto de um japonês! SectionName www.companyname.com Amazon: Recomendação de Livros (Collaborative Filter) ! Machine Learning Supervisionado SectionName Fonte: https://adcalves.files.wordpress.com/2014/06/ml-flowchart.jpg Não Supervisionado ! Machine Learning Necessidade de alta performance Dado é acessado iterativamente Spark mais indicado Dados em memória ! Baixa latência Sistema de recomendação Sistema de Recomendação Ideal Desafios da Vida Real Grande Volume de Dados Único jeito de adivinhar o gosto do cliente! X Escalabilidade Diversidade de Clientes e gostos Ataques “Shilling attacks” Sistema de recomendação Filtro Colaborativo Sistema de recomendação Filtro Colaborativo Usuários similares Recomendação ! Executado para todos os usuários e a cada nova informação Tipos de Sistema de Recomendação ! Baseado no Usuário ! Baseado em Itens ! Machine learning Por que Spark é indicado para Machine Learning? Logistic regression in Hadoop and Spark SectionName www.companyname.com ! Machine Learning HDFS Read HDFS Write HDFS Read HDFS Write 1a Iteração 2a Iteração 1a Iteração 2a Iteração Input HDFS Read Input Spark mais performático a cada iteração ! Machine learning http://pt.slideshare.net/cloudera/spark-webinar-92314-dl ! MLLIB ! Algoritmos e estruturas para Machine Learning Classificação, Collaborative Filtering, Clustering SectionName ! mllib E MAHOUT SectionName www.companyname.com ! MLLIB Conjunto ainda incompleto de algoritmos SectionName www.companyname.com ! mllib Algoritmos em implementação Redes Neurais SectionName www.companyname.com Spark StreAming Receivers batches of input data Micro-batch architecture Streaming em pequenos “batches” de dados Processar com funções como map, reduce, join … ! Spark StreAm DStream ou discretized stream data from time 0 to 1 DStream ! Abstração de stream contínuo de dados ! Sequência de RDDs ! Intervalo de criação configurável a partir de 500ms 0 log lines DStream fraudes DStream data from time 1 to 2 1 data from time 2 to 3 2 data from time 3 to 4 3 4 data from time 0 to 1 data from time 1 to 2 data from time 2 to 3 data from time 3 to 4 data from time 0 to 1 data from time 1 to 2 data from time 2 to 3 data from time 3 to 4 tempo Filter detectar fraudes Spark StreAm Spark SQL ! Módulo para trabalhar com dados estruturados e não estruturados ! SQL, JDBC e ODBC JSON, Hive, Bancos relacionais via JDBC, Parquet, HDFS, S3 ! Avro, CSV, ElasticSearch e Cassandra ! SQLContext e HiveContext ! DataFrame Spark SQL - DataFrame “Coleção de dados distribuídos e organizados em colunas com nomes” DataFrame é análogo a uma tabela de um banco relacional. Pode ser construído a partir de arquivos, tabelas e RDDs DataFrame { RDD Cliente Cliente Cliente Schema Nome Endereço Telefone Email Nome Endereço Telefone Email Nome Endereço Telefone Email Spark SQL JDBC Spark SQL Spark e NoSQL ! Acesso a dados carregados no HDFS Spark SQL Streaming MLib Spark Core GraphX Java Scala Python YARN HDFS NoSQL ! Conectores Fonte: http://web.eecs.umich.edu/~prabal/teaching/resources/eecs582/armbrust15sparksql.pdf Spark e NoSQL Arquitetura integrada Dados agregados baixa latência Fonte de Dados Aplicações Online Data Mining e Aplicações Batch Raw Data e Dados Históricos SectionName Arquitetura integrada Dados agregados baixa latência ArduinO Aplicações Online Data Mining e Aplicações Batch Raspberry Pi Intel Galileo RFID Raw Data e Dados Históricos SectionName ! Conclusão ! Spark para algoritmos iterativos ! Usado em conjunto com Hadoop e HDFS ! Batch em Hadoop ! Spark Stream, Spark SQL e Spark Graphx ! Lambda para código mais conciso SectionName www.companyname.com Perguntas ?? Obrigado !! Claudio Seidi @claudio_seidi Fabio Velloso @fabiovelloso