Upload
trinhbao
View
215
Download
2
Embed Size (px)
Citation preview
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big Data e HadoopA nova fronteira para inovação Fabio Velloso
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Fabio VellosoBio
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
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
AgendaBig Data e Hadoop
Definição e características
Cenários de uso e aplicações
Hadoop
Entrada de dados
Serialização
Contexto
MapReduce Patterns
Automatização
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
Explosão de dispositivos conectados na Internet
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
Explosão de dispositivos conectados na Internet
Estimativa entre 16 e 50 bilhões em 2020
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
Explosão de dispositivos conectados na Internet
Estimativa entre 16 e 50 bilhões em 2020
Mais dispositivos
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
Explosão de dispositivos conectados na Internet
Estimativa entre 16 e 50 bilhões em 2020
Mais dispositivos
Mais aplicações
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
Explosão de dispositivos conectados na Internet
Estimativa entre 16 e 50 bilhões em 2020
Mais dispositivos
Mais aplicações
Mais conteúdo
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
March 8, 2012
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
50 Milhões de twe&s por dia
72.9 produtos vendidos
por segundo
24 Petabytesprocessadosdiariamente
20 Horasde vídeo enviadas
por minuto
1.3 Exabytestrafegados
internet móvel
2.9 Milhõesde emails
por segundoMarch 8, 2012
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataContexto
http://www.businesscomputingworld.co.uk/how-to-make-sense-of-the-big-data-universe/
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataUniversidade do Texas - 2011
http://gigaom.com/cloud/big-data-equals-big-opportunities-for-businesses-infographic/#comment-660361
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataDefinição
Conjuntos de dados muito grandes, dinâmicos e complexos para serem processados por ferramentas ou processos tradicionais
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataDefiniçã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
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataDefiniçã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
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataCaracterísticas
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataCaracterísticas
Volume
Petabytes, Zettabytes
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataCaracterísticas
Variedade
Dados não estruturados Dados semi-estruturados Diferentes fontes Diferentes formatos
Volume
Petabytes, Zettabytes
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataCaracterísticas
Velocidade
Processamento de dados Armazenamento Análise de dados
Variedade
Dados não estruturados Dados semi-estruturados Diferentes fontes Diferentes formatos
Volume
Petabytes, Zettabytes
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataCaracterísticas
Velocidade
Processamento de dados Armazenamento Análise de dados
Variedade
Dados não estruturados Dados semi-estruturados Diferentes fontes Diferentes formatos
Volume
Petabytes, Zettabytes
V3
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataCaracterísticas
Complexidade
Tipos de dados Composição Formatos Regras
Velocidade
Processamento de dados Armazenamento Análise de dados
Variedade
Dados não estruturados Dados semi-estruturados Diferentes fontes Diferentes formatos
Volume
Petabytes, Zettabytes
V3
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataMudanças
Volume: Terabytes Zettabytes
Variedade: estruturado estruturado e não estruturado
Velocidade: batch streaming de dados
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
AgendaBig Data e Hadoop
Definição e características
Cenários de uso e aplicações
Hadoop
Entrada de dados
Serialização
Contexto
MapReduce Patterns
Automatização
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataCenários de uso e aplicações
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataCenários de uso e aplicações
Fast fashion
Pouca quantidade e alta customização
Baixo “Lead Time”
Lojas integradas, ERP, RFID e banda larga
Identifica tendências
Várias oficinas, vários estilos e opções
Novas tendências disponíveis em 30 dias
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataCenários de uso e aplicações
Bens de consumo: análise de redes sociais paramaior conhecimento do cliente, influência, comportamento, ofertas direcionadas e aumento de vendas
Setor financeiro: melhoria de ofertas, retenção,vendas cruzadas, detecção de fraudes e gerenciamento de riscos
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)
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Big DataCenários de uso e aplicações
Indústria: logística otimizada, inventário commonitoraçã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 pesquisase histórico de pacientes e comportamentos resultandoem melhoria de diagnóstico, tratamento e remédios mais eficazes
University of Ontario, diagnósticos em recém-nascidos
Monday, December 10, 12
7/24/12 11 Dia de Java -‐ UFSCar24/25 de agosto de 2012
CaseFacebook
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
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
AgendaBig Data e Hadoop
Definição e características
Cenários de uso e aplicações
Hadoop
Entrada de dados
Serialização
Contexto
MapReduce Patterns
Automatização
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache HadoopDefinição
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache HadoopDefinição
Framework open source em Javapara processar um grande volumede dados em cluster de hardware“commodity”
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache HadoopCaracterísticas
Processamento distribuído
Escala linearmente (1 a milhares de servidores - 10k)
Alta disponibilidade
Processamento e armazenamento em cada servidor
Processamento batch e leitura intensiva
Hardware commodity (redundância por replicação)
Modelo simples de programação
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopComponentes básicos
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopComponentes básicos
Responsável por distribuir e armazenar dados no cluster
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Responsável peloProcessamento dos dados
HadoopComponentes básicos
Responsável por distribuir e armazenar dados no cluster
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopHDFS
Dados são divididos e armazenados em blocosdistribuí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
Processamento e armazenamento em cada servidor
Réplicas em diferentes nós (tratamento de falhas, confiabilidade e disponibilidade)
Cada bloco é replicado múltiplas vezes (3 padrão)
Único namespace para todo o cluster
Monday, December 10, 12
Master Node
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopMaster e Slave node
Namenode
Slave node
Java Virtual Machine
JobTracker
Java Virtual Machine
SecondaryNamenode DatanodeTasktracker
Namenode é o master, servidor de metadadosda á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)
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HDFSData Storage
HDFS divide o dado em blocos de 64MB e os distribui nos DataNodes
arquivo.txt
NameNode
Name Node 1
Name Node 2
Name Node 3
Name Node 4
bloco_xxxxx
bloco_yyyyy
bloco_zzzzz
64Mb
64Mb
15Mb
139Mb
Hadoop: The Definitive Guide
{{{{
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopMapReduce
Framework para processamento distribuído de grandes volumes de dados
Algoritmos de análise são “automáticamente” paralelos
Java, Ruby, Python e C++
Utiliza os blocos armazenados no HDFS
Pares chave-valor como input e output
Escala linearmente:
Tempo no cluster = tempo em um core /total de cores
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
EtapasProcessamento
Dados de Entrada
MapWorker
Dados Intermediários
ReduceWorker
Dados desaída
MapWorker
MapWorker
ReduceWorker
ReduceWorker
Mapeamento Redução
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
EtapasProcessamento
Dados de Entrada
MapWorker
Dados Intermediários
ReduceWorker
Dados desaída
MapWorker
MapWorker
ReduceWorker
ReduceWorker
Mapeamento Redução
Java for all
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
EtapasProcessamento
Dados de Entrada
MapWorker
Dados Intermediários
ReduceWorker
Dados desaída
MapWorker
MapWorker
ReduceWorker
ReduceWorker
Mapeamento Redução
Java for all
Hadoop for all
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
EtapasProcessamento
Dados de Entrada
MapWorker
Dados Intermediários
ReduceWorker
Dados desaída
MapWorker
MapWorker
ReduceWorker
ReduceWorker
Mapeamento Redução
Java for all
Hadoop for all
Hello World Java
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
EtapasProcessamento
Dados de Entrada
MapWorker
Dados Intermediários
ReduceWorker
Dados desaída
MapWorker
MapWorker
ReduceWorker
ReduceWorker
Mapeamento Redução
Java for all
Hadoop for all
Hello World Java
all 1for 1Java 1
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
EtapasProcessamento
Dados de Entrada
MapWorker
Dados Intermediários
ReduceWorker
Dados desaída
MapWorker
MapWorker
ReduceWorker
ReduceWorker
Mapeamento Redução
Java for all
Hadoop for all
Hello World Java
all 1for 1Java 1
all 1for 1Hadoop 1
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
EtapasProcessamento
Dados de Entrada
MapWorker
Dados Intermediários
ReduceWorker
Dados desaída
MapWorker
MapWorker
ReduceWorker
ReduceWorker
Mapeamento Redução
Java for all
Hadoop for all
Hello World Java
all 1for 1Java 1
all 1for 1Hadoop 1
Hello 1Java 1World 1
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
EtapasProcessamento
Dados de Entrada
MapWorker
Dados Intermediários
ReduceWorker
Dados desaída
MapWorker
MapWorker
ReduceWorker
ReduceWorker
Mapeamento Redução
Java for all
Hadoop for all
Hello World Java
all 1for 1Java 1
all 1for 1Hadoop 1
Hello 1Java 1World 1
Hadoop 1Hello 1Java 2World 1all 2for 2
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopMap
Função C1V1 -> list (C2V2)
Interface Mapper é um tipo genérico
4 parâmetros: chaves e textos de entrada e saída
Entrada e saída são pares chave-valor
Executa no mesmo nó onde o dado esta armazenado
Método map()Saída é agrupada e classificada pela chave
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopReduce
C2, iter(V2)-> list (C3V3)
Tipos de entrada são iguais aos de saída do Map
Em Java a interface Reducer é um tipo genérico
Entrada é a saída do mapeamento
Entrada e saída são pares chave-valor
Método reduce()
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopEcosistema e Ferramentas
Z
ooke
eper
(
Coor
dena
ção)
(SQL)
(Column DB)
PIG (Data Flow)
Import e exportde banco de dados
Avr
o
(Se
rializ
ação
)
Logs
Monday, December 10, 12
Dados estruturadose não estruturados
BIG DATA
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
NoSQLHadoop
NoSQLNão
Hadoop
BancoMPP e RDBMS
DW
HadoopArquitetura integrada
BI e Ferramentas
de visualizaçãoAplicações
ETL e Integração de
Dados
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
AgendaBig Data e Hadoop
Definição e características
Cenários de uso e aplicações
Hadoop
Entrada de dados
Serialização
Contexto
MapReduce Patterns
Automatização
Monday, December 10, 12
REST API Suporte completo a comandos de file system do HDFS
Comandos UNIX POSIX
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Entrada de DadosJava e REST API
Java API FileSystem, LocalFileSystem (org.apache.hadoop.fs )
./hadoop fs -mkdir /output
./hadoop fs -put /usr/local/tmp/tweets/* /tmp/input/
./hadoop fs -cat /tmp/input/file2
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_REDIRECTLocation: 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..."
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
ApacheFlume
Módulo para coletar grandes volumes de logs e armazenar em um repositório centralizadoDistribuí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)
Monday, December 10, 12
Plugingithub
Agent
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
ApacheFlume
tail, tailDir multitail,
stdin, stdout, console
Logs, syslog, UDP/TCP,
Web Server log
IRC
CustomSource
Fontesde dados
Source Sink
Data sinks
HDFS
File (sequence ou textFile)
Console
rpc
syslog TCP
Channel
Cassandra eMongoDB
Monday, December 10, 12
Plugingithub
Agent
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
ApacheFlume
tail, tailDir multitail,
stdin, stdout, console
Logs, syslog, UDP/TCP,
Web Server log
IRC
CustomSource
Fontesde dados
Source Sink
Data sinks
HDFS
File (sequence ou textFile)
Console
rpc
syslog TCP
Entidades que recebem informações
Channel
Cassandra eMongoDB
Monday, December 10, 12
Plugingithub
Agent
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
ApacheFlume
tail, tailDir multitail,
stdin, stdout, console
Logs, syslog, UDP/TCP,
Web Server log
IRC
CustomSource
Fontesde dados
Source Sink
Data sinks
HDFS
File (sequence ou textFile)
Console
rpc
syslog TCP
Entidades que recebem informações
Armazena dados até a retirada por um sink
Channel
Cassandra eMongoDB
Monday, December 10, 12
Plugingithub
Agent
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
ApacheFlume
tail, tailDir multitail,
stdin, stdout, console
Logs, syslog, UDP/TCP,
Web Server log
IRC
CustomSource
Fontesde dados
Source Sink
Data sinks
HDFS
File (sequence ou textFile)
Console
rpc
syslog TCP
Entidades que recebem informações
Enviam informações a outro ponto do fluxo
Armazena dados até a retirada por um sink
Channel
Cassandra eMongoDB
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
ApacheFlume
ConsolidaçãoMultiplexação
multi-agent flow
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache FlumeExtensí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 = TwitterTwitterAgent.channels = MemChannelTwitterAgent.sinks = HDFS
TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSourceTwitterAgent.sources.Twitter.channels = MemChannelTwitterAgent.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
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
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
Apache HadoopImport RDBMS para HDFS
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache HadoopImport RDBMS para HDFS
Fonte: Hadoop in Practice
Map Map Map
DBInputFormat DBInputFormat
AvroOutputFormatAvroOutputFormat AvroOutputFormat
HadoopRPC
Client
DBInputFormat
jdbc
jdbc
MapReduce
1Consulta
número de linhas a extrair
2Inicia JobMapReduce
4Escreve dados no
HDFS
3Extrai dados do banco
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
ApacheSqoop
Import e export de bancos de dados relacionais
Import e export para HDFS e Hive
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
Import para HBase
Importa como texto separado por vírgula
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Sqoop
Map(Sqoop)
Client
1
3
2
Apache SqoopImport de RDBMS
Map(Sqoop)
Map(Sqoop)
Datasink
Datasink
Datasink
MapReduce
4
5
HDFS HiveHBaseData sinks
MySQL
Data sources / drivers
DB2
Oracle
PostgreSQL
Generic JDBC
Driver JDBC
Driver JDBC eFast Connector (Driver proprietário)
Netezza
SQL Server
MicroStrategyCouchDB
Connectores JDBCCustomizadosFree (Cloudera)
Connector ODBCCustomizadoFree (Cloudera)
Lê metadados
Lê dados
Grava no data sink
Inicia import
Inicia JobMapReduce
Teradata
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache SqoopSintaxe e formatos
Sintaxe: sqoop tool-name [tool-options]
Dados são importados como SequenceFiles,texto ou binário
$ sqoop import --username admin --password abc123 \ --connect jdbc:mysql://soujava.org.br/socialmedia --table tweets --where "id > 15"
Exemplo:
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
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache SqoopImports 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)
$ sqoop --check-column “date” \ --incremental “lastmodified” --last-value “2011-12-31” \ --connect jdbc:mysql://soujava.org.br/socialmedia \ --table tweets
Exemplo:
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache SqoopExport 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$ sqoop --update-mode updateonly \ --update-key id --export-dir tweets \ --connect jdbc:mysql://soujava.org.br/socialmedia \ --table tweets_export
Exemplo:
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache SqoopExport para RDBMS
Se um job falha o dado pode ser parcial
Staging table para garantir idempotência
$ sqoop --export-dir tweets \ --connect jdbc:mysql://soujava.org.br/tweets \ --table tweets_export \ --staging-table tweets_staging --clear-staging-table
Exemplo:
Sqoop
Client
1
2
4
MapReduce
INSERT INTO tweets_export(SELECT * FROM tweets_staging)
Inicia export
Inicia JobMapReduce
tweets_export
tweets_staging
3Escreve na área de staging
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Bancos NoSQL MongoDB
MongoDB Plugin para Flume
Hadoop Connector Plugin para leitura e escrita Compatível com MapReduce Jobs e Pig MongoInputFormat e MongoOutputFormat
Não suportado no Sqoop
import com.mongodb.hadoop.*;import com.mongodb.hadoop.util.*;import org.bson.*;
job.setInputFormatClass( MongoInputFormat.class );job.setOutputFormatClass( MongoOutputFormat.class );
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Bancos NoSQL Cassandra e HBase
Compatíveis com MapReduce Jobs
Suportados em scripts PIG
Plugin para Flume (para escrita nos bancos)
Não suportados pelo Sqoop
Parte do ecosistema Hadoop
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
AgendaBig Data e Hadoop
Definição e características
Cenários de uso e aplicações
Hadoop
Entrada de dados
Serialização
Contexto
MapReduce Patterns
Automatização
Monday, December 10, 12
Texto plano - cross platform, mas pode ser ineficiente
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
SerializaçãoFormatos “padrão” Hadoop
Formato Binário
SequenceFiles - eficiente mas apenas java
Hadoop é escrito em Java
FileSystem Shell chama Java FileSystem
Dificuldades para interoperabilidade
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
AvroMecanismo 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
Integração nativa com MapReduce AvroInputFormat, AvroOutputFormat, AvroMapper, AvroReducer
Dado é convertido em formato binário, compactado e armazenado com o schema (object container format)
Monday, December 10, 12
Tipos primitivos “null”, “boolean” “int”, “long”, “float”, “double”, “bytes” e “string”
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
AvroSerialização
APIs para serialização (Java, C, C++, Ruby, Python)
Enum Record
{ “type”: “enum”, “name”: “SocialMedia”, “doc”: “A Social Media Name”, “symbols”: [“TWITTER”,”FACEBOOK”,“LINKEDIN”]}
{ “type”: “record”, “name”: “tweetsRecord”, “doc”: “Customer Tweets”, “namespace”: “org.soujava.sociamedia.twi&er”, “fields”: [ “name”: “customerId”,”type”: “int”}, “name”: “tweet”,”type”: “string”}, ]}
Tipos complexos “array”, “map”, “record”, “enum” e “fixed”
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
ThriftMecanismo 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 ProtocolBuffer Pode ser instalado em um servidor Java e servir como proxy para o HDFS
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
AgendaBig Data e Hadoop
Definição e características
Cenários de uso e aplicações
Hadoop
Entrada de dados
Serialização
Contexto
MapReduce Patterns
Automatização
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache OozieWorkflow 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
HDFS
SqoopOozie
MapReduceCoordinator
Job
1
3
2
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache OozieFork/Join
<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1"> ... <fork name="forking"> <path start="firstparalleljob"/> <path start="secondparalleljob"/> </fork> <action name="firstparallejob"> <map-reduce> <job-tracker>foo:9001</job-tracker> <name-node>bar:9000</name-node> <job-xml>job1.xml</job-xml> </map-reduce> <ok to="joining"/> <error to="kill"/> </action>
Join aguarda execução concorrente
Fork e Join são usados em pares
Fork divide a execução em fluxos concorrentes
<action name="secondparalleljob"> <sqoop:sqoop> <job-traker>foo:9001</job-tracker> <name-node>bar:9000</name-node> <prepare> <delete path="${sqoopOutput}"/> </prepare> <conf-dir>conf/</conf-dir> <command>import --connect jdbc:mysql://....</command> </sqoop:sqoop> <ok to="myotherjob"/> <error to="errorcleanup"/> </action> <join name="joining" to="nextaction"/> ...</workflow-app>
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Apache OozieSwitch/Case
<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>
<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>
Sintaxe Exemplo
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
AgendaBig Data e Hadoop
Definição e características
Cenários de uso e aplicações
Hadoop
Entrada de dados
Serialização
Contexto
MapReduce Patterns
Automatização
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
MapReduce PatternsRepartition Join
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
Conjuntos grandes de dados
Também conhecido como reduce side join
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
MapReduce PatternsRepartition Join
AGENCIA_ID NOME1 Alto da Boa Vista
2 Paulista
3 Moema
Tag: Clientes_Erro[Key : 1] { Value: } Record: [10, A , 1]
CONTA TIPO AGENCIA_ID
10 A 1
20 A 2
30 B 2 Tag: Agencias[Key : 2] { Value: } Record: [2, Paulista]
Tag: Clientes_Erro Tag: Agencias[Key : 1] { Value: } Record: [10, A , 1] Recod: [Alto da BoaVista, 1]
Reduce
Map
[Key : 1] [ [10, A , Alto da Boa Vista] ]
[Key : 2] [ [20, A , Paulista], [30, B , Paulista] ]
Tag: Clientes_Erro Tag: Clientes_Erro Tag: Agencias[Key : 2] { Value: } Record: [20, A , 2] Record: [30, B , 2] Recod: [Paulista, 2]
AGENCIAS
CLIENTES_ERRO
Sort & Mergeentre Map e Reduce
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
MapReduce PatternsReplicated Join
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 trafega-lo na rede (maior performance)
Um conjunto de dados pode ficar em memória (peq)
Também conhecido como map side join
Monday, December 10, 12
JOB 2 JOB 3
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
MapReduce PatternsSemi Join
Log de erro no acesso e tabela de clientes
Reduzir o Job Reduce, tempo de processamento e rede
Dois grandes conjuntos de dados que não podem ficar em memória
JOB 1
Reduce
Logsdo site
Mapeiaclientes
Gera conjunto de clientes
Lista de IDs de clientesno log
Distributed CacheMap
Map
Clientes
Clientes que estão no log
Mapeia clientes do log Replicated Join
IDs de clientesno log
Distributed Cache
Logs do site
Resultado
Clientesque estão
no log
Remover clientes que não estão no log na tabela cliente e fazer o Join
Join de clientes com logReplicated Join
Map
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopArquitetura integrada
BIG DATA
NoSQLHadoop
NoSQLNão
Hadoop
BancoMPP e RDBMS
BI e Ferramentas
de visualizaçãoAplicações
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopArquitetura integrada
BIG DATA
NoSQLHadoop
NoSQLNão
Hadoop
BancoMPP e RDBMS
BI e Ferramentas
de visualizaçãoAplicações
Dados estruturadose não estruturados
1
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopArquitetura integrada
BIG DATA
NoSQLHadoop
NoSQLNão
Hadoop
BancoMPP e RDBMS
BI e Ferramentas
de visualizaçãoAplicações
Dados estruturadose não estruturados
1
2
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopArquitetura integrada
BIG DATA
NoSQLHadoop
NoSQLNão
Hadoop
BancoMPP e RDBMS
BI e Ferramentas
de visualizaçãoAplicações
Dados estruturadose não estruturados
1
2 3
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopArquitetura integrada
BIG DATA
NoSQLHadoop
NoSQLNão
Hadoop
BancoMPP e RDBMS
BI e Ferramentas
de visualizaçãoAplicações
Dados estruturadose não estruturados
1
2 34
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopArquitetura integrada
BIG DATA
NoSQLHadoop
NoSQLNão
Hadoop
BancoMPP e RDBMS
BI e Ferramentas
de visualizaçãoAplicações
Dados estruturadose não estruturados
1
2 34
5
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
HadoopArquitetura integrada
BIG DATA
NoSQLHadoop
NoSQLNão
Hadoop
BancoMPP e RDBMS
BI e Ferramentas
de visualizaçãoAplicações
Dados estruturadose não estruturados
1
2 34
5
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
OBRIGADO !!!!!
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
OBRIGADO !!!!!
@fabiovelloso
Monday, December 10, 12
7/24/12 JavaOne La)n America4-‐6 de dezembro de 2012
OBRIGADO !!!!!
@fabiovelloso
facebook.com/soujava
@soujava
soujava.org.br
Monday, December 10, 12