Skip to content

Giovy98/TAPtube-Popularity-Channel-Prediction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TAPtube-Popularity-Channel-Prediction

Introduzione

Il progetto TAPtube Popularity Channel Prediction si propone di sviluppare un sistema di predizione in tempo reale per stimare la popolarità di un canale YouTube. L'obiettivo è visualizzare graficamente i risultati delle previsioni ottenute, fornendo agli utenti uno strumento per valutare l'andamento potenziale di un canale sulla piattaforma.

Data Pipeline

Data Pipeline

Le tecnologie utilizzate sono le seguenti:
  • Producer: riceve i dati (script in python) usufruendo dell'API pubblica di Youtube [Youtube API v3] (https://github.com/youtube/api-samples) e li manda a Logstash.

  • Logstash: riceve i dati dal Producer e li scrive sul topic taptube_channel. Agisce da Producer nel modello Producer-Consumer di Kafka.

  • Kafka: riceve i dati da Logstash e li archivia in modo affidabile all'interno di una coda di messaggi. Agisce come broker nel modello Producer-Consumer di Kafka.

  • Spark: riceve i dati da Kafka e li arricchisce eseguendo predizioni di machine learning. Agisce da Consumer nel modello Producer-Consumer di Kafka.

  • Elasticsearch: Indicizza i dati in modo che possano essere visualizzati e analizzati tramite Kibana.

  • Kibana: UI dedicata alla Data Visualization.

Vedi la cartella doc per maggiori dettagli

Requisiti

Struttura della Repositery

  • El_Kibana/: contiene i file relativi a Elasticsearch e Kibana.
  • dashboard/: contene la Dashboard salvata.
  • logstash/: cartella contenente i file relativi a Logstash e la sua configurazione.
  • producer/: cartella contenente i file del producer (file.py, Key di Youtube, requisiti vari etc..)
  • spark/: contiene due sottocartelle
    • streaming/: relativa allo streaming dei dati;
    • training/: relativa all'allenamento del modello per poi fare streaming.
  • .env: File di configurazione (contiene variabili d'ambiente o configurazioni varie).
  • docker-compose.yaml: file di configurazione per Docker Compose, utilizzato per gestire i container Docker.

Utilizzo

  1. Clonare la repository del progetto
git clone https://github.com/Giovy98/TAPtube-Popularity-Prediction.git
  1. Vai nella cartella producer, modifica il file producer.env (MY_API_KEY = "La tua chiave ")

  2. Nella root della repository avvia tutti i containers con il file di configurazione docker-compose.yaml

cd TAPtube-Popularity-Prediction 
docker-compose up (-d) # -d: per la detach mode
  1. Ora il producer genererà i dati (Attenzione: ricorda che hai un numero limitato di quote, circa 10.000 Queries al giorno. Documentazione Calcolo delle quote)

  2. Vai su Kibana accedento a:

http://localhost:5601

e importa la Dashboard localizzata nella cartella dashboard/TAPtubeDashboard.ndjson direttamente su Kibana nella sezione Left Hambuger menu > Management > Stack Management > Saved Objects > Import.

Attenzione: quando tirate sù una nuova istanza di Kibana, dovrete stare attenti a ricreare la Data View allo stesso modo, così che la Dashboard che avete importato possa operare con lo stesso tipo di dati.

Possibili Ottimizzazioni

  1. Si potrebbe far partire il container Producer dopo che il container Logstash sia pronto per accettare flussi di dati, tale ottimizzazione si potrebbe fare in tale modo:
# docker-compose--> producer
depends_on:
  logstash:
      condition: service_healthy

# docker-compose--> logstash

healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5001/_node/pipelines/main?pretty"] #  fa parte delle API di monitoring di Logstash
      interval: 10s
      timeout: 10s
      retries: 5
  1. Si potrebbe dare più risorse a Logstash
deploy:
  resources:
      limits:
          cpus: '0.5' ->  '1'  # Assegna fino a 1 CPU
          memory: 512m  -> 1024m  # Assegna fino a 1 GB di RAM

Possibili Errori

  1. Se le risorse allocate non sono sufficienti per eseguire tutti i container, è possibile che alcuni container si fermino in modo casuale o non riescano ad avviarsi correttamente.

    Per evitare questo problema, puoi aumentare le risorse allocate a ciascun container.

  2. Bind for 0.0.0.0:porta_da_te_definita failed: port is already allocated docker.

    Riavvia il docker-desktop

Link Utili

Container URL INFO
Kafka-UI http://localhost:10000 Apre kafka UI
Kibana http://localhost:5601 Apre Kibana

Dataset e Modello pre-allenato

Il dataset per allenare il modello e il modello pre-allenato caricato dallo script streaming.py per lo streaming di dati in real-time, si trovano nella rispettiva sottocartella.

spark/
  ├── streaming/   # relativa allo streaming dei dati
  └── training/ # relativa all'allenamento del modello per poi fare streaming
          └── data  # contiene il dataset
          └── model # modello pre-allenato

Autore

NOME COGNOME MARICOLA
Giovanni Salerno 1000052299

About

A simple project for TAP course regarding predicting the popularity of a channel

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors