Skip to content

Secondo progetto per il corso di Big Data durante A.A. 2020/2021. Progetto che si incentra sulla creazione di una architettura lambda per effettuare analisi streaming e batch su dati estratti dalla piattaforma Twitch.

Notifications You must be signed in to change notification settings

rirolli/twitch-big-data-analysis

Repository files navigation

twitch-big-data-analysis

Secondo progetto per il corso di Big Data durante A.A. 2020/2021. Progetto che si incentra sulla creazione di una architettura lambda per effettuare analisi streaming e batch su dati estratti dalla piattaforma Twitch.

Alt Text

Indice

Obiettivi

Qui di seguito sono elencati i task che questo progetto deve essere in grado di svolgere. I task si dividono in due tipologie di analisi: streaming e batch. La prima analizza i dati provenienti dalle sorgenti in near-real-time mentre l'analisi batch esegue delle analisi periodiche prelevando i dati dal database noSQL.

Analisi Streaming

  • Analisi delle visualizzazioni per ogni streaming:
    • Analisi delle visualizzazioni correnti per ogni streaming generandone una classifica;
    • Analisi delle visualizzazioni medie per ogni streaming generandone una classifica;
  • analisi del numero degli streaming attivi per ogni categoria al fine di determinare i giochi in tendenza;
  • analisi degli streaming al fine di determinare una percentuale delle persone che guardano lo streaming rispetto al totale degli iscritti.

Analisi Batch

  • Analizzare qual è la piattaforma (PS4, Xbox o Pc) preferita dagli streamer;
  • classificare per ogni Streamer le categorie preferite dai propri iscritti;
  • produrre una Top 25 dei giochi e degli streamer più seguiti dagli utenti della piattaforma in ogni mese.

Dataset

I dati utilizzati per simulare il crawling streaming sono stati presi dalla repository github https://clivecast.github.io. In questo link è presente anche una descrizione dettagliata di tutti i campi dei vari file.

Per simulare il crawling dei dati dalla piattaforma Twitch si usa lo script kafka_producer.py che preleva le righe dai file presenti nella cartella /twitch_data e li carica su kafka con il seguente formato json:

{'stream_id':stream_id, 'current_view':current_view, 'stream_created_time':stream_created_time, 'game_name':game_name, 'broadcaster_id':broadcaster_id, 'broadcaster_name':broadcaster_name, 'delay_settings':delay_settings, 'follower_number':follower_number, 'partner_status':partner_status, 'broadcaster_language':broadcaster_language, 'total_view_broadcaster':total_view_broadcaster, 'language':language, 'broadcaster_created_time':broadcaster_created_time, 'playback_bitrate':playback_bitrate, 'source_resolution':source_resolution, 'current_time':current_time}

Requirements

Per la replicazione di questo progetto sono richiesti i seguenti software:

  • Python 3.8.10
  • Java 8
  • Hadoop 3.2.2
  • Spark 3.1.1
  • Kafka 2.13-2.8.0
  • MongoDB 5.0.0

Per l'esecuzione degli script è necessario avere installato il pacchetto gnome-terminal:

sudo apt install gnome-terminal

Le librerie Python necessarie per far funzionare il progetto sono elencate in requirements.txt:

  • kafka-python==2.0.2
  • py4j==0.10.9
  • pymongo==3.12.0
  • pyspark==3.1.2

Struttura del progetto

Per poter funzionare il progetto deve essere strutturato come segue:

/twitch-big-data-analysis
|-- /batch_jobs
|-- /dataset
|   |-- /broadcaster
|   |-- /dashboard
|   |-- /samples
|   |   |-- /dashboard_sample
|   |    -- /twitch_data_sample
|    -- /twitch_data
 -- /streaming_jobs
    |-- /pyspark_sql
     -- /pyspark_streaming

in particolare:

  • /batch_jobs contiene file di script di esecuzione dei job in batch;
  • /dataset è la cartella contente i dataset scaricabili qui;
  • /streaming_jobs contiene file di script di esecuzione dei job in streaming.

Inoltre vi è una directory denominata /report che contiene la presentazione e il report da consegnare per la valutazione del progetto.

Come eseguire il codice

Per prima cosa bisogna avviare i servizi di Kafka

$KAFKA_HOME/bin/zookeeper-server-start.sh $KAFKA_HOME/config/zookeeper.properties
$KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties

e di MongoDB

$MONGO_HOME/bin/mongod --dbpath $MONGO_HOME/data --logpath $MONGO_HOME/logs/mongo.log

Successivamente si procede con la creazione del topic twitch

$KAFKA_HOME/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic twitch

Alcuni script in questo progetto fanno uso di Spark che viene eseguito su ambiente Hadoop; a tal motivo è necessario avviare i servizi di Hadoop prima di procedere con l'esecuzione del programma.

$HADOOP_HOME/bin/hdfs namenode -format
$HADOOP_HOME/sbin/start-dfs.sh

A questo punto è possibile avviare l'esecuzione eseguendo il file start.sh:

./start.sh

All'interno della repoitory è presente un file start-all.sh (funzionante solo su ubuntu, per utilizzarlo su MacOS è necessario installare il pacchetto gnome-terminal) che permette di automatizzare questo processo di avvio di tutti i servizi appena elencati:

./start-all.sh

Attenzione! Assicurarsi di aver aggiunto correttamente i vari framework al PATH e di aver dato i permessi di esecuzione al file start.sh o start-all.sh (in caso contrario è possibile usare il comando chmod u+w start.sh oppure chmod u+w start-all.sh).

Possibili problemi e soluzioni

In questa sezione è presente una breve guida alla risoluzione dei problemi riscontrati durante l'esecuzione del progetto.

Problema di scrittura su hdfs://temp

Una possibile soluzione è quella di non salvare i temp su hdfs ma di farlo in locale aggiungendo l'attributo .option("checkpointLocation", "/tmp/vaquarkhan/checkpoint") a ReadStream come mostrato qui.

DataNode missing

Prima di tutto prova a riavviare il computer (anche più volte). Questo azzererà i file temporanei permettendo un format più pulito. Se non dovesse funzionare provare con la guida qui di seguito.
Un problema che si è presentato durante la prima esecuzione degli script di streaming è stato l'impossibilità di scrivere sul file temporaneo tmp a causa della mancata esecuzione del DataNode:

There are 0 datanode(s) running and 0 node(s) are excluded in this operation.

In accordo con quanto scritto qui (o qui)si consiglia di eliminare la cartella tmp di hadoop seguedo i seguenti passaggi:

  1. fermare hadoop
  2. pulire i file temporanei: sudo rm -R /tmp/*
  3. eliminare e ricreare /app/hadoop/tmp (<hadoop user> dovrebbe coincidere con il nome dell'user che crea il namenode. Invocare $USER sul terminale per vedere il nome corrente):
sudo rm -r /app/hadoop/tmp
sudo mkdir -p /app/hadoop/tmp
sudo chown <hadoop user>:<hadoop user> /app/hadoop/tmp
sudo chmod 750 /app/hadoop/tmp
  1. eseguire il format del namenode: hdfs namenode -format

NameNode in Safe Mode

Per togliere la safe mode basta invocare il seguente comando come viene spiegato qui:

 bin/hadoop dfsadmin -safemode leave

About

Secondo progetto per il corso di Big Data durante A.A. 2020/2021. Progetto che si incentra sulla creazione di una architettura lambda per effettuare analisi streaming e batch su dati estratti dalla piattaforma Twitch.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •