ANALYSE DES FLOTS
D’ÉVÉNEMENTS: TUTORIEL
ESPER
 Par Epal Njamen Orléant, epaln@imag.fr
 Master 2 Informatique
Plan
   Contexte et motivations
       scénario

   Implantation
       Installationdes outils
       Présentation de l’implantation du scénario
       Application
La notion d’événement
   Quelque chose qui s’est produit à un certain
    instant
     Achat  d’un article
     Fermeture d’une porte

     Accident de la circulation

     Changement climatique

     Notification d’un capteur

     etc...
Communication à base
d’événements
   Style de
    communication basé
    sur la production et la
    réception
    d’événements
    (publish/subscribe)
       Producteurs
           composants applicatifs
            produisant des
            événements (publish)
       Consommateurs
           composants applicatifs
            intéressés en la
            réception de certains
            événements
            (subscribe)
Scénario: ville intelligente
    On désire permettre aux
     habitants d’une ville de se
     déplacer en restant informés
     sur la façon dont la ville
     évolue.

    Plus précisément, donner la
     possibilité aux habitants
     d’être notifiés de certaines
     situations intéressantes et
     utiles à leur existence:
        offres d’article en solde
        état du trafic routier
        zones à faible degré de
         violence
         etc…
Scénario: ville intelligente (2)
   Le type d’information que chacun veut recevoir dépend
    de ses préférences et ses besoins pendant des périodes
    spécifiques…
                     Je souhaite recevoir des informations
                     sur le trafic chaque soir entre 17h et
                     19h, en semaine

                    Pour le weekend, les offres de cinéma
                    et des rassemblements artistiques.

                    Quand je me déplace, j’aimerai savoir
                    le degré de violence des quartiers que
                    je traverse.
La notion de type d’événement
   Représente une classe d’événements de même
    caractéristiques
     Ex: TraficEvent (long timestamp, String roadName, String
      state )


   Un événement est donc une instance d’un type
    d’événement
     t(52344945, "Av. J O", "fluide" )
Type d’Evénement simple,
complexe,
   Evénement simple
       représente une situation atomique directement signalée
        par un producteur.
   Evénement complexe ou composite
       Événement qui est une abstraction d’autres événements,
        appelés membres
           Tsunami: abstraction de plusieurs événements naturels…
           Crash d’un avion: abstraction de plusieurs pannes du système
            de contrôle
           Bug de l’an 2000: abstraction du crash de plusieurs systèmes
            informatiques, dus au passage à l’année 2000
       Il est crée en combinant des événements de base, en
        utilisant des opérateurs de composition spécifiques tel que
        l’agrégation, conjonction, disjonction, séquence, etc…
Composition d’événements dans la
    ville
   Une infrastructure à base
    d’événements, devant
    interconnecter dans un style
    producteurs/consommateurs
    (publish/subscribe) les habitants
    et les sources de données:
       Sources de données
        (producteurs): génèrent les flux
        d’événements
           Service Météo => données
            météorologiques
           Service Routier => info trafic,
            incidents, etc…
           Service Sécurité => infos sur les
            actes de vandalisme dans les rues
           Service Calendrier => jours fériés,
            dates importantes, etc…
           Service Annonces => mises en
            vente, publicités, artistique,
            cinéma, etc…
       Les habitants (consommateurs):
        spécifient la nature des
        informations qu’ils désirent
        recevoir.
Solutions existantes
   Esper [1], Stream [2], StreamBase [3],
    StreamInSight [4]
   Principales fonctionnalités offertes
     Agrégation:  avg, count, sum
     Corrélation : followed by, and, or, not
      A  => (B or C)
       A and (not B)

     Filtrage:   Type et attributs
         ActionEvent (user="toto", action="exit")
