Mokabyte

Dal 1996, architetture, metodologie, sviluppo software

  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il primo sito web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti
  • Argomenti
    • Programmazione & Linguaggi
      • Java
      • DataBase & elaborazione dei dati
      • Frameworks & Tools
      • Processi di sviluppo
    • Architetture dei sistemi
      • Sicurezza informatica
      • DevOps
    • Project Management
      • Organizzazione aziendale
      • HR
      • Soft skills
    • Lean/Agile
      • Scrum
      • Teoria della complessità
      • Apprendimento & Serious Gaming
    • Internet & Digital
      • Cultura & Società
      • Conferenze & Reportage
      • Marketing & eCommerce
    • Hardware & Tecnologia
      • Intelligenza artificiale
      • UX design & Grafica
  • Ultimo numero
  • Archivio
    • Archivio dal 2006 ad oggi
    • Il primo sito web – 1996-2005
  • Chi siamo
  • Ventennale
  • Libri
  • Contatti

Nel numero:

285 luglio–agosto
, anno 2022

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

VI parte: Data processing e persistenza

Luigi Bennardis
Luigi Bennardis

Luigi Bennardis si è laureato in Scienze Statistiche ed Economiche all’Università di Roma. Si occupa di informatica da un po’ di tempo ed è attualmente impegnato su tematiche DevOps. Nel tempo libero ancora gioca a basket, nuota ed è appassionato di elettronica vintage.

Traffico

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

VI parte: Data processing e persistenza

Picture of Luigi Bennardis

Luigi Bennardis

  • Questo articolo parla di: Architetture dei sistemi, DataBase & elaborazione dei dati, Programmazione & Linguaggi

Introduzione

In questa sesta parte si conclude la descrizione dell’implementazione del modulo applicativo di Data Ingestion & Computing. Verranno presentati i dettagli di data processing Spark e di persistenza su Cassandra.

Esecuzione delle attività di data processing e di persistenza su Cassandra

Nella parte precedente sono stati descritti i passi che portano alla definizione del JavaDStream da utilizzare per eseguire le attività di data processing. Su quest’ultimo, ogni iterazione del batch esegue i metodi statici della classe che implementa i calcoli di traffico totale, quelli basati sulla finestra temporale definita e quelli di monitoraggio di uno specifico POI (Point of Interest). Il batch si conclude con la persistenza di questi risultati su Cassandra.

La computazione di streaming viene avviata e interrotta utilizzando rispettivamente i metodi context.start() e context.stop(). Il metodo context.awaitTermination() permette al thread corrente di attendere il termine di un contesto di streaming, causato da un’istruzione context.stop() o da una eccezione. Di seguito le istruzioni Java utilizzate in questo caso.

Calcolo dei dati di traffico e persistenza su Cassandra

Questo metodo statico esegue le trasformazioni necessarie per ottenere un JavaDStream di tipo ChiaveAggregata, costituito dal numero di veicoli raggruppati per tipo e per direttrice stradale di rilevazione. Questo risultato si ottiene applicando in sequenza i metodi mapToPair e ReduceByKey al DStream precedentemente persistito in memoria. A ques’ultimo JavaDStream viene quindi applicato il metodo mapWithState che imposta un timeout di conservazione dello stato. L’ultima operazione consiste nella persistenza di quest’ultimo DStream su Cassandra.

 

Di seguito viene riportato il codice relativo alla chiave aggregata.

 

Ecco poi la codifica della funzioneDatiTrafficoTotale

 

E infine la codifica della funzioneCalcoloTotale

Computazioni su finestre temporali

Attraverso l’applicazione su un DStream del metodo reduceByKeyAndWindow, Spark Streaming supporta i calcoli sui dati acquisiti all’interno di finestre temporali, come illustrato dalla figura 1.

Figura 1 – Finestra temporale di dati.
Figura 1 – Finestra temporale di dati.

 

Questa funzione permette di unire gli RDD che rientrano nella finestra temporale che scorre su una sorgente DStream. Nell’esempio riportato in figura 1, lo slittamento temporale applicato su due unità temporali di dati (“RDD tempo 3” – “RDD tempo 5”) determina un’operazione di unione applicata alle ultime tre unità di tempo. Ne deriva che, per tutte le operazioni di questo tipo, è necessario specificare due parametri: l’ampiezza della finestra e l’intervallo di scorrimento. Questi parametri devono essere multipli dell’intervallo del batch di origine.

Di seguito il fragment di implementazione del metodo reduceByKeyAndWindow che permetterà di calcolare il numero di veicoli all’interno di finestre temporali con ampiezza e slittamento di trenta e dieci secondi rispettivamente. In altre parole sarà possibile visualizzare il traffico totale osservato nei trenta secondi precedenti a intervalli di dieci secondi.

 

Nel dettaglio sul JavaDStream in cache, di tipo IoTData, vengono applicati in sequenza i metodi mapToPair (necessario a filtrare per idStrada e tipoVeicolo) e reduceByKeyAndWindow ottenendo così un nuovo DStream con chiave di aggregazione idStrada e tipoVeicolo sulla finestra temporale corrente.

