ACARS : exemple d'une application de streaming sous Spark

À proximité de l'aéroport d'Orly un ami se plaignait que les appareils ne respectaient pas toujours les couloirs aériens, connaissant la possibilité de recevoir la position des appareils je me suis amusé à créer une application qui relevait la présence d'un aéronef dans une zone définie à une altitude minimale définie. Cela a constitué un bon apprentissage des données flux sous Spark.



Vols aéronefs

Selon la définition de Air France :
L'ACARS (Aircraft Communication Addressing and Reporting System) est un système permettant l'échange d'informations (messages) entre l'avion et le sol sous forme numérique codée par liaison radio ou satellite.

Pour capter ce flux de données qui émettent sur 1090 MHz il est possible d'utiliser une simple clé usb qui reçoit la TNT et d'y ajouter une petite antenne spécifique.

Le site Flight24 de manière plus professionnel utilise essentiellement les flux de données de type ACARS.


Logiciel permettant le traitement du flux

Les données brutes de données de type ACARS ne sont pas directement utilisables, elles nécessitent un traitement complexe réalisé par le logiciel freeware dump1090.

Un exemple des données de sortie de dump1090

MSG,4,111,11111,400804,111111,2020/05/16,15:57:34.670,2020/05/16,15:57:34.665,,,390,326,,,64,,,,,0
MSG,6,111,11111,406091,111111,2020/05/16,15:57:34.719,2020/05/16,15:57:34.670,,,,,,,,2041,0,0,0,0
MSG,8,111,11111,800734,111111,2020/05/16,15:57:34.752,2020/05/16,15:57:34.732,,,,,,,,,,,,0
MSG,8,111,11111,AE4BE6,111111,2020/05/16,15:57:34.752,2020/05/16,15:57:34.732,,,,,,,,,,,,0
MSG,7,111,11111,800734,111111,2020/05/16,15:57:34.765,2020/05/16,15:57:34.734,ka,37000,,,,,,,,,,0
MSG,8,111,11111,AE4BE6,111111,2020/05/16,15:57:34.768,2020/05/16,15:57:34.735,,,,,,,,,,,,0
MSG,8,111,11111,400804,111111,2020/05/16,15:57:34.792,2020/05/16,15:57:34.737,me,,,,,,,,,,,0
MSG,8,111,11111,AE4BE6,111111,2020/05/16,15:57:34.792,2020/05/16,15:57:34.737,,,,,,,,,,,,0
MSG,8,111,11111,400804,111111,2020/05/16,15:57:34.800,2020/05/16,15:57:34.796

Explication des variables de dump1090


Sur ces 22 variables, nous allons en retenir 5 pour réaliser le filtrage:

  • icao : Numéro d'identification de l'appareil indépendant de la compagnie
  • callsign : Identifiant de l'appareil lié à la compagnie
  • altitude : Altitude
  • latitude : Latitude
  • longitude : Longitude

Spark streaming

Dans les multiples possibilités offertes par Spark il est possible de traiter des données streaming en temps réels.
L'outil dump1090 permet de transmettre les données Acars en mode réseau, Spark peut récupérer ce type de flux (socketTextStream) et transformer ces données pour réaliser un traitement.


L'objectif initial est de définir une zone de contrôle et une altitude minimale à ne pas dépasser.

Pour créer le programme de traitement, il y aura trois étapes :

1. Réaliser le programme avec un jeu de données fixes afin de réaliser des tests

  • La zone de test
    Elle est située au nord de Paris, latitude strictement supérieure à 48,903296 et strictement inférieure à 48,924444, longitude strictement supérieure à 2,331250 et strictement inférieure à 2,385399, l'altitude est strictement inférieure à 15000 pieds.
  • Avec l'outil dump1090 dans un parc parisien j'ai réalisé la captation des données sur une période de 28 minutes, 103 435 lignes soit un peu moins de 4 000 lignes par minutes avec une antenne artisanale. Lien du fichier
  • On traite les données afin qu'elles correspondent à la zone de test, on réalise différentes jointures afin de récupérer le icao et le callsign et avoir ces données sur une même ligne, car les données acars sont émises sous formes de packet de données différents.

2. Refaire le programme avec des données temps réels

  • Le traitement des données est réalisé toutes les 5 minutes c'est-à-dire que pendant 5 minutes les données Acars s'écrivent dans Spark, le traitement et le filtrage sont réalisé après 5 minutes (StreamingContext(sc, Minutes(5)))
  • Pour éviter qu'un échec de l'application entraine une perte des données, des checkpoints sont mis en places dans un environnement de données sécurisées de type hdfs Hadoop
  • À noter que dans le programme il y a une simplification, la date du traitement du programme est la date de l'événement
  • Le résultat du traitement est copier dans un disque hdfs sous le format suivant :
    (4CAA7B,AZA312,7425.0,48.91099,2.33134,2020/05/16,16:14:19.638)
    (440452,EJU89ZB,8775.0,48.9082,2.33269,2020/05/16,16:23:44.883)
    (440452,EJU89ZB,8775.0,48.90811,2.33149,2020/05/16,16:23:45.433)
    (392AEE,AFR1889,8300.0,48.90946,2.33734,2020/05/16,16:16:03.400)
    (392AEE,AFR1889,8300.0,48.90939,2.33636,2020/05/16,16:16:03.841)
    icao,callsign,altitude, longitude, latitude, date

3. Il faut créer un exécutable de l'application
Pour Spark sous scala nous utiliserons SBT.