Big Data e Hadoop A nova fronteira para inovação 7/24/12 Monday, December 10, 12 Fabio Velloso JavaOne La)n America 4-­‐6 de dezembro de 2012 Fabio Velloso Bio Bacharel em Ciência da Computação - UFSCar MBA - FGV Programador Java desde 1996 Fundador do SouJava Gerente de Arquitetura de Sistemas Telefonica/VIVO Service Design Thinker 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Agenda Big Data e Hadoop Contexto Definição e características Cenários de uso e aplicações Hadoop Entrada de dados Serialização Automatização MapReduce Patterns 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto Explosão de dispositivos conectados na Internet 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto Explosão de dispositivos conectados na Internet Estimativa entre 16 e 50 bilhões em 2020 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto Explosão de dispositivos conectados na Internet Estimativa entre 16 e 50 bilhões em 2020 Mais dispositivos 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto Explosão de dispositivos conectados na Internet Estimativa entre 16 e 50 bilhões em 2020 Mais dispositivos Mais aplicações 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto Explosão de dispositivos conectados na Internet Estimativa entre 16 e 50 bilhões em 2020 Mais dispositivos Mais aplicações Mais conteúdo 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto March 8, 2012 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto 20 Horas 24 Petabytes de vídeo enviadas processados por minuto diariamente 72.9 produtos vendidos por segundo 1.3 Exabytes trafegados internet móvel 50 Milhões de twe&s por dia 2.9 Milhões de emails por segundo March 8, 2012 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Contexto 7/24/12 Monday, December 10, 12 JavaOne La)n America http://www.businesscomputingworld.co.uk/how-to-make-sense-of-the-big-data-universe/ 4-­‐6 de dezembro de 2012 Big Data Universidade do Texas - 2011 http://gigaom.com/cloud/big-data-equals-big-opportunities-for-businesses-infographic/#comment-660361 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Definição Conjuntos de dados muito grandes, dinâmicos e complexos para serem processados por ferramentas ou processos tradicionais 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Definição Conjuntos de dados muito grandes, dinâmicos e complexos para serem processados por ferramentas ou processos tradicionais Dificuldades: capturar, armazenar, buscar, compartilhar, analisar e visualizar 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Definição Conjuntos de dados muito grandes, dinâmicos e complexos para serem processados por ferramentas ou processos tradicionais Dificuldades: capturar, armazenar, buscar, compartilhar, analisar e visualizar Big Data não é sobre a geração de dados e sim sobre o seu processamento 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Características 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Características Volume Petabytes, Zettabytes 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Características Volume Petabytes, Zettabytes 7/24/12 Monday, December 10, 12 Variedade Dados não estruturados Dados semi-estruturados Diferentes fontes Diferentes formatos JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Características Volume Petabytes, Zettabytes 7/24/12 Monday, December 10, 12 Variedade Dados não estruturados Dados semi-estruturados Diferentes fontes Diferentes formatos Velocidade Processamento de dados Armazenamento Análise de dados JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Características 3 V Volume Petabytes, Zettabytes 7/24/12 Monday, December 10, 12 Variedade Dados não estruturados Dados semi-estruturados Diferentes fontes Diferentes formatos Velocidade Processamento de dados Armazenamento Análise de dados JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Características 3 V Volume Petabytes, Zettabytes 7/24/12 Monday, December 10, 12 Variedade Dados não estruturados Dados semi-estruturados Diferentes fontes Diferentes formatos Velocidade Processamento de dados Armazenamento Análise de dados Complexidade Tipos de dados Composição Formatos Regras JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Mudanças Volume: Terabytes Variedade: estruturado Velocidade: batch 7/24/12 Monday, December 10, 12 Zettabytes estruturado e não estruturado streaming de dados JavaOne La)n America 4-­‐6 de dezembro de 2012 Agenda Big Data e Hadoop Contexto Definição e características Cenários de uso e aplicações Hadoop Entrada de dados Serialização Automatização MapReduce Patterns 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Cenários de uso e aplicações 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Cenários de uso e aplicações Fast fashion Pouca quantidade e alta customização Baixo “Lead Time” Várias oficinas, vários estilos e opções Lojas integradas, ERP, RFID e banda larga Identifica tendências Novas tendências disponíveis em 30 dias 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Cenários de uso e aplicações Bens de consumo: análise de redes sociais para maior conhecimento do cliente, influência, comportamento, ofertas direcionadas e aumento de vendas Setor público: melhoria de vida da população, transito, melhor uso de água e energia, controle de enchentes e tragédias naturais com identificação de padrões (Global Pulse) Setor financeiro: melhoria de ofertas, retenção, vendas cruzadas, detecção de fraudes e gerenciamento de riscos 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Big Data Cenários de uso e aplicações Indústria: logística otimizada, inventário com monitoração de RFID e mapeamento de dados de GPS para agilizar a eficiência da cadeia de abastecimento Comércio eletrônico: análise de navegação, cliques e perfil, melhorando experiência do usuário em diversos canais com melhores ofertas sugeridas Saúde: análise de genoma, dados de pesquisas e histórico de pacientes e comportamentos resultando em melhoria de diagnóstico, tratamento e remédios mais eficazes University of Ontario, diagnósticos em recém-nascidos 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Case Facebook 30 PB em 2011 25 mil jobs MapReduce por dia 65 milhões de arquivos no HDFS 3000 vezes o tamanho da Biblioteca do Congresso US HDFS, MapReduce, Zookeeper e Hive (99% dos Jobs) 100 PB em 2012 Consultas Ad Hoc, Dashboards para BI Reports para os anunciantes e recomendações 7/24/12 Monday, December 10, 12 11 Dia de Java -­‐ UFSCar 24/25 de agosto de 2012 Agenda Big Data e Hadoop Contexto Definição e características Cenários de uso e aplicações Hadoop Entrada de dados Serialização Automatização MapReduce Patterns 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Hadoop Definição 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Hadoop Definição Framework open source em Java para processar um grande volume de dados em cluster de hardware “commodity” 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Hadoop Características Processamento distribuído Escala linearmente (1 a milhares de servidores - 10k) Alta disponibilidade Hardware commodity (redundância por replicação) Processamento e armazenamento em cada servidor Processamento batch e leitura intensiva Modelo simples de programação 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Componentes básicos 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Componentes básicos Responsável por distribuir e armazenar dados no cluster 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Componentes básicos Responsável por distribuir e armazenar dados no cluster 7/24/12 Monday, December 10, 12 Responsável pelo Processamento dos dados JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop HDFS Dados são divididos e armazenados em blocos distribuídos nos múltiplos nós do cluster Bloco é o volume mínimo de informação a ser lida ou escrita. Blocos de 64Mb a 128Mb Único namespace para todo o cluster Cada bloco é replicado múltiplas vezes (3 padrão) Processamento e armazenamento em cada servidor Réplicas em diferentes nós (tratamento de falhas, confiabilidade e disponibilidade) 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Master e Slave node Namenode é o master, servidor de metadados da árvore de diretórios e arquivos Datanode é o worker ou slave, armazena os dados Namenode conhece Datanodes, blocos e localização JobTracker (scheduler) e TaskTracker (task em execução) Master Node Slave node Namenode Secondary Namenode JobTracker Java Virtual Machine 7/24/12 Monday, December 10, 12 Tasktracker Datanode Java Virtual Machine JavaOne La)n America 4-­‐6 de dezembro de 2012 HDFS Data Storage Name Node 1 arquivo.txt 139Mb { 64Mb 64Mb 15Mb { { { NameNode bloco_xxxxx Name Node 2 bloco_yyyyy bloco_zzzzz Name Node 3 Name Node 4 HDFS divide o dado em blocos de 64MB e os distribui nos DataNodes 7/24/12 Monday, December 10, 12 Hadoop: The Definitive Guide JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop MapReduce Framework para processamento distribuído de grandes volumes de dados Utiliza os blocos armazenados no HDFS Pares chave-valor como input e output Algoritmos de análise são “automáticamente” paralelos Java, Ruby, Python e C++ Escala linearmente: Tempo no cluster = tempo em um core /total de cores 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Etapas Processamento Mapeamento Redução Map Worker Dados de Entrada Map Worker Map Worker 7/24/12 Monday, December 10, 12 Reduce Worker Dados Intermediários Reduce Worker Dados de saída Reduce Worker JavaOne La)n America 4-­‐6 de dezembro de 2012 Etapas Processamento Mapeamento Redução Map Worker Reduce Worker Java for all Dados de Entrada Map Worker Map Worker 7/24/12 Monday, December 10, 12 Dados Intermediários Reduce Worker Dados de saída Reduce Worker JavaOne La)n America 4-­‐6 de dezembro de 2012 Etapas Processamento Mapeamento Redução Map Worker Reduce Worker Java for all Dados de Entrada Map Worker Dados Intermediários Reduce Worker Dados de saída Hadoop for all Map Worker 7/24/12 Monday, December 10, 12 Reduce Worker JavaOne La)n America 4-­‐6 de dezembro de 2012 Etapas Processamento Mapeamento Redução Map Worker Reduce Worker Java for all Dados de Entrada Map Worker Dados Intermediários Reduce Worker Dados de saída Hadoop for all Map Worker Reduce Worker Hello World Java 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Etapas Processamento Mapeamento Map Worker Java for all Dados de Entrada Map Worker Redução all 1 for 1 Java 1 Dados Intermediários Reduce Worker Reduce Worker Dados de saída Hadoop for all Map Worker Reduce Worker Hello World Java 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Etapas Processamento Mapeamento Map Worker Java for all Dados de Entrada Map Worker Hadoop for all Map Worker Redução all 1 for 1 Java 1 Dados Intermediários all 1 for 1 Hadoop 1 Reduce Worker Reduce Worker Dados de saída Reduce Worker Hello World Java 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Etapas Processamento Mapeamento Map Worker Java for all Dados de Entrada Map Worker Hadoop for all Map Worker Hello World Java 7/24/12 Monday, December 10, 12 Redução Reduce Worker all 1 for 1 Java 1 Dados Intermediários all 1 for 1 Hadoop 1 Hello Java World Reduce Worker Dados de saída Reduce Worker 1 1 1 JavaOne La)n America 4-­‐6 de dezembro de 2012 Etapas Processamento Mapeamento Map Worker Java for all Dados de Entrada Map Worker Hadoop for all Map Worker Hello World Java 7/24/12 Monday, December 10, 12 Redução Reduce Worker all 1 for 1 Java 1 Dados Intermediários all 1 for 1 Hadoop 1 Hello Java World 1 1 1 Reduce Worker Reduce Worker Dados de saída Hadoop Hello Java World all for 1 1 2 1 2 2 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Map Função C1V1 -> list (C2V2) Entrada e saída são pares chave-valor Executa no mesmo nó onde o dado esta armazenado Interface Mapper é um tipo genérico 4 parâmetros: chaves e textos de entrada e saída Método map() Saída é agrupada e classificada pela chave 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Reduce C2, iter(V2)-> list (C3V3) Entrada é a saída do mapeamento Entrada e saída são pares chave-valor Tipos de entrada são iguais aos de saída do Map Em Java a interface Reducer é um tipo genérico Método reduce() 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Ecosistema e Ferramentas 7/24/12 Monday, December 10, 12 (SQL) (Column DB) Import e export de banco de dados Logs Avro (Serialização) Zookeeper (Coordenação) PIG (Data Flow) JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Arquitetura integrada Aplicações BI e Ferramentas de visualização BIG DATA NoSQL Hadoop NoSQL Não Hadoop Banco MPP e RDBMS DW ETL e Integração de Dados Dados estruturados e não estruturados 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Agenda Big Data e Hadoop Contexto Definição e características Cenários de uso e aplicações Hadoop Entrada de dados Serialização Automatização MapReduce Patterns 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Entrada de Dados Java e REST API Comandos UNIX POSIX ./hadoop fs -mkdir /output ./hadoop fs -put /usr/local/tmp/tweets/* /tmp/input/ ./hadoop fs -cat /tmp/input/file2 REST API Suporte completo a comandos de file system do HDFS curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CREATE [&overwrite=<true|false>][&blocksize=<LONG>][&replication=<SHORT>] [&permission=<OCTAL>][&buffersize=<INT>]" HTTP/1.1 307 TEMPORARY_REDIRECT Location: http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE... Content-Length: 0 curl -i -X PUT -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE..." Java API FileSystem, LocalFileSystem (org.apache.hadoop.fs ) 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Flume Módulo para coletar grandes volumes de logs e armazenar em um repositório centralizado Distribuído, confiável e alta disponibilidade Vários tipos e formatos de entrada Configuração em arquivo texto (Java properties) Por default serializa em formato JSON (Avro) Extensível Custom Source Criar conectores em Java (Classe AbstractSource) 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Flume Fontes de dados Data sinks tail, tailDir multitail, stdin, stdout, console Logs, syslog, UDP/TCP, Web Server log HDFS Console Source Sink syslog TCP IRC Custom Source rpc Channel Agent File (sequence ou textFile) Cassandra e MongoDB 7/24/12 Monday, December 10, 12 Plugin github JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Flume Fontes de dados tail, tailDir multitail, stdin, stdout, console Logs, syslog, UDP/TCP, Web Server log Data sinks HDFS Entidades que recebem informações Console Source Sink syslog TCP IRC Custom Source rpc Channel Agent File (sequence ou textFile) Cassandra e MongoDB 7/24/12 Monday, December 10, 12 Plugin github JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Flume Fontes de dados tail, tailDir multitail, stdin, stdout, console Logs, syslog, UDP/TCP, Web Server log Data sinks HDFS Entidades que recebem informações Console Source Sink syslog TCP IRC Custom Source rpc Channel Agent Armazena dados até a retirada por um sink File (sequence ou textFile) Cassandra e MongoDB 7/24/12 Monday, December 10, 12 Plugin github JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Flume Fontes de dados tail, tailDir multitail, stdin, stdout, console Logs, syslog, UDP/TCP, Web Server log Data sinks Entidades que recebem informações Enviam informações a outro ponto do fluxo Source Sink Console rpc syslog TCP IRC Custom Source HDFS Channel Agent Armazena dados até a retirada por um sink File (sequence ou textFile) Cassandra e MongoDB 7/24/12 Monday, December 10, 12 Plugin github JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Flume Multiplexação Consolidação multi-agent flow 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Flume Extensível Escrever um Custom Source Criar conectores em Java (Classe AbstractSource) Twitter Streaming API, REST API ou Twitter4J Dados são copiados diretamente para o HDFS Exemplo: Cloudera (flume.conf) TwitterAgent.sources = Twitter TwitterAgent.channels = MemChannel TwitterAgent.sinks = HDFS TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource TwitterAgent.sources.Twitter.channels = MemChannel TwitterAgent.sources.Twitter.consumerKey = <required> TwitterAgent.sources.Twitter.consumerSecret = <required> TwitterAgent.sources.Twitter.accessToken = <required> TwitterAgent.sources.Twitter.accessTokenSecret = <required> TwitterAgent.sources.Twitter.keywords = javaone, javaonebr, JavaoneLA 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Hadoop Import RDBMS para HDFS DBInputFormat / DBOutputFormat Leitura e escrita via JDBC Processo executa como um job Map Mecanismo “padrão” Hadoop para importar dados Limitar conexões com o banco job.setNumMapTasks(n) job.setNumReduceTasks(0) (n) - número de jobs e arquivos escritos 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Hadoop Import RDBMS para HDFS Consulta número de linhas a extrair 1 Client jdbc jdbc Extrai dados do banco Inicia Job MapReduce 2 MapReduce 3 DBInputFormat DBInputFormat DBInputFormat Map Map Map AvroOutputFormat AvroOutputFormat AvroOutputFormat Escreve dados no HDFS 4 HadoopRPC Fonte: Hadoop in Practice 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Sqoop Import e export de bancos de dados relacionais Import e export para HDFS e Hive Import para HBase Arquitetura de conectores Import tem duas fases: Conectar na fonte e obter metadados e estatísticas Disparar um MapReduce Job para o import Importa todas tabelas do banco ou tabela especificada Importa como texto separado por vírgula 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Sqoop Import de RDBMS Data sources / drivers Client Inicia import 1 2 Lê metadados Sqoop Inicia Job MapReduce Lê dados 4 3 MySQL PostgreSQL Oracle Generic JDBC DB2 SQL Server Netezza Teradata CouchDB MicroStrategy Driver JDBC Map (Sqoop) MapReduce Grava no data sink HDFS 7/24/12 Monday, December 10, 12 HBase Hive Map (Sqoop) 5 Data sink Data sinks Map (Sqoop) Data sink Data sink Driver JDBC e Fast Connector (Driver proprietário) Connectores JDBC Customizados Free (Cloudera) Connector ODBC Customizado Free (Cloudera) JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Sqoop Sintaxe e formatos Sintaxe: sqoop tool-name [tool-options] Exemplo: $ sqoop import --username admin --password abc123 \ --connect jdbc:mysql://soujava.org.br/socialmedia --table tweets --where "id > 15" Dados são importados como SequenceFiles,texto ou binário 7/24/12 Monday, December 10, 12 Formato Descrição -­‐-­‐as-­‐tex6ile Dado importado em formato CSV (padrão) -­‐-­‐as-­‐sequencefile Dado importado como SequenceFiles -­‐-­‐as-­‐avrodatafile Dado importado como arquivo Avro JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Sqoop Imports incrementais Dois modelos: append (dados numéricos incrementados e chaves auto-incremento) lastmodified (timestamp data) Parâmetros: --check-column (define a coluna) --incremental (append ou lastmodified) Exemplo: 7/24/12 Monday, December 10, 12 $ sqoop --check-column “date” \ --incremental “lastmodified” --last-value “2011-12-31” \ --connect jdbc:mysql://soujava.org.br/socialmedia \ --table tweets JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Sqoop Export para RDBMS Insert (padrão) e Update Tabela precisa estar criada --export-dir (diretório a ser exportado) --update-mode updateonly (update falha se o ID não existe no banco) allowinsert (insere apenas se o ID não existir) --update-key id Exemplo: 7/24/12 Monday, December 10, 12 $ sqoop --update-mode updateonly \ --update-key id --export-dir tweets \ --connect jdbc:mysql://soujava.org.br/socialmedia \ --table tweets_export JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Sqoop Export para RDBMS Se um job falha o dado pode ser parcial Staging table para garantir idempotência Client Inicia export 1 4 INSERT INTO tweets_export (SELECT * FROM tweets_staging) tweets_export Sqoop Inicia Job MapReduce 2 3 MapReduce Exemplo: 7/24/12 Monday, December 10, 12 Escreve na área de staging tweets_staging $ sqoop --export-dir tweets \ --connect jdbc:mysql://soujava.org.br/tweets \ --table tweets_export \ --staging-table tweets_staging --clear-staging-table JavaOne La)n America 4-­‐6 de dezembro de 2012 Bancos NoSQL MongoDB MongoDB Plugin para Flume Não suportado no Sqoop Hadoop Connector Plugin para leitura e escrita Compatível com MapReduce Jobs e Pig MongoInputFormat e MongoOutputFormat import com.mongodb.hadoop.*; import com.mongodb.hadoop.util.*; import org.bson.*; job.setInputFormatClass( MongoInputFormat.class ); job.setOutputFormatClass( MongoOutputFormat.class ); 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Bancos NoSQL Cassandra e HBase Parte do ecosistema Hadoop Compatíveis com MapReduce Jobs Plugin para Flume (para escrita nos bancos) Não suportados pelo Sqoop Suportados em scripts PIG 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Agenda Big Data e Hadoop Contexto Definição e características Cenários de uso e aplicações Hadoop Entrada de dados Serialização Automatização MapReduce Patterns 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Serialização Formatos “padrão” Hadoop Texto plano - cross platform, mas pode ser ineficiente Formato Binário SequenceFiles - eficiente mas apenas java Hadoop é escrito em Java FileSystem Shell chama Java FileSystem Dificuldades para interoperabilidade 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Avro Mecanismo de serialização Framework para serialização em diversas linguagens Melhor interoperabilidade que SequenceFiles Schemas definidos em JSON Geração de código é opcional Suporta evolução de schemas e seu versionamento Dado é convertido em formato binário, compactado e armazenado com o schema (object container format) Integração nativa com MapReduce AvroInputFormat, AvroOutputFormat, AvroMapper, AvroReducer 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Avro Serialização APIs para serialização (Java, C, C++, Ruby, Python) Tipos primitivos “null”, “boolean” “int”, “long”, “float”, “double”, “bytes” e “string” Tipos complexos “array”, “map”, “record”, “enum” e “fixed” Enum { “type”: “enum”, “name”: “SocialMedia”, “doc”: “A Social Media Name”, “symbols”: [“TWITTER”,”FACEBOOK”,“LINKEDIN”] } 7/24/12 Monday, December 10, 12 Record { “type”: “record”, “name”: “tweetsRecord”, “doc”: “Customer Tweets”, “namespace”: “org.soujava.sociamedia.twi&er”, “fields”: [ “name”: “customerId”,”type”: “int”}, “name”: “tweet”,”type”: “string”}, ] } JavaOne La)n America 4-­‐6 de dezembro de 2012 Thrift Mecanismo de serialização Geração de código Apis em C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk.... Comunicação RPC entre linguagens diferentes Não integra diretamente com MapReduce Pode-se se integrar usando Elephant Bird e Protocol Buffer Pode ser instalado em um servidor Java e servir como proxy para o HDFS 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Agenda Big Data e Hadoop Contexto Definição e características Cenários de uso e aplicações Hadoop Entrada de dados Serialização Automatização MapReduce Patterns 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Oozie Workflow Scheduler Workflows são coleções de ações Integrado com outras ferramentas MapReduce, Pig, Hive, Sqoop, Java e Shell Scripts Control flow node define o fluxo Action nodes são as taks (MapReduce Job, Pig Job, Java, envio de email API Java para integração 1 Oozie 7/24/12 Monday, December 10, 12 Coordinator Job 2 Sqoop 3 HDFS MapReduce JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Oozie Fork/Join Fork divide a execução em fluxos concorrentes Join aguarda execução concorrente Fork e Join são usados em pares <workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1"> ... <action name="secondparalleljob"> <fork name="forking"> <sqoop:sqoop> <path start="firstparalleljob"/> <job-traker>foo:9001</job-tracker> <path start="secondparalleljob"/> <name-node>bar:9000</name-node> </fork> <prepare> <action name="firstparallejob"> <delete path="${sqoopOutput}"/> <map-reduce> </prepare> <job-tracker>foo:9001</job-tracker> <conf-dir>conf/</conf-dir> <name-node>bar:9000</name-node> <command>import --connect jdbc:mysql://....</command> <job-xml>job1.xml</job-xml> </sqoop:sqoop> </map-reduce> <ok to="myotherjob"/> <ok to="joining"/> <error to="errorcleanup"/> <error to="kill"/> </action> </action> <join name="joining" to="nextaction"/> ... </workflow-app> 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Apache Oozie Switch/Case Sintaxe <workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.1"> ... <decision name="[NODE-NAME]"> <switch> <case to="[NODE_NAME]">[PREDICATE]</case> ... <case to="[NODE_NAME]">[PREDICATE]</case> <default to="[NODE_NAME]"/> </switch> </decision> ... </workflow-app> 7/24/12 Monday, December 10, 12 Exemplo <workflow-app name="foo-wf" xmlns="uri:oozie:workflow:0.1"> ... <decision name="mydecision"> <switch> <case to="reconsolidatejob"> ${fs:fileSize(secondjobOutputDir) gt 10 * GB} </case> <case to="rexpandjob"> ${fs:filSize(secondjobOutputDir) lt 100 * MB} </case> <case to="recomputejob"> ${ hadoop:counters('secondjob')[RECORDS] [REDUCE_OUT] lt 1000000 } </case> <default to="end"/> </switch> </decision> ... </workflow-app> JavaOne La)n America 4-­‐6 de dezembro de 2012 Agenda Big Data e Hadoop Contexto Definição e características Cenários de uso e aplicações Hadoop Entrada de dados Serialização Automatização MapReduce Patterns 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 MapReduce Patterns Repartition Join Conjuntos grandes de dados Após map cada registro tem como chave é o campo para join e os dados Processo Reducer executa o join (produto cartesiano) Suporta N número de fontes de dados (N-way join) Reducer particiona os dados em N partições Também conhecido como reduce side join 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 MapReduce Patterns Repartition Join CLIENTES_ERRO CONTA TIPO AGENCIA_ID 10 A 1 20 A 2 30 B 2 Tag: Clientes_Erro [Key : 1] { Value: Record: [10, A , 1] Map Tag: Agencias [Key : 2] { Value: Record: [2, Paulista] AGENCIAS AGENCIA_ID NOME 1 Alto da Boa Vista 2 Paulista 3 Sort & Merge entre Map e Reduce Moema } [Key : 1] { Value: } Tag: Clientes_Erro Record: [10, A , 1] Tag: Agencias Recod: [Alto da BoaVista, 1] } Reduce [Key : 2] { Value: Tag: Clientes_Erro Tag: Clientes_Erro Tag: Agencias Record: [20, A , 2] Record: [30, B , 2] Recod: [Paulista, 2] } [Key : 1] [ [10, A , Alto da Boa Vista] ] [Key : 2] [ [20, A , Paulista], [30, B , Paulista] ] 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 MapReduce Patterns Replicated Join Um conjunto de dados pode ficar em memória (peq) Conjunto replicado para todos os nós que fazem o Map Hadoop Distributed Cache copia os dados nos nós Hashtable onde a chave é o parâmetro do Join Map lê o(s) arquivo(s) maior(es) Não é necessário fazer sort do arquivo maior e trafegalo na rede (maior performance) Também conhecido como map side join 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 MapReduce Patterns Semi Join Dois grandes conjuntos de dados que não podem ficar em memória Log de erro no acesso e tabela de clientes Reduzir o Job Reduce, tempo de processamento e rede Remover clientes que não estão no log na tabela cliente e fazer o Join Logs do site Map Reduce Mapeia clientes Gera conjunto de clientes Lista de IDs de clientes no log 7/24/12 Monday, December 10, 12 JOB 3 JOB 2 JOB 1 Clientes Logs do site Distributed Cache Map IDs de clientes no log Mapeia clientes do log Replicated Join Clientes que estão no log Distributed Cache Map Clientes que estão no log Join de clientes com log Replicated Join Resultado JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Arquitetura integrada Aplicações BI e Ferramentas de visualização BIG DATA NoSQL Hadoop 7/24/12 Monday, December 10, 12 NoSQL Não Hadoop Banco MPP e RDBMS JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Arquitetura integrada Aplicações 1 BI e Ferramentas de visualização BIG DATA NoSQL Hadoop NoSQL Não Hadoop Banco MPP e RDBMS Dados estruturados e não estruturados 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Arquitetura integrada Aplicações 1 BI e Ferramentas de visualização BIG DATA 2 NoSQL Hadoop NoSQL Não Hadoop Banco MPP e RDBMS Dados estruturados e não estruturados 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Arquitetura integrada Aplicações 1 BI e Ferramentas de visualização BIG DATA 2 3 NoSQL Hadoop NoSQL Não Hadoop Banco MPP e RDBMS Dados estruturados e não estruturados 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Arquitetura integrada Aplicações 1 BI e Ferramentas de visualização BIG DATA 2 4 3 NoSQL Hadoop NoSQL Não Hadoop Banco MPP e RDBMS Dados estruturados e não estruturados 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Arquitetura integrada Aplicações 1 BI e Ferramentas de visualização BIG DATA 2 4 3 NoSQL Hadoop NoSQL Não Hadoop Banco MPP e RDBMS 5 Dados estruturados e não estruturados 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 Hadoop Arquitetura integrada Aplicações 1 BI e Ferramentas de visualização BIG DATA 2 4 3 NoSQL Hadoop NoSQL Não Hadoop Banco MPP e RDBMS 5 Dados estruturados e não estruturados 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 OBRIGADO !!!!! 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 OBRIGADO !!!!! @fabiovelloso [email protected] 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012 OBRIGADO !!!!! @fabiovelloso [email protected] soujava.org.br facebook.com/soujava @soujava 7/24/12 Monday, December 10, 12 JavaOne La)n America 4-­‐6 de dezembro de 2012