Tutoriel Esper
   Un système centralisé d’analyse de flux
    d’événements
   Langages cibles
     Java: Esper
     .NET: NEsper

   Open source, téléchargeable gratuitement
   JDK 1.5 ou version supérieure
   Langage proche du sql, l’EPL
       Permet de spécifier des requêtes complexes
   Modèle d’analyse en continue des requêtes
   Site principal: http://esper.codehaus.org/
Types d’événements sous
Esper
   3 représentations:
     java.lang.Object:  POJO avec getters et setters…
     java.util.Map: paires clé-valeur

     org.w3c.dom.Node: xml DOM

   Des adaptateurs permettant la prise en
    compte des flux CSV, JMS, HTTP
Exemple: classe Java
public class SellEvent {
    private String item;
    private String description;
    private double price;
    public SellEvent() {
    }
/*
 * ainsi que les getteurs et setteurs…
 */
}
Production des événements
   Avertissement au préalable du type d’événement:
    EPServiceProvider cep=EPServiceProviderManager.getProvider();
    cep.getEPAdministrator().
    getConfiguration().addEventType("SellEvent",
    SellEvent.class.getName());
   Production proprement dite:
    SellEvent event=new SellEvent();
    event.setItem("iPhone 4 S");
    event.setDescription("version 16 Go");
    event.setPrice(400);
    event.setTimestamp(System.currentTimeMillis());
    cep.getEPRuntime().send(event);
Formulation d’une requête
   Détection des articles en solde: le prix a chuté
    de 50% par rapport au prix initial au cours du
    même mois…

      select a.item as item, a.price as oldprice, b.price as
      price, a.description as description
      from pattern [
        every-distinct(a.item) a=SellEvent ->
         every b=SellEvent(item=a.item, price< (a.price*0.5))
      ].win:time(1 month)
Définition d’un consommateur
   Association requête-consommateur
     cepStatement = CEPManager.getInstance().getCepAdm().createEPL(query);
     cepStatement.addListener(new SoldeListener());

   Code du consommateur

    public class SoldeListener implements UpdateListener {
      public void update(EventBean[] ebs, EventBean[] ebs1) {
         EventBean o = ebs[0];
         double price = (Double) o.get("price");
         double oldprice = (Double) o.get("oldprice");
         String item = (String) o.get("item");
         String descr = (String) o.get("description");
        // traitement…
      }
    }
Implantation et exécution du
scénario
   Le projet démo:
     Un   exécutable java
       Producteurs d’événements simples
       Création automatique d’un consommateur pour
        chaque requête fournie dans le fichier
        custom_query.txt
Dans le fichier custom_query.txt
   Requête 1: soldes…
   requête 2: détection de l’absence de vandalisme dans la ville de Grenoble
    lors de la dernière minute

       @Name('custom2')
       select * from pattern
       [every ( timer:interval(1 min) and not PoliceEvent(city='grenoble'))]

   requête 3: détection des offres de loisir (artistique, cinéma) dans la ville de
    Grenoble les weekends et les jours fériés

       @Name ('custom3')
       select e.type, e.city, e.title, e.description
       from pattern [ every (
         ( CalendarEvent(state='férié chomé') or timer:at (*,*,*,*,*/6,*) )
          -> e=PubEvent (type in ('Cinema', 'Artistique') )
          )
        ].win:time(1 day)|e.type, e.city, e.title, e.description
Exécution


  Visualisation   du projet sous eclipse

  $>   java –jar scenarioTest.jar
Conclusion
   Nous avons présenté la notion d’analyse des flux
    d’événements, et à travers un scénario, nous
    avons pu expérimenter ces notions en utilisant
    Esper [1].
   Dans la prochaine présentation, nous nous
    attaquerons à la problématique qui consiste à
    distribuer le processus d’analyse sur plusieurs
    machines.
   Nous illustrerons les principaux défis, et nous
    présenterons une approche pour la distribution
   TAF
     Spécifier un service composition distribuée des flux
      d’événements
     Implémentation et validation ?
