tutoriel esper

Post on 24-Dec-2014

665 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

Introduction au traitement des flux d'événements, et mise en oeuvre à travers un scénario, utilisant le système Esper. (http://esper.codehaus.org/)

TRANSCRIPT

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 Installation des 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)

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.

Le type d’information que chacun veut recevoir dépend de ses préférences et ses besoins pendant des périodes spécifiques…

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 descriptionfrom 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 !

top related