Processe Big Data em Tempo Real com Twitter Storm

Uma introdução ao fluxo de big data

Storm é um sistema de processamento de big data de software livre, diferente de outros sistemas por ter sido criado para processamento em tempo real distribuído e por ser independente de linguagem. Saiba mais sobre Twitter Storm, sua arquitetura e o espectro de soluções de processamento de lote e de fluxo.

M. Tim Jones, Independent author, Consultor

M.Tim JonesM. Tim Jones é arquiteto de firmware embarcado e autor de Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (na segunda edição), AI Application Programming (na segunda edição) e BSD Sockets Programming from a Multilanguage Perspective. Sua experiência com engenharia inclui o desenvolvimento de kernels para espaçonaves geossíncronas, arquitetura de sistemas embarcados e desenvolvimento de protocolos de rede. Tim é arquiteto de plataforma da Intel e autor em Longmont, Colorado.



26/Nov/2012

Hadoop, o rei da analítica de big data, é focado em processamento em lote. Esse modelo é suficiente para muitos casos (como indexação da web), mas existem outros modelos de uso nos quais são necessários informações em tempo real vindas de origens altamente dinâmicas. A tentativa de solução desse problema resultou na criação de Storm, por Nathan Marz (agora no Twitter via BackType). Storm não trabalha com dados estáticos, mas sim com dados contínuos. Com os usuários do Twitter gerando 140 milhões de tweets por dia, é fácil entender como essa tecnologia é útil.

Mas Storm é mais que um sistema tradicional de analítica de big data: é um exemplo de sistema complex event-processing (CEP). Sistemas CEP são geralmente categorizados como sendo orientados a cálculo e detecção, cada um dos quais pode ser implementados em Storm usando algoritmos definidos pelo usuário. CEPs podem, por exemplo, ser usados para identificar eventos significativos em uma avalanche de eventos e realizar ações relacionadas a eles em tempo real.

Nathan Marz dá alguns exemplos de uso de Storm no Twitter. Um dos mais interessantes é a geração de informações de tendência. O Twitter extrai tendências emergentes do jato de tweets e as mantém no nível local e nacional. Isso significa que, quando um assunto começa a surgir, os algoritmos de assuntos do momento ("trending topics") identificam o tópico em tempo real. Esse algoritmo em tempo real é implementado em Storm como uma análise contínua de dados do Twitter.

O que significa "big data"?

Big data indica uma escala de dados que não pode ser gerenciada por meios convencionais. Os dados na escala da Internet motivou a criação de novas arquiteturas e aplicativos capazes de processar essa nova classe de dados. Essas arquiteturas são altamente escaláveis e processam dados em paralelo entre vários servidores de forma eficiente.

Storm em relação a big data tradicional

O que diferencia Storm de outras soluções de big data é o seu paradigma. Hadoop é basicamente um sistema de processamento em lote. Os dados são introduzidos no Hadoop file system (HDFS) e distribuídos entre nós para processamento. Quando o processamento é concluído, os dados resultantes são devolvidos ao HDFS para uso do originador. Storm permite a criação de topologias que transformam fluxos não terminados de dados. Essas transformações, ao contrário das tarefas de Hadoop, nunca param, continuando a processar os dados à medida que eles chegam.


Implementações de big data

O núcleo de Hadoop foi escrito na linguagem Java™, mas oferece suporte para aplicativos de analítica de dados escritos em diversas linguagens. Soluções mais recentes usaram meios mais esotéricos para suas implementações, para explorar linguagens modernas e seus recursos. Por exemplo, Spark, da Universidade da Califórnia (UC) em Berkeley, é implementado na linguagem Scala, enquanto Twitter Storm é implementado em Clojure (pronuncia-se como a palavra em inglês closure).

