7/24/12
Storm
Processamento e análise real time para Big Data
! Fabio Velloso
7/24/12
Fabio Velloso
Bio
Bacharel em Ciência da Computação - UFSCar MBA FGV
Desenvolvedor Java desde 1996 Fundador do SouJava
Gerente de Arquitetura de Sistemas Telefonica|VIVO Professor de SOA e Web Services do curso de Pós-Graduação "Lato-Sensu" em Desenvolvimento de Software para Web da UFSCar
Atualmente desenvolve projetos pessoais com Big Data, Cloud Computing, Design Thinking, Service Design e
7/24/12
Agenda
Storm
Definição e características
Cenários de uso e aplicações Storm
Storm e Hadoop
7/24/12
Agenda
Storm
Definição e características
Cenários de uso e aplicações Storm
Storm e Hadoop
7/24/12
Big Data
Contexto
50 Milhões
de twetts
por dia
72.9
produtos
vendidos
por segundo
24 Petabytes
processados
diariamente
20 Horas
de vídeo enviadas
por minuto
1.3 Exabytes
trafegados
internet móvel
2.9 Milhões
de emails
por segundo
March 8, 20127/24/12
Big Data
Contexto
Fonte: http://www.ibm.com/smarterplanet/us/en/innovation_explanations/article/jeff_jonas.html
7/24/12
Big Data
7/24/12
Big Data
Contexto
7/24/12
Agenda
Storm
Definição e características
Cenários de uso e aplicações Storm
Storm e Hadoop
7/24/12
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
Big Data
Características
Complexidade Tipos de dados Composição Formatos Regras Velocidade Criação de dados Processamento de dados Armazenamento Análise de dados ! ! VariedadeDados não estruturados Dados semi-estruturados Diferentes fontes Diferentes formatos ! ! Volume Petabytes, Zettabytes ! !
V
3
7/24/12
Agenda
Storm
Definição e características
Cenários de uso e aplicações
Storm
Storm e Hadoop
7/24/12
Big Data
7/24/12
Big Data
Universidade do Texas - 2011
7/24/12
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
Big Data
Contexto
7/24/12
Agenda
Storm
Definição e características
Cenários de uso e aplicações
Storm
Storm e Hadoop
7/24/12
BackType comprada em Julho de 2011
Storm
Twitter Analytics
7/24/12
Storm
Objetivos
Escalável Transacional Velocidade no processamento Confiável Tolerante a falhas Simples Fácil de programar7/24/12
Storm
Características
Sistema para processamento distribuído
Fluxo de dados continuo (stream de dados)
Processo sempre em execução tratando eventos Real Time
Complex Event Process (CEP)
Escrito em Clojure
Utiliza ZeroMQ como framework para concorrência (Asynch I/O e push/pull sockets)
7/24/12
Storm
Cenários de uso
Processamento de fluxos de dados
RPC distribuído (paralelizar CPUs facilmente) Processamento de dados de redes sociais
Continuous computation Real time analytics
Online machine learning Internet das coisas
7/24/12
Storm
Abstrações
Stream
Fluxo contínuo de dados Sequências de tuplas
Tuple
É uma lista de valores
Campo no tuple pode ser um objeto de qualquer tipo Precisa ser serializável
Suporta String, byte arrays, ArrayList, HashMap e Hashset por default
7/24/12
Storm
Componentes
Topology - Rede de Spouts e Bolts
Bolt - responsável pelo processamento das streams de entrada
Joins, agregações, filtros e transformações Podem gerar novos stream de saída
Spout - fontes de streams de dados
7/24/12
Storm
Topologia
Spout Bolt Spout Spout Bolt7/24/12 Topologia ! ! ! ! !
Storm
Topologia
Topologia simplesBolt grava os dados em file system
Twitter Reader
(Spout) Twitter Writer (Bolt)
Spout acessa o Twitter
Busca hashtag (#TDC2013)
7/24/12
Storm
Métodos Spout
ack(), close(), fail()
open(Map conf, TopologyContext context, SpoutOutputCollector
collector)
primeiro método chamado em um Spout context com todos dados da topologia
collector é objeto utilizado para enviar dados aos Bolts
declareOutputFields(OutputFieldsDeclarer declarer)
define o dado a ser enviado para objeto Bolt declarer.declare(new Fields("tweet"));
7/24/12
Storm
Spout
nextTuple é o método principal envia o valores para objeto Bolt
nextTuple é chamado no mesmo loop de ack() e fail()
checa se existe algo a processar para liberar thread
Se não existe algo a processar libera a thread para
ack() e fail() Valor a ser enviado ao Bolt e “id” Apenas exemplo
7/24/12
Estratégias
fail() pode reenviar uma mensagem
! !
finalizar a topologia depois de um certo número de erros assumir margem de erro para tweets por exemplo
Storm
Reliability
Confiabilidade da entrega das mensagens depende da necessidade da topopogia
ack(), quando a tupla é processada corretamente fail(), quando ocorre um erro
Desenvolvedor define programaticamente
!
necessário definir tupleId
7/24/12
cleanup()
chamado quando a topologia é encerrada liberar recursos
Storm
Métodos Bolt
prepare(Map conf, TopologyContext context, SpoutOutputCollector collector)
primeiro método chamado em um Spout context com todos dados da topologia
collector é objeto utilizado para enviar dados aos bolts
declareOutputFields(OutputFieldsDeclarer declarer)
define o dado a ser enviado para outros objetos bolt declarer.declare(new Fields("tweet"));
7/24/12
Storm
Bolt
execute()
método que executa o processamento
Envia o tweet para o próximo bolt como stream Declara o dado a ser enviado
7/24/12
TopologyBuilder define como os nós são organizados e trocam mensagens
Storm
Topologia
Número de theads para execução do Bolt é
configurável, basta adicionar um parâmetro em setBolt (padrão é 1)
Métodos setSpout e setBolt
shuffleGrouping agrupa Spout e Bolts definindo o fluxo de mensagens enviadas
7/24/12
allGrouping
envio de mensagens aos Bolts. Ex: limpar cache
Storm
Stream Grouping
shuffleGrouping
envia cada tupla randomicamente para os bolts
garante que cada consumidor receba o mesmo número de tuplas
fieldsGrouping
envio controlado por definições do programador
permite envio de conteúdo similar ou relacionado para o mesmo bolt
7/24/12
Storm
Topologia
Shutdown no cluster (opcional) Define o cluster como local Configurações para o cluster Cria a topologia definida Para 1 segundo antes do shutdown Número máximo de tuplas que podem estar pendentes em7/24/12
Storm
Arquivos e compilação
7/24/12
Storm
Modos de operação
Local, topologias executam em uma máquina Remoto, topologias executam em um cluster
Componentes do Cluster
Nimbus
Supervisor e workers Zookeeper
Cluster Storm pode ser uma cadeia de Bolts
7/24/12
Storm
Cluster
Zookeeper Zookeeper Zookeeper Supervisor Supervisor Supervisor Supervisor Supervisor Nimbus7/24/12
Storm
Cluster
Nimbus
Master node
Responsável por distribuir código no cluster, definir tarefas para os nós no cluster e monitorar falhas
Similar ao Hadoop JobTracker
Supervisor
Daemon executado nos “workers” (nós que processam os dados) Recebe tarefas do Nimbus para serem executadas
7/24/12
Storm
Cluster
Para processamento em cluster usar StormSubmitter método submitTopology()
builder.createRemoteTopology
7/24/12
Storm
Cluster
Zookeeper
Coordena as ações e troca de mensagens entre o Nimbus e os Supervisors
Todo o estado é armazenado no Zookeeper ou em disco Garante o retorno do processamento reestabelecendo o Nimbus ou Supervisors em caso de falha
Projeto Apache
7/24/12
Storm
Distributed RPC
Paralelizar processamento “on the fly” Executa processamento de funções
Funções são implementadas como Bolt
DRPCClient executa uma chamada remota Distributed Remote Procedure Call
DRPC Server coordena as ações
recebe request
envia request para topologia
7/24/12
LinearDRPCTopologyBuilder
seta o Spout
retorna o resultado para o DRPC Server
prove funcionalidades para os bolts executarem agregações de grupos de tuplas
Storm
Distributed RPC
Topologia ! ! ! ! ! DRPC Spout Último Bolt Outros nós da topologia DRPC Server Request ID e resultado Request ID e argumentos DRPC Client Resultado Função e argumentosServer exposto usando Thrift API, possibilitando clientes de várias linguagens
7/24/12
Storm
Distributed RPC
Remote DRPC
configurar os endereços dos DRPC Servers (storm.yaml) Iniciar o DRPC Server
enviar as topologias ao cluster DRPC
StormSubmitter.submitTopology("reach", conf,
7/24/12
Storm
Local RPC
LinearDRPCTopologyBuilder createLocalTopology
7/24/12
Storm
7/24/12
Storm
Topologias transacionais
Introduzidas na versão 0.7
Commit é uma fase com sequêncial e ordenada Se existem 2 processos para commit este só é
executado e os dois processos executam sem falhas Duas fases: processamento e commit
Processamento ocorre em paralelo com n processos
Essas duas fases são chamadas de Storm Transaction Dados transacionais são armazenados no Zookeeper
7/24/12
AWS - S3
Storm
Suporte na Amazon WS Utilitário storm-deploy Instalar manualmenteJava 6 (mínimo, instale pelo menos o Java 7) Unzip
Python 2.6.6 Zookeeper ZeroMQ
7/24/12
Agenda
Storm
Definição e características
Cenários de uso e aplicações Storm
Storm e Hadoop
7/24/12
Responsável pelo
Processamento dos dados
Hadoop
HDFS e MapReduce
Responsável por distribuir e armazenar dados no cluster
Processamento batch, ou em lote, como paradigma HDFS para armazenar dados (entrada e saída)
7/24/12 Topologia ! ! ! !
Storm
Topologia
Segundo Bolt processa o conteúdo
Primeiro Bolt grava o “tweet” no HDFS (Hadoop REST API) e gera um stream para o próximo Bolt
Twitter Reader
(Spout) Twitter Writer (Bolt) Twitter Process (Bolt)
Spout acessa o Twitter
Busca hashtag (#TDC2013)
7/24/12 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! NoSQL Hadoop NoSQL Não Hadoop Banco MPP e RDBMS DW ! !
Storm e Hadoop
Arquitetura integrada
BI e Ferramentas de visualização ! Aplicações ! ETL e Integração de Dados ! ! ! ! ! ! ! !Spout Bolt Bolt Bolt
Hadoop REST API
7/24/12
Storm e Hadoop
Arquitetura integrada
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! NoSQL Hadoop NoSQL Não Hadoop Banco MPP e RDBMS ! ! BI e Ferramentas de visualização ! Aplicações ! ! ! ! ! Dados estruturados e não estruturados ! ! ! ! ! ! ! ! ! ! ! ! !Spout Bolt Bolt
Bolt
Hadoop REST API
7/24/12 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
BIG DATA
Eventos Milisegundos Complex Event Process Exploração interativa Segundos Hadoop HBase MongoDB Cassandra Relatórios Minutos Hadoop Hive ETL Batch Horas ETLBig Data
Processamento
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !BIG DATA
Eventos Milisegundos Complex Event Process Exploração interativa Segundos Hadoop HBase MongoDB Cassandra Relatórios Minutos Hadoop Hive ETL Batch Horas ETL7/24/12