Big Data e Hadoop

Propaganda
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
Download