Clojure é um dialeto moderno da linguagem Lisp. Clojure, assim como Lisp, oferece suporte para um estilo funcional de programação, mas também incorpora recursos para simplificar a programação multiencadeada (um recurso útil para a criação de Storm). Clojure é uma linguagem baseada em máquina virtual (VM) que é executada na Java virtual machine. Mas, apesar de Storm ter sido desenvolvido em Clojure, é possível escrever aplicativos para Storm em quase qualquer linguagem. É preciso apenas um adaptador para conectar à arquitetura de Storm. Existem adaptadores para Scala, JRuby, Perl e PHP, e um adaptador de Structured Query Language que oferece suporte de fluxo em uma topologia Storm.


Principais atributos de Storm

Storm implementa um conjunto de características que o define em termos de desempenho e confiabilidade. Storm usa ZeroMQ para passagem de mensagens, o que remove o enfileiramento intermediário e permite que as mensagens passem diretamente entre as próprias tarefas. Sob a capa do sistema de mensagens existe um mecanismo automatizado e eficiente para serialização e desserialização para os tipos primitivos de Storm.

O que torna Storm mais interessante é seu foco em tolerância a falhas e gerenciamento. Storm implementa um processamento garantido de mensagens, de modo que cada tupla é totalmente processada através da topologia. Quando é descoberta uma tupla que não foi processada, ela é automaticamente reproduzida novamente a partir do spout. Storm também implementa detecção de falhas no nível de tarefa, o que significa que, quando uma tarefa falha, as mensagens são automaticamente reatribuídas para reiniciar rapidamente o processamento. Storm inclui um processamento de processo mais inteligente que Hadoop, no qual processos são gerenciados por supervisores para garantir que os recursos sejam usados adequadamente.


O modelo Storm

Storm implementa um modelo de fluxo de dados no qual os dados fluem continuamente através de uma rede de entidades de transformação (veja a Figura 1). A abstração de um fluxo de dados é chamada de fluxo, que é uma sequência de tuplas sem limite. A tupla é como uma estrutura que pode representar tipos de dados padrão (como números inteiros, flutuações e array de bytes) ou tipos definidos pelo usuário com algum código de serialização adicional. Cada fluxo é definido por um ID exclusivo que pode ser usado para criar topologias de origens e dissipadores de dados. Os fluxos originam-se de spouts, que passam dados de origens externas para a topologia de Storm.

Figura 1. Arquitetura conceitual de uma topologia trivial de Storm
Arquitetura conceitual de uma topologia trivial de Storm

Os dissipadores (ou entidades que fornecem transformações) são chamados de bolts. Bolts implementam uma única transformação em um fluxo e todo o processamento em uma topologia de Storm. Bolts podem implementar coisas tradicionais, como funcionalidade Mapear/Reduzir, ou ações mais complexas (funções de etapa única), como filtragem, agregações ou comunicação com entidades externas, como um banco de dados. Uma topologia típica de Storm implementa várias transformações e, portanto, requer vários bolts com fluxos de tuplas independentes. Spouts e bolts são implementados como uma ou mais tarefas em um sistema Linux®.

É possível usar Storm para implementar facilmente a funcionalidade Mapear/Reduzir para frequência de palavras. Como mostra a Figura 2, um spout gera o fluxo de dados textuais, e um bolt implementa a função Map (para converter as palavras de um fluxo em token). Em seguida, o fluxo resultante do bolt "map" passa por um único bolt que implementa a função Reduce (para agregar as palavras em contagens).

Figura 2. Topologia simples de Storm para a função Mapear/Reduzir
Topologia simples de Storm para a função Mapear/Reduzir

Observe que bolts podem passar dados para mais de um bolt e aceitar dados de mais de uma origem. Storm tem o conceito de agrupamentos de fluxos, que implementa ordenação aleatória (distribuição aleatória, porém igual, de tuplas para bolts) ou agrupamento de campo (particionamento de fluxos com base em seus campos). Existem outros agrupamentos de fluxo, incluindo a capacidade do produtor de encaminhar tuplas usando sua própria lógica interna.

Mas um dos recursos mais interessantes na arquitetura de Storm é o conceito de processamento de mensagens garantido. Storm pode garantir que cada tupla que um spout emite será processada. Se não for processada dentro de um tempo limite, Storm reproduz novamente a tupla a partir do spout. Essa funcionalidade exige alguns truques para rastrear a tupla através da topologia e é uma das adições de valor de Storm.

Além de oferecer suporte a sistema de mensagens confiável, Storm usa ZeroMQ para maximizar o desempenho de mensagens (removendo o enfileiramento intermediário e implementando a passagem direta de mensagens entre as tarefas). ZeroMQ incorpora detecção de congestionamento e altera sua comunicação para otimizar a largura de banda disponível.


Storm através de exemplos

Vamos agora examinar um exemplo de Storm através de código para implementar uma simples topologia Mapear/Reduzir (consulte a Listagem1). Usamos o exemplo de contagem de palavras do ótimo kit para iniciantes de Nathan, disponível em GitHub (consulte Recursos para obter um link). Esse exemplo ilustra a topologia mostrada na Figura 2, que implementa uma transformação de mapa que consiste em um bolt e uma transformação de redução consistindo em um único bolt.

Listagem 1. Crie uma topologia em Storm para a Figura 2
01  TopologyBuilder builder = new TopologyBuilder();
02          
03  builder.setSpout("spout", new RandomSentenceSpout(), 5);
04          
05  builder.setBolt("map", new SplitSentence(), 4)
06           .shuffleGrouping("spout");
07  
08  builder.setBolt("reduce", new WordCount(), 8)
09           .fieldsGrouping("map", new Fields("word"));
10  
11  Config conf = new Config();
12  conf.setDebug(true);
13  
14  LocalCluster cluster = new LocalCluster();
15  cluster.submitTopology("word-count", conf, builder.createTopology());
16  
17  Thread.sleep(10000);
18  
19  cluster.shutdown();

A Listagem 1 (números de linha incluídos para referência) começa com a declaração de uma nova topologia usando TopologyBuilder. Em seguida, na linha 3, é definido um spout (chamado spout) que consiste em RandomSentenceSpout. A classe RandomSentenceSpout (especificamente, o método nextTuple) emite uma de cinco frases aleatórias e seus dados. O argumento 5 no final do método setSpout é uma sugestão de paralelismo (ou o número de tarefas a serem criadas para essa atividade).

Nas linhas 5 e 6, eu defino o primeiro bolt (ou entidade de transformação algorítmica) — nesse caso, o bolt (ou divisão) de mapeamento. Esse bolt usa SplitSentence para converter o fluxo de entrada em token e emite como saída palavras individuais. Observe o uso de shuffleGrouping na linha 6, que define a assinatura de entrada desse bolt (nesse caso, "spout"), mas também que o agrupamento de fluxo está definido como ordenação aleatória. Esse agrupamento de ordenação aleatória significa que a entrada do spout será ordenada aleatoriamente, ou distribuída de forma aleatória a tarefas nesse bolt (que tem uma sugestão de paralelismo de quatro tarefas).

Nas linhas 8 e 9, eu defino o último bolt, que serve efetivamente como elemento de redução, tendo como entrada o bolt de mapeamento. O método WordCount implementa a contagem de palavras necessária (agrupando palavras semelhantes para manter a contagem geral), mas não é ordenado aleatoriamente, de modo que sua saída é consistente. Se houvesse mais de uma tarefa implementando o comportamento de redução, o resultado seria contagens segmentadas, e não gerais.

As linhas 11 e 12 criam e definem um objeto de configuração e ativam o modo de depuração. A classe Config contém um grande número de possibilidades de configuração (a seção Recursos contém um link para mais informações sobre a árvore de classes de Storm).

As linhas 14 e 15 criam o cluster local (nesse caso, definindo o uso do modo Local). Eu defino o nome do meu cluster local, meu objeto de configuração e minha topologia (recuperados através do elemento createTopology da classe builder).

Por fim, na linha 17, Storm suspende suas atividades por uma duração e depois encerra o cluster na linha 19. Lembre-se que Storm é um sistema operacional contínuo, portanto, as tarefas podem existir por um período considerável, operando em novas tuplas em fluxos dos quais são assinantes.

Para saber mais sobre essa implementação surpreendentemente simples, incluindo os detalhes de spout e dos bolts, confira o kit de iniciantes de Storm.


Usando Storm

Nathan Marz escreveu um conjunto legível de documentações que explica a instalação de Storm para os modos de operação em cluster e local. O modo local permite usar Storm sem precisar de um grande cluster de nós. Para quem precisa usar Storm em cluster, mas não tem os nós, é possível também implementar um cluster Storm na Amazon Elastic Compute Cloud (EC2). A seção Recursos contém uma referência para cada modo Storm (Local, Cluster e Amazon EC2).


Outras soluções de big data de software livre

Desde que o Google introduziu o paradigma Mapear/Reduzir em 2004, apareceram várias soluções que usam (ou têm qualidades do) paradigma original. O aplicativo original do Google para Mapear/Reduzir era a indexação da World Wide Web. Embora esse aplicativo continue sendo muito usado, o número de problemas que esse simples modelo resolve está crescendo.

A Tabela 1 contém uma lista de soluções de big data de software livre disponíveis, incluindo aplicativos tradicionais de lote e fluxo. Quase um ano antes de Storm ser introduzido no software livre, a plataforma de computação de fluxo distribuída S4, do Yahoo!, foi lançada como software livre através da Apache. S4, lançado em outubro de 2010, é uma plataforma high-performance computing (HPC) que oculta a complexidade do processamento paralelo do desenvolvedor de aplicativo. S4 implementa uma arquitetura de cluster descentralizada, que é escalável e incorpora tolerância parcial a falhas.

Tabela 1. Soluções de big data de software livre
SoluçãoDesenvolvedorTipoDescrição
StormTwitterFluxoA nova solução de analítica de big data em fluxo do Twitter
S4Yahoo!FluxoPlataforma de stream computing distribuído do Yahoo!
HadoopApacheLotePrimeira implementação em software livre do paradigma Mapear/Reduzir
SparkUC Berkeley AMPLabLotePlataforma analítica recente que oferece suporte para conjuntos de dados na memória e resiliência
DiscoNokiaLoteEstrutura Mapear/Reduzir distribuída da Nokia
HPCCLexisNexisLoteCluster HPC para big data

Avançando

Embora Hadoop continue a ser a solução de analítica de big data mais conhecida, existem várias outras possibilidades, cada uma com diferentes características. Em artigos passados, eu explorei Spark, que incorpora recursos na memória para conjuntos de dados (com a capacidade de redesenvolver dados que foram perdidos). Mas Hadoop e Spark concentram-se no processamento em lote de grandes conjuntos de dados. Storm representa um novo modelo para analítica de big data e, como passou a ser software livre recentemente, gerou um interesse considerável.

Ao contrário de Hadoop, Storm é um sistema de cálculo e não incorpora o conceito de armazenamento. Isso permite que Storm seja usado em diversos contextos, quer os dados cheguem de forma dinâmica de uma origem não tradicional, ou sejam armazenados em um sistema como um banco de dados (ou consumidos por um controlador para manipulação em tempo real de algum outro dispositivo, como um sistema de troca).

Consulte Recursos para links para mais informações sobre Storm, como começar a usar um cluster e outras soluções de analítica de big data (em lote e em fluxo).

Recursos

