Scenario: Analisi dei Log di Accesso a un Sito Web
Il nostro obiettivo è analizzare i log di accesso a un sito web per identificare:
- Le pagine più visitate
- Gli orari di maggiore traffico
- I percorsi di navigazione degli utenti
1. Raccolta dei Dati
I log di accesso a un sito web possono essere generati e archiviati in formato testo, JSON, o altro formato strutturato. In un contesto di Big Data, questi log vengono raccolti e inviati a Hadoop per l’elaborazione.
2. Archiviazione dei Dati
HDFS (Hadoop Distributed File System):
- Caricamento dei Dati: Carica i file di log nel sistema HDFS. Questo può essere fatto utilizzando comandi come
hdfs dfs -putper caricare i file dalla macchina locale al file system distribuito.
hdfs dfs -mkdir /user/logs hdfs dfs -put local_logs/* /user/logs/
3. Elaborazione dei Dati con MapReduce
MapReduce è un modello di programmazione per l’elaborazione dei dati in batch.
- Fase di Mappatura (Map): Estrai e trasforma i dati grezzi dai log. Ad esempio, potresti estrarre l’URL delle pagine visitate e il timestamp dell’accesso.
- Fase di Riduzione (Reduce): Aggrega i dati elaborati. Ad esempio, conta il numero di accessi per ogni pagina o calcola la media del traffico per ora del giorno.
Esempio di Codice MapReduce:
// Mapper.java
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class LogMapper extends Mapper<Object, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text page = new Text();
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
String[] fields = value.toString().split("\t");
if (fields.length > 1) {
String url = fields[1]; // Supponiamo che l'URL sia nel secondo campo
page.set(url);
context.write(page, one);
}
}
}
// Reducer.java
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class LogReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
Esecuzione del Job MapReduce:
hadoop jar LogAnalysis.jar LogMapper LogReducer /user/logs /user/output
4. Analisi dei Risultati
Una volta completata l’elaborazione, i risultati possono essere salvati su HDFS e successivamente analizzati. Puoi utilizzare strumenti come Hive o Pig per eseguire query SQL sui risultati aggregati.
Esempio di Query in Hive:
CREATE EXTERNAL TABLE log_analysis (
url STRING,
count INT
) ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION '/user/output';
SELECT url, count FROM log_analysis ORDER BY count DESC LIMIT 10;
5. Visualizzazione dei Dati
I risultati possono essere esportati da HDFS e importati in strumenti di visualizzazione dei dati come Tableau o Power BI per una rappresentazione grafica dei dati.
Esempio di Esportazione dei Dati:
hdfs dfs -get /user/output /local/output
Importazione in Tableau:
- Apri Tableau e seleziona “Connetti ai dati”.
- Seleziona “File” e poi “Testo” per importare i dati salvati.
- Crea grafici e dashboard per visualizzare i dati aggregati, come il numero di visite per pagina e i periodi di picco di traffico.
Conclusione
L’analisi dei log di accesso a un sito web utilizzando Hadoop dimostra come il framework possa gestire e processare grandi volumi di dati in modo distribuito ed efficiente. Utilizzando Hadoop HDFS per l’archiviazione dei dati, MapReduce per l’elaborazione e strumenti come Hive per le query, è possibile ottenere insights preziosi sui pattern di traffico e comportamenti degli utenti. Questo esempio illustra l’approccio scalabile e robusto di Hadoop per l’analisi dei Big Data.



