Pergunta

Estou analisando o MapReduce há algum tempo e parece ser uma maneira muito boa de implementar computação distribuída tolerante a falhas.Li muitos artigos e artigos sobre esse assunto, instalei o Hadoop em uma série de máquinas virtuais e fiz alguns testes muito interessantes.Eu realmente acho que entendo as etapas de Mapear e Reduzir.

Mas aqui está meu problema : Não consigo descobrir como isso pode ajudar na análise de logs do servidor http.

Meu entendimento é que grandes empresas (Facebook, por exemplo) usam o MapReduce com a finalidade de calcular seus logs http, a fim de acelerar o processo de extração de estatísticas de audiência deles.A empresa para a qual trabalho, embora menor que o Facebook, tem um grande volume de logs da web para computar todos os dias (o 100Go cresce entre 5 e 10 por cento a cada mês).No momento, processamos esses logs em um único servidor e funciona perfeitamente.Mas a distribuição dos trabalhos de computação vem instantaneamente à mente como uma otimização que logo será útil.

Aqui estão as perguntas que não posso responder agora, qualquer ajuda seria muito apreciada:

  • O conceito MapReduce pode realmente ser aplicado à análise de weblogs?
  • O MapReduce é a maneira mais inteligente de fazer isso?
  • Como você dividiria os arquivos de log da web entre as várias instâncias de computação?

Obrigado.
Nicolas

Foi útil?

Solução

O conceito MapReduce pode realmente ser aplicado à análise de weblogs?

Sim.

Você pode dividir seu arquivo de log hudge em pedaços de, digamos, 10.000 ou 1.000.000 de linhas (o que for um bom pedaço para o seu tipo de arquivo de log - para arquivos de log do Apache, eu escolheria um número maior), alimentá-los para alguns mapeadores que extrairiam algo específico ( como navegador, endereço IP, ..., nome de usuário, ...) de cada linha de log e depois reduza contando o número de vezes que cada uma apareceu (simplificado):

  192.168.1.1,FireFox x.x,username1
  192.168.1.1,FireFox x.x,username1
  192.168.1.2,FireFox y.y,username1
  192.168.1.7,IE 7.0,username1

Você pode extrair navegadores, ignorando a versão, usando uma operação de mapa para obter esta lista:

FireFox
FireFox
FireFox
IE

Então reduza para obter isso:Firefox, 3 ou seja, 1

O MapReduce é a maneira mais inteligente de fazer isso?

É inteligente, mas você precisaria ser muito grande para obter qualquer benefício...Divisão de PETABYTES de logs.

Para fazer esse tipo de coisa, eu preferiria usar filas de mensagens e um mecanismo de armazenamento consistente (como um banco de dados), com clientes de processamento que extraem trabalho das filas, executam o trabalho e enviam resultados para outra fila, com trabalhos não sendo executado em algum período de tempo disponibilizado para outros processarem.Esses clientes seriam pequenos programas que fazem algo específico.

Você poderia começar com 1 cliente e expandir para 1000...Você pode até ter um cliente que execute como protetor de tela em todos os PCs em uma LAN e execute 8 clientes em seus servidores de 8 núcleos, 2 em seus PCs dual core...

Com puxar:Você poderia ter 100 ou 10 clientes funcionando, máquinas multicore poderiam ter vários clientes em execução e tudo o que um cliente terminasse estaria disponível para a próxima etapa.E você não precisa fazer nenhum hash ou atribuição para que o trabalho seja feito.É 100% dinâmico.

http://img355.imageshack.us/img355/7355/mqlogs.png

Como você dividiria os arquivos de log da web entre as várias instâncias de computação?

Por número de elementos ou linhas, se for um arquivo de log baseado em texto.

Para testar o MapReduce, gostaria de sugerir que você brinque com o Hadoop.

Outras dicas

  • O conceito MapReduce pode realmente ser aplicado à análise de weblogs?

Claro.Que tipo de dados você está armazenando?

  • O MapReduce é a maneira mais inteligente de fazer isso?

Isso permitiria que você consultasse muitas máquinas de commodities ao mesmo tempo, então sim, pode ser útil.Alternativamente, você pode tentar Fragmentação.

  • Como você dividiria os arquivos de log da web entre as várias instâncias de computação?

Geralmente você distribuiria seus dados usando um algoritmo de hash consistente, para que você possa adicionar facilmente mais instâncias posteriormente.Você deve fazer o hash de qualquer que seja sua chave primária em um banco de dados comum.Pode ser um ID de usuário, um endereço IP, referenciador, página, anúncio;qualquer que seja o tópico do seu registro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top