Tutoriel esper
-
Upload
laboratoire-dinformatique-de-grenoble -
Category
Documents
-
view
665 -
download
4
description
Transcript of Tutoriel esper
ANALYSE DES FLOTS D’ÉVÉNEMENTS: TUTORIEL ESPER
Par Epal Njamen Orléant, [email protected]
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 !