Per agevolare la lettura, non viene riportata la codifica di trasformazione in DStream di questo ultimo JavaPairDStream, implementazione necessaria alle operazioni di persistenza delle informazioni su Cassandra. Il lettore potrà fare riferimento a quanto riportato nel paragrafo precedente.

Rilevazione dei veicoli in prossimità di un Point of Interest

Di seguito la codifica della funzione che permette la rilevazione dei veicoli presenti nel raggio di un Point of Interest calcolandone anche la distanza da quest’ultimo.

 

Analogamente a quanto indicato nel paragrafo precedente, al fine di agevolare la lettura non viene riportata la codifica necessaria alle operazioni di persistenza su Cassandra, rimandando il lettore ai paragrafi precedenti.

Ed ecco infine il codice che implementa il calcolo della distanza dal POI di ciascun veicolo rilevato nel raggio stabilito.

 

Conclusioni

In questa sesta parte sono stati completati i dettagli di implementazione del componente applicativo di Data Ingestion & Computing, relativi all’applicazione delle funzioni di calcolo e persistenza su Cassandra, necessarie a soddisfare i requisiti di monitoraggio. Nella prossima parte verrà presentato l’ultimo componente applicativo, la dashboard di visualizzazione.

 

Riferimenti

Socks

socks-client

https://github.com/sockjs/sockjs-client

 

Kafka

https://kafka.apache.org/quickstart

https://www.slideshare.net/mumrah/kafka-talk-tri-hug?next_slideshow=1

https://www.youtube.com/watch?v=U4y2R3v9tlY

https://kafka.apache.org/10/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html

 

Spark

https://spark.apache.org/docs/latest/index.html

https://data-flair.training/blogs/spark-rdd-tutorial/

https://data-flair.training/blogs/apache-spark-rdd-features/

 

Spark e Cassandra data connector

https://www.datastax.com/dev/blog/accessing-cassandra-from-spark-in-java

 

Zookeeper

https://www.youtube.com/watch?v=gifeThkqHjg

https://www.slideshare.net/sauravhaloi/introduction-to-apache-zookeeper

 

Kafka e Zookeeper

https://www.youtube.com/watch?v=SxHsnNYxcww

 

Price Waterhouse and Cooper  “The Bright Future of Connected Cars” https://carrealtime.com/all/pwc-the-bright-future-of-connected-cars/

 

Hadoop

https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html

 

Spark

https://www.infoq.com/articles/apache-spark-introduction/?utm_source=apachesparkseries&utm_medium=link&utm_campaign=internal

 

RDD

https://www.usenix.org/system/files/conference/nsdi12/nsdi12-final138.pdf

 

WebSocket

http://jmesnil.net/stomp-websocket/doc/

 

Stomp

https://stomp-js.github.io/guide/stompjs/rx-stomp/ng2-stompjs/using-stomp-with-sockjs.html

 

Facebook
Twitter
LinkedIn
Luigi Bennardis
Luigi Bennardis

Luigi Bennardis si è laureato in Scienze Statistiche ed Economiche all’Università di Roma. Si occupa di informatica da un po’ di tempo ed è attualmente impegnato su tematiche DevOps. Nel tempo libero ancora gioca a basket, nuota ed è appassionato di elettronica vintage.

Picture of Luigi Bennardis

Luigi Bennardis

Luigi Bennardis si è laureato in Scienze Statistiche ed Economiche all’Università di Roma. Si occupa di informatica da un po’ di tempo ed è attualmente impegnato su tematiche DevOps. Nel tempo libero ancora gioca a basket, nuota ed è appassionato di elettronica vintage.
Tutti gli articoli
Nello stesso numero
Loading...

WebAssembly, uno standard web per il presente e per il futuro

I parte: Panoramica e caratteristiche

Cos’è che fa di un DevOps un DevOps?

Principi, pratiche, ruolo

Quindici statistiche da conoscere per lavorare in UX design

Uno sguardo internazionale

Nella stessa serie
Loading...

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

VII parte: La dashboard di visualizzazione

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

V parte: Data Ingestion & Computing

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

IV parte: L’invio dei dati al topic di Kafka

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

III parte: Il framework Spark

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

II parte: Tecnologie di analisi

Un sistema di monitoraggio del traffico veicolare “in tempo reale”

I parte: Introduzione e panoramica

Mokabyte

MokaByte è una rivista online nata nel 1996, dedicata alla comunità degli sviluppatori java.
La rivista tratta di vari argomenti, tra cui architetture enterprise e integrazione, metodologie di sviluppo lean/agile e aspetti sociali e culturali del web.

Imola Informatica

MokaByte è un marchio registrato da:
Imola Informatica S.P.A.
Via Selice 66/a 40026 Imola (BO)
C.F. e Iscriz. Registro imprese BO 03351570373
P.I. 00614381200
Cap. Soc. euro 100.000,00 i.v.

Privacy | Cookie Policy

Contatti

Contattaci tramite la nostra pagina contatti, oppure scrivendo a redazione@mokabyte.it

Seguici sui social

Facebook Linkedin Rss
Imola Informatica
Mokabyte