Os logs vêm em todos os formatos, mas, à medida que aplicativos e infraestruturas crescem, o resultado é uma quantia massiva de dados distribuídos úteis para mineração. De servidores da web e de correio a logs de kernel e de inicialização, os servidores modernos retêm um rico conjunto de informações. Quantias massivas de dados distribuídos são uma aplicação perfeita para o Apache Hadoop, assim como são arquivos de log — de dados textuais estruturados e ordenados por horário.
É possível usar processamento de log para extrair diversas informações. Um de seus usos mais comuns é extrair erros ou contar a ocorrência de algum evento dentro de um sistema (como falhas de logins). Também é possível extrair alguns tipos de dados de desempenho, como conexões ou transações por segundo. Outras informações úteis incluem a extração (mapa) e criação de vistas de sites (redução) de um log da web. Essa análise também pode suportar a detecção de visitas de usuários exclusivas, além de estatísticas de acesso a arquivo.
Estes exercícios proporcionam prática em:
- Ativar um ambiente Hadoop simples e colocá-lo em execução
- Interagir com o sistema de arquivos do Hadoop (HDFS)
- Escrever um aplicativo MapReduce simples
- Escrever uma consulta de filtragem do Apache Pig
- Escrever uma consulta acumulativa do Pig
Para aproveitar estes exercícios ao máximo, é necessário ter um conhecimento de trabalho básico do Linux®. também é útil ter algum conhecimento de dispositivos virtuais para ativar um ambiente simples.
Exercício 1. Ativar um ambiente Hadoop simples e colocá-lo em execução
Há duas maneiras de ativar o Hadoop e colocá-lo em execução. A primeira é instalar o software Hadoop e, em seguida, configurá-lo para seu ambiente (o caso mais simples é uma instância de nó único, na qual todos os daemons são executados em um único nó). Consulte Processamento de Dados Distribuídos com Hadoop, Parte 1: Introdução para obter detalhes.
A segunda maneira, e a mais simples, é com o uso da VM Demo do Hadoop da Cloudera (que contém uma imagem do Linux e uma instância do Hadoop configurada). A máquina virtual (VM) da Cloudera é executada no VMware, em Kernel-based Virtual Machine (KVM) ou no Virtualbox.
Escolha um dos métodos e conclua a instalação. Em seguida, execute as tarefas a seguir:
- Verifique se o Hadoop está em execução emitindo um comando
lsdo HDFS.
Exercício 2. Interagir com o HDFS
O HDFS é um sistema de arquivos de uso específico que gerencia dados e réplicas em um cluster do
Hadoop, distribuindo-os a nós de cálculo para processamento eficiente.
Apesar de o HDFS ser de uso específico, ele implementa muitos dos comandos típicos do sistema de arquivos.
Para recuperar informações da ajuda para o
Hadoop, emita o comando hadoop dfs. Execute as tarefas a seguir:
- Crie um subdiretório de teste no HDFS.
- Mova um arquivo do sistema de arquivos local para o subdiretório do HDFS usando
copyFromLocal. - Para obter crédito extra, visualize o arquivo no HDFS usando um comando
hadoop dfs.
Exercício 3. Escrever um aplicativo MapReduce simples
Conforme demonstrado no Processamento de Dados Distribuídos com Hadoop, Parte 3: Desenvolvimento de aplicativo, escrever um aplicativo de mapa e redução de contagem de palavras é simples. Usando o exemplo do Ruby demonstrado naquele artigo, desenvolva um aplicativo Python de mapa e redução e execute-o em um conjunto de dados de amostra. Lembre-se de que o Hadoop classifica a saída de mapa de forma que palavras semelhantes apareçam próximas, fornecendo uma otimização útil para o redutor.
Exercício 4. Escrever uma consulta simples do Pig
Como você viu no Processe seus dados com Apache Pig, o Pig permite desenvolver scripts simples que são convertidos em aplicativos MapReduce. Neste exercício, você extrai todas as entradas de log (de /var/log/messages) que contêm a palavra kernel: e a palavra terminating.
- Crie um script que extraia todas as linhas do log com os critérios predefinidos.
Exercício 5. Escrever uma consulta de agregação do Pig
Mensagens de log são geradas por diversas fontes no kernel Linux (como
kernel ou dhclient). Neste exemplo, o objetivo é descobrir as várias fontes que geram mensagens de log e a sua quantidade por fonte.
- Crie um script que conte o número de mensagens de log para cada fonte.
A saída específica depende de sua instalação e configuração específicas do Hadoop.
Solução para o Exercício 1. Ativar um ambiente Hadoop simples e colocá-lo em execução
No Exercício 1, um comando ls é executado no HDFS.
A Listagem 1 ilustra a solução adequada.
Listagem 1. Executando uma operação ls no HDFS
$ hadoop dfs -ls / drwxrwxrwx - hue supergroup 0 2011-12-10 06:56 /tmp drwxr-xr-x - hue supergroup 0 2011-12-08 05:20 /user drwxr-xr-x - mapred supergroup 0 2011-12-08 10:06 /var $ |
Mais ou menos arquivos podem estar presentes, dependendo do uso.
Solução para o Exercício 2. Interagir com o HDFS
No Exercício 2, um subdiretório é criado no HDFS um arquivo é copiado para ele. Observe que os dados de teste são criados movendo o buffer de mensagem de kernel para um arquivo.
Para obter crédito extra, visualize o arquivo no HDFS usando o comando cat
(consulte a Listagem 2).
Listagem 2. Manipulando o HDFS
$ dmesg > kerndata $ hadoop dfs -mkdir /test $ hadoop dfs -ls /test $ hadoop dfs -copyFromLocal kerndata /test/mydata $ hadoop dfs -cat /test/mydata Linux version 2.6.18-274-7.1.el5 (mockbuild@builder10.centos.org)... ... e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX $ |
Solução para o Exercício 3. Escrever um aplicativo MapReduce simples
No Exercício 3, é criado um aplicativo MapReduce simples de contagem de palavras em Python. Python é, na verdade, uma linguagem excelente na qual implementar o exemplo de contagem de palavras. É possível localizar um breve relatório útil sobre Python MapReduce em Writing a Hadoop MapReduce Program in Python por Michael G. Noll.
Este exemplo supõe que as etapas do exercício 2 tenham sido executadas (para absorver dados no HDFS). A Listagem 3 fornece o aplicativo de mapa.
Listagem 3. Aplicativo de mapa no Python
#!/usr/bin/env python
import sys
for line in sys.stdin:
line = line.strip()
words = line.split()
for word in words:
print '%s\t1' % word
|
A Listagem 4 fornece o aplicativo de redução.
Listagem 4. O aplicativo de redução em Python
#!/usr/bin/env python
from operator import itemgetter
import sys
last_word = None
last_count = 0
cur_word = None
for line in sys.stdin:
line = line.strip()
cur_word, count = line.split('\t', 1)
count = int(count)
if last_word == cur_word:
last_count += count
else:
if last_word:
print '%s\t%s' % (last_word, last_count)
last_count = count
last_word = cur_word
if last_word == cur_word:
print '%s\t%s' % (last_word, last_count)
|
A Listagem 5 ilustra o processo para chamar o exemplo Python MapReduce no Hadoop.
Listagem 5. Testando o Python MapReduce com o Hadoop
$ hadoop jar /usr/lib/hadoop-0.20/contrib/streaming/hadoop-streaming-0.20.2-cdh3u2.jar \ -file pymap.py -mapper pymap.py -file pyreduce.py -reducer pyreduce.py \ -input /test/mydata -output /test/output ... $ hadoop dfs -cat /test/output/part-00000 ... write 3 write-combining 2 wrong. 1 your 2 zone: 2 zonelists. 1 $ |
Solução para o Exercício 4. Escrever uma consulta simples do Pig
No Exercício 4, são extraídas as entradas de log de /var/log/messages que contêm a palavra kernel: e a palavra terminating. Neste caso, o Pig é usado em modo local para consultar o arquivo local (consulte a Listagem 6). Carregue o arquivo em uma relação (log) do Pig, filtre seu conteúdo para somente mensagens com kernel e, em seguida, filtre essa relação resultante para mensagens com terminating.
Listagem 6. Extraindo todas as mensagens de log com kernel + terminating
$ pig -x local grunt> log = LOAD '/var/log/messages'; grunt> logkern = FILTER log BY $0 MATCHES '.*kernel:.*'; grunt> logkernterm = FILTER logkern BY $0 MATCHES '.*terminating.*'; grunt> dump logkernterm ... (Dec 8 11:08:48 localhost kernel: Kernel log daemon terminating.) grunt> |
Solução para o Exercício 5. Escrever uma consulta de agregação do Pig
No Exercício 5, extraia as fontes de logs e as contagens de mensagens de log de /var/log/messages.
Neste caso, crie um script para a consulta e execute-o por meio do modo local do Pig.
Na Listagem 7, carregue o arquivo e analise a entrada usando um espaço como um delimitador.
Em seguida, designe os campos de cadeia de caractere delimitados para seus elementos denominados.
Use o operador GROUP para agrupar as mensagens por sua fonte e, em seguida, use os operadores
FOREACH e
COUNT para agregar seus dados.
Listagem 7. Script de fontes de logs e de contagens para /var/log/messages
log = LOAD '/var/log/messages' USING PigStorage(' ') AS (month:chararray, \
day:int, time:chararray, host:chararray, source:chararray);
sources = GROUP log BY source;
counts = FOREACH sources GENERATE group, COUNT(log);
dump counts;
|
O resultado é mostrado executado na Listagem 8.
Listagem 8. Executando seu script de fontes de logs
$ pig -x local logsources.pig ... (init:,1) (gconfd,12) (kernel:,505) (syslogd,2) (dhclient:,91) (localhost,1168) (gpm[2139]:,2) [gpm[2168]:,2) (NetworkManager:,292) (avahi-daemon[3345]:,37) (avahi-daemon[3362]:,44) (nm-system-settings:,8) $ |
Aprender
- Distributed computing with Linux and Hadoop (Ken Mann e M. Tim Jones, developerWorks, dezembro de 2008): Descubra o Hadoop do Apache, uma estrutura de software baseada em Linux que permite a manipulação distribuída de vastas quantias de dados, incluindo indexação paralela de páginas da web na Internet.
- Processamento de Dados Distribuídos com Hadoop, Parte 1: Introdução (M. Tim Jones, developerWorks, maio de 2010): Explore a estrutura do Hadoop, incluindo seus elementos fundamentais, como os sistemas de arquivos do Hadoop (HDFS), tipos de nós comuns e maneiras para monitorar e gerenciar o Hadoop usando suas principais interfaces da web. Saiba como instalar e configurar um cluster do Hadoop de nó único e se aprofunde no aplicativo MapReduce.
- Processamento
de Dados Distribuídos com Hadoop, Parte 2: Indo mais longe (M. Tim Jones, developerWorks, junho de 2010): Configure uma instalação mais avançada com o Hadoop em um cluster com diversos nós para processamento paralelo. Será possível trabalhar com a funcionalidade MapReduce em um ambiente paralelo e explorar a linha de comando e os aspectos de gerenciamento baseado na web do Hadoop.
- Processamento de Dados Distribuídos com Hadoop, Parte 3: Desenvolvimento de aplicativo (M. Tim Jones, developerWorks, julho e 2010): Explore as APIs e o fluxo de dados do Hadoop e saiba como usá-los com um aplicativo simples mapeador e redutor.
- Processe seus dados com Apache Pig (M. Tim Jones, developerWorks, fevereiro de 2012): Porcos (Pigs) são conhecidos por cavarem e escavarem qualquer coisa que possam consumir. O Apache Pig faz a mesma coisa para dados grandes. Saiba mais sobre essa ferramenta e como colocá-la em funcionamento em seus aplicativos.
- Writing
a Hadoop MapReduce Program in Python (Michael G. Noll, atualizado em outubro de 2011, publicado em setembro de 2007): Saiba como escrever um programa MapReduce simples para o Hadoop na linguagem de programação Python neste tutorial.
- O zona de software livre do developerWorks fornece muitas informações sobre ferramentas de software livre e de como utilizar tecnologias de software livre.
- Desenvolvimento web developerWorks especializado em artigos que abrangem diversas soluções baseada na web.
- Fique por dentro dos eventos técnicos e webcasts do developerWorks com ênfase em uma série de produtos IBM e assuntos relacionados ao segmento de mercado de TI.
- Participe de um briefing ao vivo e gratuito do developerWorks para se atualizar rapidamente sobre produtos e ferramentas IBM e tendências do segmento de mercado de TI.
- Acompanhe as demos on demand do developerWorks , que abrangem desde demos de instalação e configuração de produtos para iniciantes até funcionalidades avançadas para desenvolvedores experientes.
- Siga o DeveloperWorks no Twitter, ou inscreva-se em um feed de tweets sobre o Linux no developerWorks.
Obter produtos e tecnologias
- VM Demo do Hadoop da Cloudera (maio de 2012): Comece a usar com o Apache Hadoop, com um conjunto de máquinas virtuais que incluam uma imagem do Linux e uma instância pré-configurada do Hadoop.
- Avalie produtos IBM da maneira que for melhor para você: faça download da versão de teste de um produto, avalie um produto online, use-o em um ambiente de nuvem ou passe algumas horas na SOA Sandbox aprendendo a implementar Arquitetura Orientada a Serviços de modo eficiente.
Discutir
- Confira os blogs do developerWorks e participe da comunidade do developerWorks.
- Participe da comunidade do developerWorks. Entre em contato com outros usuários do developerWorks e explore os blogs, fóruns, grupos e wikis voltados para desenvolvedores.

M. Tim Jones é arquiteto de firmware embarcado e autor de Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (agora em sua segunda edição), AI Application Programming (em sua segunda edição) e BSD Sockets Programming from a Multilanguage Perspective. Seu conhecimento em engenharia varia do desenvolvimento de kernels para naves espaciais geossíncronas até a arquitetura de sistemas embarcados e o desenvolvimento de protocolos de rede. Tim é arquiteto de plataforma da Intel e autor em Longmont, Colorado.