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 web2. Describa los principales retos en el desarrollo de esta aplicación3. Identifique las 3-4 principales lecciones aprendidas del código4. ¿Cómo se puede mejorar este código?
Última modificación: lunes, 28 de marzo de 2022, 18:31