2009-06-02 17 views
7

He estado mirando MapReduce por un tiempo, y parece ser una muy buena forma de implementar informática distribuida tolerante a fallas. Leí muchos artículos y artículos sobre ese tema, instalé Hadoop en una serie de máquinas virtuales e hice algunas pruebas muy interesantes. Realmente creo que entiendo los pasos de Mapa y Reducir.¿Cómo es MapReduce un buen método para analizar los registros del servidor http?

Pero aquí está mi problema: No puedo entender cómo puede ayudar con el análisis de registros del servidor http.

Tengo entendido que las grandes empresas (Facebook, por ejemplo) usan MapReduce con el fin de calcular sus registros http con el fin de acelerar el proceso de extracción de estadísticas de audiencia de estos. La empresa para la que trabajo, aunque es más pequeña que Facebook, tiene un gran volumen de registros web para calcular todos los días (100Go crece entre 5 y 10 por ciento cada mes). En este momento procesamos estos registros en un único servidor, y funciona bien. Pero la distribución de los trabajos de computación al instante viene a la mente como una optimización que pronto será útil.

Aquí están las preguntas que no puedo responder en este momento, cualquier ayuda sería muy apreciada:

  • ¿Puede el concepto de MapReduce realmente pueden aplicar al análisis weblogs?
  • ¿MapReduce es la manera más inteligente de hacerlo?
  • ¿Cómo dividiría los archivos de registro web entre las distintas instancias informáticas?

Gracias.
Nicolas

Respuesta

16

¿Se puede aplicar realmente el concepto MapReduce al análisis de weblogs?

Sí.

Puedes dividir tu hudge logfile en trozos de digamos 10,000 o 1,000,000 líneas (lo que sea que sea una buena porción para tu tipo de archivo de registro - para los archivos de registro de apache me gustaría un número más grande), alimentarlos a algunos mapeadores que extraer algo específico (como navegador, dirección IP, ..., Nombre de usuario, ...) de cada línea de registro, luego reducir al contar el número de veces que aparece cada uno (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 

Puede extraer los navegadores, haciendo caso omiso de la versión, el uso de una operación de mapa para obtener esta lista :

FireFox 
FireFox 
FireFox 
IE 

luego reducir a conseguir esto: Firefox, IE 3 , 1

es MapReduce la forma más inteligente de hacerlo?

Es inteligente, pero necesitaría ser muy grande para obtener algún beneficio ... Dividir PETABYTES de troncos.

Para hacer este tipo de cosas, prefiero usar Message Queues y un motor de almacenamiento coherente (como una base de datos), con clientes de procesamiento que extraen trabajos de las colas, realizan el trabajo y envían los resultados a otra cola , con trabajos que no se ejecutan en un período de tiempo disponible para que otros los procesen. Estos clientes serían pequeños programas que hacen algo específico.

Puede comenzar con 1 cliente y ampliarlo a 1000 ... Incluso podría tener un cliente que se ejecute como salvapantallas en todas las PC de una LAN, y ejecutar 8 clientes en sus servidores de 8 núcleos, 2 en sus equipos de doble núcleo ...

Con extracción: Puede tener 100 o 10 clientes trabajando, las máquinas multinúcleo pueden tener varios clientes en ejecución, y lo que termine un cliente estará disponible para el siguiente paso. Y no es necesario hacer ningún hash o asignación para el trabajo a realizar. Es 100% dinámico.

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

¿Cómo le dividir los archivos de registro de la tela entre las diversas instancias de computación?

Por número de elementos o líneas si se trata de un archivo de registro basado en texto.

Para probar MapReduce, me gustaría sugerirle que juegue con Hadoop.

+1

En primer lugar, perdón por el retraso. Muchas gracias por su respuesta de muy alta calidad. Esto ayuda mucho ! – Nicolas

+1

Como alternativa a dividir los archivos de registro, puede paralelizar su secuencia de comandos "análisis de registro" en n núcleos. Y si tuviera que ejecutar esta secuencia de comandos en un clúster virtualizado (por ejemplo, 96 núcleos), su código se ejecutará perfectamente sin ningún cambio. Necesita identificar y aislar la unidad de trabajo "más pequeña" que es libre de efectos secundarios y trata con datos inmutables. Esto puede requerir que rediseñe el código, posiblemente. Además, Hadoop es comparativamente más difícil de instalar (y donde yo vivo, la experiencia es más difícil de encontrar). –

1
  • ¿Pueden el concepto MapReduce realmente pueden aplicar al análisis weblogs?

Sure. ¿Qué tipo de datos está almacenando?

  • ¿MapReduce es la forma más inteligente de hacerlo?

Le permitirá consultar en muchas máquinas de productos a la vez, por lo que sí puede ser útil. Alternativamente, puedes probar Sharding.

  • ¿Cómo dividiría los archivos de registro web entre las distintas instancias de informática?

Generalmente, distribuiría sus datos usando consistent hashing algorithm, por lo que puede agregar fácilmente más instancias más adelante. Debe hash por lo que sería su clave principal en una base de datos ordinaria. Podría ser una identificación de usuario, una dirección IP, referencia, página, anuncio; cualquiera que sea el tema de su registro.

+0

Aquí encontrará una excelente explicación de hashing consistente: http://michaelnielsen.org/blog/?p=613 – tuinstoel

Cuestiones relacionadas