Conteúdo


Prática: Processar Logs com o Apache Hadoop

Extrair dados úteis de logs usando o Hadoop em sistemas Linux típicos

Comments

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.

Visão geral

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

Pré-requisitos

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 ls do 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.

Soluções dos exercícios

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)
$

Recursos para download


Temas relacionados

  • 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.
  • 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.
  • 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.
  • 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.
  • Siga o DeveloperWorks no Twitter, ou inscreva-se em um feed de tweets sobre o Linux no developerWorks.

Comentários

Acesse ou registre-se para adicionar e acompanhar os comentários.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux, Software livre
ArticleID=829650
ArticleTitle=Prática: Processar Logs com o Apache Hadoop
publish-date=08102012