Aprender

  • O processamento de eventos complexos é o padrão implementado por Storm e por muitas outras soluções, como S4 do Yahoo!. Uma diferença importante entre Storm e S4 é que Storm oferece processamento garantido de mensagens em caso de falha, enquanto S4 pode perder mensagens.
  • Nathan Marz, o principal desenvolvedor de Storm, escreveu várias instruções interessantes e úteis sobre sua nova oferta. O primeiro vislumbre de Storm veio em maio de 2011, em Preview of Storm: The Hadoop of Realtime Processing - BackType Technology, que foi seguido, em agosto, por A Storm is coming: more details and plans for release.
  • O Storm wiki contém ótima documentação sobre Storm, a justificativa para criá-lo e diversos tutoriais para obter Storm e configurar um novo projeto. Você também encontrará um conjunto útil de documentação sobre muitos aspectos de Storm, incluindo o uso de Storm em modo local, em clusters e na Amazon.
  • Spark, uma alternativa para a analítica de dados rápida (M. Tim Jones, developerWorks, novembro de 2011) é uma introdução à plataforma de analítica de dados resiliente na memória da UC Berkeley.
  • Virtualização de aplicativos, passado e futuro (M. Tim Jones, developerWorks, maio de 2011) explica o uso de virtualização para abstrações de linguagem. Storm usa a linguagem Clojure, baseada em VM, para sua implementação, além da tecnologia Java e muitas outras linguagens para desenvolver seus aplicativos internos (bolt).
  • Existe uma profunda árvore de classes em GitHub para Storm, detalhando suas classes e interfaces.
  • Hadoop começou a tratar de modelos além do simples processamento em lote. Por exemplo, através de planejamento, Hadoop pode alterar a maneira como processa dados para concentrar-se em interatividade em vez de processamento de dados no nível dos lotes. Saiba mais sobre o planejamento em Hadoop em Planejamento no Hadoop (M. Tim Jones, developerWorks, dezembro de 2011).
  • A zona de Open Source do developerWorks traz diversas informações sobre ferramentas de software livre e sobre o uso de tecnologias de software livre.
  • Fique atualizado com os eventos técnicos e webcasts do developerWorks dedicados a diversos produtos da IBM e tópicos do segmento de mercado de TI.
  • Participe de um briefing ao vivo e gratuito do developerWorks Live! para atualizar-se rapidamente sobre produtos e ferramentas da IBM, além de tendências do segmento de mercado de TI.
  • Acompanhe as demos on demand do developerWorks que vão de demos de instalação e configuração de produtos para iniciantes a funcionalidade avançada para desenvolvedores experientes.
  • Siga o developerWorks no Twitter. Também é possível seguir este autor no Twitter em M. Tim Jones.

Obter produtos e tecnologias

  • ZeroMQ é a camada de transporte inteligente para sistema de mensagens eficiente em ambientes escaláveis. No site do ZeroMQ, é possível conhecer a oferta, saber como usá-la para solucionar problemas e como apoiar esse esforço.
  • Apache Zookeeper é um projeto em software livre que permite coordenação distribuída altamente confiável. Storm usa Zookeeper para coordenar entre um conjunto de nós dentro de um cluster.
  • Clojure é a linguagem usada para implementar o sistema de Storm. Clojure é uma derivação recente da linguagem Lisp, criada por Rich Hicky como uma linguagem geral, que também simplifica a programação multiencadeada.
  • Apache Hadoop é a plataforma desenvolvida pelo Yahoo! para programação de Mapear/Reduzir. Recentemente, recebeu a companhia de Spark da UC Berkeley, uma oferta de big data de software livre, resiliente e na memória, desenvolvida em Scala.
  • Além de Storm, várias outras ofertas de big data estão disponíveis como software livre. Yahoo! S4 é outra plataforma de big data baseada em fluxo. Outras ofertas orientadas a lotes, como Hadoop, incluem o projeto Disco da Nokia e LexisNexis HPCC.
  • Avalie produtos IBM da melhor maneira para você: faça download de uma versão de avaliação do produto, experimente-o online, use-o em um ambiente de nuvem ou passe algumas horas na SOA Sandbox aprendendo a implementar a Arquitetura Orientada a Serviços de forma eficiente.

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux, Software livre, Tecnologia Java
ArticleID=846978
ArticleTitle=Processe Big Data em Tempo Real com Twitter Storm
publish-date=11262012