Saltar al contenido principal
Página

Tema 4.5 - Aplicación Web Log Analyzer

Objetivos de Aprendizaje

  • Comprender la arquitectura de una aplicación típica de Big Data
  • Aprender los elementos de diseño de una aplicación de análisis de registros web
  • Ver el código de muestra y las salidas de una aplicación de este tipo

Arquitectura de Web-Analyzer



Código de Aplicación


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//calculates size of log, and provides min, max and average size
// caching is done for repeatedly used factors
def calcContentSize(log: RDD[AccessLogs]) = {
 val size = log.map(log => log.contentSize).cache()
 val average = size.reduce(_ + _) / size.count()
 println("ContentSize:: Average :: " + average + " " +
 " || Maximum :: " + size.max() + " || Minimum ::" + size.min() )
 }
//Send all the response code with its frequency of occurrence as Output
def responseCodeCount(log: RDD[AccessLogs]) = {
 val responseCount = log.map(log => (log.responseCode, 1))
 .reduceByKey(_ + _)
 .take(1000)
 println(s"""ResponseCodes Count : ${responseCount.mkString("[", ",", "]")} """)
 }
//filters ipaddresses that have more then 10 requests in server log
 def ipAddressFilter(log: RDD[AccessLogs]) = {
 val result = log.map(log => (log.ipAddr, 1))
 .reduceByKey(_ + _)
 .filter(count => count._2 > 1)
 // .map(_._1).take(10)
 .collect()
 println("IP Addresses Count :: ${result.mkString("[", ",", "]")}" )
 } }

Link repositorio de github:
https://github.com/databricks/reference-apps/tree/master/logs_analyzer/chapter1/scala/src/main/scala

Tecnología

  • Apache Spark v2
  • Hadoop 2.6.0 cdh5
  • Apache Flume
  • Scala, Java
  • MongoDB
  • RestFul Web Services
  • Front UI tools
  • Linux Shell Scripts

Preguntas de Repaso

1. Describa las ventajas de un analizador de registros web

2. Describa los principales retos en el desarrollo de esta aplicación

3. Identifique las 3-4 principales lecciones aprendidas del código

4. ¿Cómo se puede mejorar este código?
Última modificación: lunes, 28 de marzo de 2022, 18:31