Difference between revisions of "Apache Edgent"

From air
Jump to navigation Jump to search
 
(33 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
== Principe de fonctionnement ==
 
== Principe de fonctionnement ==
  +
[[Image:Connection diagram.jpg|400px|thumb|right|Contexte d'utilisation d'Apache Edgent (1)]]
 
Apache Edgent désigne un environnement d'exécution embarqué léger et une API Java permettant d'effectuer des traitements analytiques et des opérations de transformation sur des flux de données au plus près des objets connectés (directement sur les objets connectés ou sur leur passerelle de connexion - emplacements dits '''edge''' pour le système d'informations centralisé).<br /><br />
   
 
Son principal intérêt est de donner la possibilité programmatique d'extraire très en amont l'information pertinente de la masse de données collectées, ce qui présente l'avantage de réduire considérablement la quantité d'informations échangées au travers du réseau et à destination de systèmes de stockage persistant.<br /><br />
Apache Edgent désigne un environnement d'exécution embarqué léger et une API Java permettant d'effectuer des traitements analytiques et des opérations de transformation sur des flux de données au plus près des objets distants (directement sur l'objet connecté ou sur leur passerelle de connexion).<br />
 
   
 
Apache Edgent transforme ainsi un mode récurrent de collecte d'informations de type "heart beat polling" en un véritable système événementiel orienté autour des seules informations présentant une utilité informationnelle pour des traitements ultérieurs.<br /><br />
Son principal intérêt est de donner la possibilité programmatique d'extraire très en amont l'information pertinente de la masse de données collectées, ce qui présente l'avantage de réduire considérablement la quantité d'informations échangées au travers du réseau et à destination de systèmes de stockage persistant.
 
   
 
Les flux de données résultant des transformations Edgent sont ensuite transmis via des connecteurs à des applications en sortie qui peuvent être
Apache Edgent transforme ainsi un mode récurrent de collecte d'informations de type "heart beat polling" en un véritable système événementiel orienté autour des seules informations présentant une utilité informationnelle pour des traitements ultérieurs.
 
 
un serveur MQTT, une connexion JDBC, un fichier, un cluster Kafka ou un message hub de type IBM Watson IoT Platform (2).
 
Les flux de données résultats des transformations Edgent sont ensuite transmises via des connecteurs à des applications en sortie qui peuvent être
 
un serveur MQTT, une connexion JDBC, un fichier, un cluster Kafka ou un message hub de type IBM Watson IoT Platform (1).
 
   
 
== Environnements de déploiement ==
 
== Environnements de déploiement ==
   
 
Java 8 (incluant Raspberry Pi B et Pi2 B) / Java 7 / Android
 
Java 8 (incluant Raspberry Pi B et Pi2 B) / Java 7 / Android
  +
 
== Origine du projet ==
 
Apache Edgent est désormais un projet open source de type Apache Incubator (3)<br /><br /> [[File:FDquarks4.jpg|350px]]Il est l'héritier de Quarks développé par IBM jusqu'en juillet 2016 (4).
   
 
== Structure d'une application Edgent ==
 
== Structure d'une application Edgent ==
   
==== Etape 1 déclarative préalable ====
+
===== Etape 1 déclarative préalable =====
   
 
1> Instanciation d'un environnement principal d'exécution de type ''org.apache.edgent.providers.direct.DirectProvider'' :
 
1> Instanciation d'un environnement principal d'exécution de type ''org.apache.edgent.providers.direct.DirectProvider'' :
Line 33: Line 36:
 
TStream<Double> tempReadings = topology.poll(sensor, 1, TimeUnit.MILLISECONDS);
 
TStream<Double> tempReadings = topology.poll(sensor, 1, TimeUnit.MILLISECONDS);
   
==== Etape 2 de mise en route ====
+
===== Etape 2 de mise en route =====
 
Une fois entièrement définie, la mise en route de l'application se fait au travers de l'instruction suivante :
 
Une fois entièrement définie, la mise en route de l'application se fait au travers de l'instruction suivante :
   
 
dp.submit(topology);
 
dp.submit(topology);
   
== Opérations sur les flux de données ==
+
== Exemples d'opérations sur les flux de données ==
   
 
Les flux de données sont instantiés avec la classe ''org.apache.edgent.topology.TStream<T>''
 
Les flux de données sont instantiés avec la classe ''org.apache.edgent.topology.TStream<T>''
 
où T désigne le type générique du tuple de données collectées.
 
où T désigne le type générique du tuple de données collectées.
   
Un pipeline de traitements en chaîne est ensuite appliqué à ces flux de données pour produire de nouveaux flux de données avec pour traitements possibles :
+
Un '''pipeline de traitements en chaîne''' est ensuite appliqué à ces flux de données pour produire de nouveaux flux de données avec pour traitements possibles :
==== Règles de filtre ====
+
===== Règles de filtre =====
 
L'instruction suivante permet par exemple de réduire un flux de données à un flux filtré aux seules valeurs 'exeptionnelles' (<50 ou >80)
 
L'instruction suivante permet par exemple de réduire un flux de données à un flux filtré aux seules valeurs 'exeptionnelles' (<50 ou >80)
 
 
 
TStream<Double> ts2 = ts1.filter(reading -> reading < 50 || reading > 80);
 
TStream<Double> ts2 = ts1.filter(reading -> reading < 50 || reading > 80);
   
==== Autres règles de transformation et d'opération analytique ====
+
===== Définition de fenêtres temporelles =====
 
Des sous-ensembles de données peuvent être définis via des fenêtres temporelles sur les flux de données (ici les données extraites lors des 5 dernières secondes)
Le type de donnée peut être modifié avec l'instruction nmap().<br>
 
 
TWindow<Integer> window = stream.last(5, TimeUnit.SECONDS, tuple -> 0);
Tout un ensemble d'opérateurs analytique d'agrégation, d'union, de répartition peuvent également être utilisés (2).
 
  +
Les fonctions analytiques habituelles portant sur des ensembles (moyennes, valeurs limites, ...) peuvent alors être appliquées.
  +
===== Autres règles de transformation =====
 
Le type de donnée peut être transmuté avec l'instruction nmap(). Des opérateurs d'agrégation, d'union, de répartition peuvent également être utilisés (5).
   
==== Parallélisation des règles ====
+
===== Parallélisation des règles =====
 
Il est possible de paralléliser les traitements avec cet exemple instruction :
 
Il est possible de parallèliser les traitements comme l'indique l'instruction suivante :
 
 
|-&gt; A2-channel0 -&gt;|
 
|-&gt; A2-channel0 -&gt;|
 
sensorReadings&lt;T&gt; -&gt; A1 -&gt; |-&gt; A2-channel1 -&gt;| -&gt; A3 -&gt; results&lt;R&gt;
 
sensorReadings&lt;T&gt; -&gt; A1 -&gt; |-&gt; A2-channel1 -&gt;| -&gt; A3 -&gt; results&lt;R&gt;
 
|-&gt; A2-channel2 -&gt;|
 
|-&gt; A2-channel2 -&gt;|
 
==== Définition de fenêtres temporelles ====
 
Il est possible de définir des fenêtres temporelles sur les flux de données (ici les données extraites lors des 5 dernières secondes)
 
TWindow<Integer> window = stream.last(5, TimeUnit.SECONDS, tuple -> 0);
 
 
== Origine du projet ==
 
 
Apache Edgent est désormais un projet open source de type Apache Incubator (3).<br> Il est l'héritier de Quarks développé par IBM jusqu'en juillet 2016 (4).
 
   
 
= Réferences =
 
= Réferences =
 
1. http://edgent.apache.org/
 
1. http://edgent.incubator.apache.org/docs/quickstart.html
+
2. http://edgent.incubator.apache.org/docs/quickstart.html
2. http://edgent.incubator.apache.org/docs/streaming-concepts.html
 
 
3. http://incubator.apache.org
 
3. http://incubator.apache.org
 
4. https://developer.ibm.com/open/openprojects/apache-edgent/
 
4. https://developer.ibm.com/open/openprojects/apache-edgent/
  +
5. http://edgent.incubator.apache.org/docs/streaming-concepts.html
   
 
= Liens =
 
= Liens =

Latest revision as of 14:26, 8 April 2017

Principe de fonctionnement

Contexte d'utilisation d'Apache Edgent (1)

Apache Edgent désigne un environnement d'exécution embarqué léger et une API Java permettant d'effectuer des traitements analytiques et des opérations de transformation sur des flux de données au plus près des objets connectés (directement sur les objets connectés ou sur leur passerelle de connexion - emplacements dits edge pour le système d'informations centralisé).

Son principal intérêt est de donner la possibilité programmatique d'extraire très en amont l'information pertinente de la masse de données collectées, ce qui présente l'avantage de réduire considérablement la quantité d'informations échangées au travers du réseau et à destination de systèmes de stockage persistant.

Apache Edgent transforme ainsi un mode récurrent de collecte d'informations de type "heart beat polling" en un véritable système événementiel orienté autour des seules informations présentant une utilité informationnelle pour des traitements ultérieurs.

Les flux de données résultant des transformations Edgent sont ensuite transmis via des connecteurs à des applications en sortie qui peuvent être un serveur MQTT, une connexion JDBC, un fichier, un cluster Kafka ou un message hub de type IBM Watson IoT Platform (2).

Environnements de déploiement

Java 8 (incluant Raspberry Pi B et Pi2 B) / Java 7 / Android

Origine du projet

Apache Edgent est désormais un projet open source de type Apache Incubator (3)

FDquarks4.jpgIl est l'héritier de Quarks développé par IBM jusqu'en juillet 2016 (4).

Structure d'une application Edgent

Etape 1 déclarative préalable

1> Instanciation d'un environnement principal d'exécution de type org.apache.edgent.providers.direct.DirectProvider :

  DirectProvider dp = new DirectProvider();

2> Définition d'une configuration générale ou "topologie" avec org.apache.edgent.topology.Topology :

  Topology top = dp.newTopology();

3> Les fournisseurs des flux données tels que les capteurs sont définis avec l'interface org.apache.edgent.function.Supplier<T>

4> Définition de politiques de collecte des flux de données depuis les capteurs au niveau de la configuration générale.
L'instruction suivante permet par exemple de définir la collecte de mesures du capteur sensor à chaque milliseconde.

  TStream<Double> tempReadings = topology.poll(sensor, 1, TimeUnit.MILLISECONDS);
Etape 2 de mise en route

Une fois entièrement définie, la mise en route de l'application se fait au travers de l'instruction suivante :

  dp.submit(topology);

Exemples d'opérations sur les flux de données

Les flux de données sont instantiés avec la classe org.apache.edgent.topology.TStream<T> où T désigne le type générique du tuple de données collectées.

Un pipeline de traitements en chaîne est ensuite appliqué à ces flux de données pour produire de nouveaux flux de données avec pour traitements possibles :

Règles de filtre

L'instruction suivante permet par exemple de réduire un flux de données à un flux filtré aux seules valeurs 'exeptionnelles' (<50 ou >80)

  TStream<Double> ts2 = ts1.filter(reading -> reading < 50 || reading > 80);
Définition de fenêtres temporelles

Des sous-ensembles de données peuvent être définis via des fenêtres temporelles sur les flux de données (ici les données extraites lors des 5 dernières secondes)

  TWindow<Integer> window = stream.last(5, TimeUnit.SECONDS, tuple -> 0);

Les fonctions analytiques habituelles portant sur des ensembles (moyennes, valeurs limites, ...) peuvent alors être appliquées.

Autres règles de transformation

Le type de donnée peut être transmuté avec l'instruction nmap(). Des opérateurs d'agrégation, d'union, de répartition peuvent également être utilisés (5).

Parallélisation des règles

Il est possible de paralléliser les traitements avec cet exemple instruction :

                             |-> A2-channel0 ->|
  sensorReadings<T> -> A1 -> |-> A2-channel1 ->| -> A3 -> results<R>
                             |-> A2-channel2 ->|

Réferences

1. http://edgent.apache.org/ 2. http://edgent.incubator.apache.org/docs/quickstart.html 3. http://incubator.apache.org 4. https://developer.ibm.com/open/openprojects/apache-edgent/ 5. http://edgent.incubator.apache.org/docs/streaming-concepts.html

Liens

https://developer.ibm.com/open/openprojects/apache-edgent/

https://edgent.apache.org/docs/home

https://developer.ibm.com/streamsdev/2016/02/16/streaming-analytics-center-edge/

https://github.com/apache/incubator-edgent/blob/master/DEVELOPMENT.md