Apache STORM. Version 1.0. avec des fichiers



Documents pareils
Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Programmer en JAVA. par Tama

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Cours 14 Les fichiers

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Serveur d'archivage 2007 Installation et utilisation de la BD exist

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Projet de programmation (IK3) : TP n 1 Correction

ACTIVITÉ DE PROGRAMMATION

Java DataBaseConnectivity

Introduction au langage Java

Flux de données Lecture/Ecriture Fichiers

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Remote Method Invocation Les classes implémentant Serializable

Organiser les informations ( approche technique )

RMI le langage Java XII-1 JMF

Création d un service web avec NetBeans 5.5 et SJAS 9

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programmation par les Objets en Java

Remote Method Invocation (RMI)

LOG4430 : Architecture logicielle et conception avancée

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Développement Logiciel

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Java Licence Professionnelle CISII,

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Calcul Parallèle. Cours 5 - JAVA RMI

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

TP1. Outils Java Eléments de correction

Premiers Pas en Programmation Objet : les Classes et les Objets

Programmation Par Objets

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Création d une application JEE

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Corrigé des exercices sur les références

Tutoriel d installation de Hibernate avec Eclipse

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

La gestion des exceptions

Programmation Réseau SSH et TLS (aka SSL)

Initiation à JAVA et à la programmation objet.

Open Source Job Scheduler. Installation(s)

Utilisation d objets : String et ArrayList

Programme Compte bancaire (code)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

7 Développement d une application de MapReduce

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Généralités sur le Langage Java et éléments syntaxiques.

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Un ordonnanceur stupide

INF 321 : mémento de la syntaxe de Java

Auto-évaluation Programmation en Java

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Sécurité Java 2. Première approche. Installation des exemples. Exemple d'une applet

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

TD/TP PAC - Programmation n 3

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Dis papa, c est quoi un bus logiciel réparti?

4. Groupement d objets

Synchro et Threads Java TM

TD3: tableaux avancées, première classe et chaînes

SECURIDAY 2013 Cyber War

Plan du cours. Historique du langage Nouveautés de Java 7

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Programmation Objet Java Correction

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Surveiller sa maison via son Smartphone sous Android

Certificat Big Data - Master MAthématiques

Annexe 10 - Procédure pour créer un Jar

Notes de cours Practical BigData

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Introduction à JDBC. Accès aux bases de données en Java

Desktop Intégration. Rémi Forax

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Travaux Pratiques : Lucène - Gestion d un index plein texte

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Programmation Internet en Java

Introduction : les processus. Introduction : les threads. Plan

COMPARAISONDESLANGAGESC, C++, JAVA ET

Cours 6 : Tubes anonymes et nommés

Création d objet imbriqué sous PowerShell.

Chapitre 10. Les interfaces Comparable et Comparator 1

Package Java.util Classe générique

TP Programmation Java / JDBC / Oracle

Serveur DNS et DHCP couplé à LDAP Debian GNU/Linux

Première coupe : Introduction à la plateforme Java EE JAVA JAVA. Introduction à la plateforme Java EE. Introduction à la plateforme Java EE

Eclipse atelier Java

Programmation d application Bases de données avec Java

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Programmation avec des objets : Cours 7. Menu du jour

Programmation client-serveur sockets - RPC

Transcription:

Apache STORM avec des fichiers Version 1.0 Rédacteur : Philippe Lacomme (placomme@isima.fr) Date : 3 septembre 2015 Liste des modifications Date : 9/09/2015 Auteur : Philippe Lacomme Modifications : ajout notion de flux pour un cluster Installation réalisée sur : Ubuntu 15.04 Environnement : Vmware Documents à consulter : https://storm.apache.org/documentation/understanding-the-parallelism-of-a-stormtopology.html https://storm.apache.org/documentation/tutorial.html Licence : Ce document est une compilation d'information parfois en Anglais ou en Français librement accessibles sur Internet. Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, version 1.3 ou ultérieure publiée par la Free Software Foundation ; sans section inaltérable, sans texte de première page de couverture et sans texte de dernière page de couverture. Une copie de cette licence en anglais est consultable sur le site suivant : http://www.gnu.org/licenses/fdl.html Objectifs : 1 objectif dans ce tutoriel : - apprendre à manipuler des fichiers en entrée 1

1. Modifier le Spout : Open() Dans le fichier SentenceSpout.java, dans la classe, il faut ajouter deux variables l'une pour le contexte et l'autre pour lire le contenu du fichier : // les outils de lecture du fichier private TopologyContext context; private FileReader filereader; Il faut ensuite modifier le fichier open pour : 1) récupérer le nom du fichier dans la Map en cherchant inputfile ; 2) ouvrir le fichier et stocker le tout dans la variable filereader. @Override public void open(map map, TopologyContext tc, SpoutOutputCollector soc) try this.context = tc; String nom = map.get("inputfile").tostring(); this.filereader = new FileReader(nom); catch (FileNotFoundException e) throw new RuntimeException("Error reading file " + map.get("inputfile")); this.flux_sortie = soc; La classe ressemble alors à celle de la figure 1. Figure 1. Classe SentenceSpout après modification de la méthode Open() 2