References
   [1] Esper, http://esper.codehaus.org/
   [2] Stream,
    http://infolab.stanford.edu/stream/code/user.pdf
   [3] StreamInsight, http://msdn.microsoft.com/en-
    us/library/ee362541.aspx
   [4] StreamBase, http://www.streambase.com/
Merci pour votre aimable
attention !

Tutoriel esper

  • 1.
    ANALYSE DES FLOTS D’ÉVÉNEMENTS:TUTORIEL ESPER Par Epal Njamen Orléant, epaln@imag.fr Master 2 Informatique
  • 2.
    Plan  Contexte et motivations  scénario  Implantation  Installationdes outils  Présentation de l’implantation du scénario  Application
  • 3.
    La notion d’événement  Quelque chose qui s’est produit à un certain instant  Achat d’un article  Fermeture d’une porte  Accident de la circulation  Changement climatique  Notification d’un capteur  etc...
  • 4.
    Communication à base d’événements  Style de communication basé sur la production et la réception d’événements (publish/subscribe)  Producteurs  composants applicatifs produisant des événements (publish)  Consommateurs  composants applicatifs intéressés en la réception de certains événements (subscribe)
  • 5.
    Scénario: ville intelligente  On désire permettre aux habitants d’une ville de se déplacer en restant informés sur la façon dont la ville évolue.  Plus précisément, donner la possibilité aux habitants d’être notifiés de certaines situations intéressantes et utiles à leur existence:  offres d’article en solde  état du trafic routier  zones à faible degré de violence  etc…
  • 6.
    Scénario: ville intelligente(2)  Le type d’information que chacun veut recevoir dépend de ses préférences et ses besoins pendant des périodes spécifiques… Je souhaite recevoir des informations sur le trafic chaque soir entre 17h et 19h, en semaine Pour le weekend, les offres de cinéma et des rassemblements artistiques. Quand je me déplace, j’aimerai savoir le degré de violence des quartiers que je traverse.
  • 7.
    La notion detype d’événement  Représente une classe d’événements de même caractéristiques  Ex: TraficEvent (long timestamp, String roadName, String state )  Un événement est donc une instance d’un type d’événement  t(52344945, "Av. J O", "fluide" )
  • 8.
    Type d’Evénement simple, complexe,  Evénement simple  représente une situation atomique directement signalée par un producteur.  Evénement complexe ou composite  Événement qui est une abstraction d’autres événements, appelés membres  Tsunami: abstraction de plusieurs événements naturels…  Crash d’un avion: abstraction de plusieurs pannes du système de contrôle  Bug de l’an 2000: abstraction du crash de plusieurs systèmes informatiques, dus au passage à l’année 2000  Il est crée en combinant des événements de base, en utilisant des opérateurs de composition spécifiques tel que l’agrégation, conjonction, disjonction, séquence, etc…
  • 9.
    Composition d’événements dansla ville  Une infrastructure à base d’événements, devant interconnecter dans un style producteurs/consommateurs (publish/subscribe) les habitants et les sources de données:  Sources de données (producteurs): génèrent les flux d’événements  Service Météo => données météorologiques  Service Routier => info trafic, incidents, etc…  Service Sécurité => infos sur les actes de vandalisme dans les rues  Service Calendrier => jours fériés, dates importantes, etc…  Service Annonces => mises en vente, publicités, artistique, cinéma, etc…  Les habitants (consommateurs): spécifient la nature des informations qu’ils désirent recevoir.
  • 10.
    Solutions existantes  Esper [1], Stream [2], StreamBase [3], StreamInSight [4]  Principales fonctionnalités offertes  Agrégation: avg, count, sum  Corrélation : followed by, and, or, not A => (B or C)  A and (not B)  Filtrage: Type et attributs  ActionEvent (user="toto", action="exit")
  • 11.
    Tutoriel Esper  Un système centralisé d’analyse de flux d’événements  Langages cibles  Java: Esper  .NET: NEsper  Open source, téléchargeable gratuitement  JDK 1.5 ou version supérieure  Langage proche du sql, l’EPL  Permet de spécifier des requêtes complexes  Modèle d’analyse en continue des requêtes  Site principal: http://esper.codehaus.org/
  • 12.
    Types d’événements sous Esper  3 représentations:  java.lang.Object: POJO avec getters et setters…  java.util.Map: paires clé-valeur  org.w3c.dom.Node: xml DOM  Des adaptateurs permettant la prise en compte des flux CSV, JMS, HTTP
  • 13.
    Exemple: classe Java publicclass SellEvent { private String item; private String description; private double price; public SellEvent() { } /* * ainsi que les getteurs et setteurs… */ }
  • 14.
    Production des événements  Avertissement au préalable du type d’événement: EPServiceProvider cep=EPServiceProviderManager.getProvider(); cep.getEPAdministrator(). getConfiguration().addEventType("SellEvent", SellEvent.class.getName());  Production proprement dite: SellEvent event=new SellEvent(); event.setItem("iPhone 4 S"); event.setDescription("version 16 Go"); event.setPrice(400); event.setTimestamp(System.currentTimeMillis()); cep.getEPRuntime().send(event);
  • 15.
    Formulation d’une requête  Détection des articles en solde: le prix a chuté de 50% par rapport au prix initial au cours du même mois… select a.item as item, a.price as oldprice, b.price as price, a.description as description from pattern [ every-distinct(a.item) a=SellEvent -> every b=SellEvent(item=a.item, price< (a.price*0.5)) ].win:time(1 month)
  • 16.
    Définition d’un consommateur  Association requête-consommateur cepStatement = CEPManager.getInstance().getCepAdm().createEPL(query); cepStatement.addListener(new SoldeListener());  Code du consommateur public class SoldeListener implements UpdateListener { public void update(EventBean[] ebs, EventBean[] ebs1) { EventBean o = ebs[0]; double price = (Double) o.get("price"); double oldprice = (Double) o.get("oldprice"); String item = (String) o.get("item"); String descr = (String) o.get("description"); // traitement… } }
  • 17.
    Implantation et exécutiondu scénario  Le projet démo:  Un exécutable java  Producteurs d’événements simples  Création automatique d’un consommateur pour chaque requête fournie dans le fichier custom_query.txt
  • 18.
    Dans le fichiercustom_query.txt  Requête 1: soldes…  requête 2: détection de l’absence de vandalisme dans la ville de Grenoble lors de la dernière minute @Name('custom2') select * from pattern [every ( timer:interval(1 min) and not PoliceEvent(city='grenoble'))]  requête 3: détection des offres de loisir (artistique, cinéma) dans la ville de Grenoble les weekends et les jours fériés @Name ('custom3') select e.type, e.city, e.title, e.description from pattern [ every ( ( CalendarEvent(state='férié chomé') or timer:at (*,*,*,*,*/6,*) ) -> e=PubEvent (type in ('Cinema', 'Artistique') ) ) ].win:time(1 day)|e.type, e.city, e.title, e.description
  • 19.
    Exécution  Visualisation du projet sous eclipse  $> java –jar scenarioTest.jar
  • 20.
    Conclusion  Nous avons présenté la notion d’analyse des flux d’événements, et à travers un scénario, nous avons pu expérimenter ces notions en utilisant Esper [1].  Dans la prochaine présentation, nous nous attaquerons à la problématique qui consiste à distribuer le processus d’analyse sur plusieurs machines.  Nous illustrerons les principaux défis, et nous présenterons une approche pour la distribution  TAF  Spécifier un service composition distribuée des flux d’événements  Implémentation et validation ?
  • 21.
    References  [1] Esper, http://esper.codehaus.org/  [2] Stream, http://infolab.stanford.edu/stream/code/user.pdf  [3] StreamInsight, http://msdn.microsoft.com/en- us/library/ee362541.aspx  [4] StreamBase, http://www.streambase.com/
  • 22.
    Merci pour votreaimable attention !