2. Modifier le Spout : nexttuple() Les modifications sont simples et consistent à remplacer la lecture des phrases du tableau par un parcours du fichier. Notons toutefois qu'il faut utiliser un try..catch() ce qui alourdit un peu la procédure. @Override public void nexttuple() if (termine==0) String str; BufferedReader reader = new BufferedReader(fileReader); try while ((str = reader.readline())!= null) Values valeur = new Values(str); Calendar cal = Calendar.getInstance(); int hour = cal.get(calendar.hour_of_day); int minute = cal.get(calendar.minute); int secondes= cal.get(calendar.second); int msecondes= cal.get(calendar.millisecond); String heure = hour+":"+minute+":"+secondes+":"+msecondes; System.out.println(""+heure+" : Spout : emission de "+str); this.flux_sortie.emit(valeur); catch (Exception e) throw new RuntimeException("Error reading typle", e); finally termine = 1; Utils.waitForMillis(1); 3. Modifier le Spout : Créer la procedure close() La procédure soit simplement fermer le fichier. @Override public void close() try filereader.close(); catch (Exception e) e.printstacktrace(); 4. Modifier le Spout : modification de la classe DemoStorm Il faut ajouter une variable globale dans la classe : private static final String nom_fichier = "poeme.txt"; 3

Il faut modifier le contenu de la variable configuration à laquelle on ajouter le couple ("inputfile", "poeme.txt"). Config configuration = new Config(); configuration.put("inputfile", nom_fichier); configuration.setdebug(true); La classe ressemble à celle de la figure 2. Figure 2. La fonction main() après modification 5. Tester le programme Il faut copier le poème dans un fichier nommé par exemple poeme.txt (figure 3). Figure 3. Création d'un fichier texte contenant le poème 4

On peut ensuite lancer le programme Java, ce qui donne le résultat de la figure 4. Figure 4. Résultat de l'exécution 6. Cas particulier des fichiers pour une exécution dans une cluster Storm Il n'est pas possible d'exécuter le code précédent sur un cluster Storm en dehors de l'environnement Netbeans. En effet, le fichier poeme.txt est présent sur le disque dur de la machine de développement mais n'existera pas sur les nœuds du cluster après un démarrage en ligne de commande. Deux régles sont à respecter : 1) les fichiers doivent être inclus dans le fichier Jar 2) il faut accéder aux fichiers avec des flux. 5

Il est possible de créer un répertoire et de regrouper l'ensemble des fichiers de données dans ce répertoire. On peut par exemple créer un répertoire data comme sur la figure 5 ou bien directement dans le répertoire contenant les classes java. Inutile de préciser que cette deuxième solution est à éviter! Figure 5. Inclusion de fichiers (ressources) dans le projet Modification de la classe SentenceSpout.java Il faut définir une variable de type InputStream nommée par exemple MonInputStream et accompagner cette définition de deux autres variables, l'une qui contiendra le nombre total de ligne à lire et la deuxième le nombre de ligne déjà lues. // -- variables pour la manip du flux -- // -- ------------------------------- -- InputStream MonInputStream; int nb_ligne_totale=0; int nb_ligne_lue = 0; Il faut procéder comme pour un fichier classique et stocker dans la variable MonInputStream l'accès à la ressource (évitons le mot fichier!). Ceci passe par la manipualtion d'une URL et ensuite une utilisation de openstream() qui donnera finalement le stream (enfin peut on dire). // identification des datas URL urlclass=demostorm.class.getresource("data.txt"); System.out.println("url = "+urlclass.tostring()); InputStream ss = urlclass.openstream(); MonInputStream = ss; Le caractère peut agréable des manipualtions arrive maintenant hélas car le stream permet une récupération caractères par caractères des données.. 6

De ce point de vue, il faut mieux formater les fichiers avec des informations sur le nombre de ligne à lire et un séparateur spécifique pour les fins de ligne. La figure 6 donne un exemple d'un tel fichier, qui peut être comparé à celui de la figure 7. Figure 6. Un fichier formaté facilitant la relecture Figure 7. Un fichier formaté ne facilitant pas la relecture 7

Un autre à considérer peut être celui des figures 8 et 9. Figure 8. Un fichier formaté ne facilitant pas la relecture Figure 9. Un fichier formaté ne facilitant pas la relecture 8

Figure 10. Le poème reformatté. Compte tenu des remarques qui précède, on peut détailler le début de solution pourla classe SentenceSpout.java. On peut munir la classe d'une procédure permettant de lire le contenu de la première ligne du fichier et dont le code serait : void consulter_nb_ligne_dans_fichier() try char c; String ligne=""; do int nb = MonInputStream.read(); c = (char) nb; ligne=ligne+c; while (c!='/'); String[] parts = ligne.split("/"); String chaine1=parts[0].trim(); nb_ligne_totale = Integer.parseInt(chaine1); System.out.print(ligne); catch(exception E) 9

Toujours selon le même principe, on peut créer une procédure lire_ligne() dont le code serait : String lire_ligne() if (nb_ligne_lue<nb_ligne_totale) try char c; String ligne=""; do int nb = MonInputStream.read(); c = (char) nb; ligne=ligne+c; while (c!='/'); String[] parts = ligne.split("/"); String chaine1=parts[0].trim(); System.out.print(chaine1); nb_ligne_lue++; return chaine1; catch(exception E) return ""; La procédure nexttuple() peut alros se réécrire facilement comme suit : @Override public void nexttuple() if (termine==0) consulter_nb_ligne_dans_fichier(); String str; try while (nb_ligne_lue<nb_ligne_totale) str = lire_ligne(); Values valeur = new Values(str); Calendar cal = Calendar.getInstance(); int hour = cal.get(calendar.hour_of_day); int minute = cal.get(calendar.minute); int secondes= cal.get(calendar.second); int msecondes= cal.get(calendar.millisecond); String heure = hour+":"+minute+":"+secondes+":"+msecondes; System.out.println(""+heure+" : Spout : emission de "+str); numero_courant++; this.flux_sortie.emit(valeur, numero_courant); Utils.waitForMillis(3); catch (Exception e) throw new RuntimeException("Error reading typle", e); finally termine = 1; Utils.waitForMillis(1); Le lecteur pourra facilement vérifier qu'en déployant le.jar sur le cluster, l'ensemble du code fonctionne alors normalement. 10

11