4.5 Practice : MaxTemperature avec plusieurs langages de programmation



Documents pareils
Notes de cours Practical BigData

7 Développement d une application de MapReduce

Cloud Computing MapReduce Année académique 2014/15

MapReduce et Hadoop. Alexandre Denis Inria Bordeaux Sud-Ouest France ENSEIRB PG306

Introduc)on à Map- Reduce. Vincent Leroy

Introduction à Hadoop & MapReduce

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

Map-Reduce : un cadre de programmation parallèlle pour l analyse de grandes données. Stéphane Genaud ENSIIE

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

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

Certificat Big Data - Master MAthématiques

Flux de données Lecture/Ecriture Fichiers

Programmation système I Les entrées/sorties

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

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

Projet de programmation (IK3) : TP n 1 Correction

Java Licence Professionnelle CISII,

ACTIVITÉ DE PROGRAMMATION

Introduction à MapReduce/Hadoop et Spark

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Java Licence Professionnelle CISII,

Remote Method Invocation Les classes implémentant Serializable

LOG4430 : Architecture logicielle et conception avancée

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

Le prototype de la fonction main()

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

Desktop Intégration. Rémi Forax

Derrière toi Une machine virtuelle!

Corrigé des exercices sur les références

Lier Erlang avec d autres langages de programmation

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Introduction au langage C

Hadoop : une plate-forme d exécution de programmes Map-Reduce

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

Programmer en JAVA. par Tama

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

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Chapitre 10. Les interfaces Comparable et Comparator 1

TP1. Outils Java Eléments de correction

Programmation Par Objets

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

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

3IS - Système d'exploitation linux - Programmation système

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

Anticiper et prédire les sinistres avec une approche Big Data

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

Synchro et Threads Java TM

Importation et exportation de données dans HDFS

Initiation à JAVA et à la programmation objet.

Déploiement d une architecture Hadoop pour analyse de flux. françois-xavier.andreu@renater.fr

Calcul Parallèle. Cours 5 - JAVA RMI

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

Package Java.util Classe générique

Langage Java. Classe de première SI

Le Modèle de Sécurité dans JAVA

as Architecture des Systèmes d Information

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Programmation Réseau SSH et TLS (aka SSL)

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

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Un ordonnanceur stupide

Premiers Pas en Programmation Objet : les Classes et les Objets

La base de données XML exist. A. Belaïd

Traitement de données

Une introduction à Java

TP1 : Initiation à Java et Eclipse

Programme Compte bancaire (code)

Corrigés des premiers exercices sur les classes

Programmation système de commandes en C

Cours 1: Java et les objets

Programmation Objet Java Correction

Java - la plateforme

Environnements de développement (intégrés)

Java Licence professionnelle CISII,

Développement Logiciel

Programmation client-serveur sockets - RPC

R+Hadoop = Rhadoop* Des logiciels libres complémentaires, une implémentation, une réponse au nouveau paradigme du bigdata!

Introduction au langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

OpenPaaS Le réseau social d'entreprise

LOG4430 : Architecture logicielle et conception avancée

Cours Java Native Interface

Hadoop : une plate-forme d exécution de programmes Map-Reduce

Avant-propos. Organisation du livre

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

RMI le langage Java XII-1 JMF

PROGRAMMATION PAR OBJETS

Classe Interne, Anonyme & Enumération

Threads. Threads. USTL routier 1

Big Data Concepts et mise en oeuvre de Hadoop

Java 1.5 : principales nouveautés

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

Introduction : les processus. Introduction : les threads. Plan

INFO-F-404 : Techniques avancées de systèmes d exploitation

INITIATION AU LANGAGE JAVA

Utilisation d objets : String et ArrayList

Transcription:

4.5 Practice : MaxTemperature avec plusieurs langages de programmation 4.5.1 Java A partir de la section précédente, on peut réécrire le programme Java pour résoudre MaxTempérature comme ci-dessus. import java.io.ioexception; import org.apache.hadoop.fs.path; import org.apache.hadoop.io.intwritable; import org.apache.hadoop.io.longwritable; import org.apache.hadoop.io.text; import org.apache.hadoop.mapreduce.job; import org.apache.hadoop.mapreduce.mapper; import org.apache.hadoop.mapreduce.reducer; import org.apache.hadoop.mapreduce.lib.input.fileinputformat; import org.apache.hadoop.mapreduce.lib.output.fileoutputformat; public class MaxTemperature { static class MaxTemperatureMapper extends Mapper<LongWritable, Text, Text, IntWritable> { private static final int MISSING = 9999; public void map(longwritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.tostring(); String year = line.substring(0, 4); int airtemperature; if (line.charat(4) == + ) { // parseint doesn t like leading plus signs airtemperature = Integer.parseInt(line.substring(5, 9)); else { airtemperature = Integer.parseInt(line.substring(4, 9)); String quality = line.substring(9, 10); if (airtemperature!= MISSING && quality.matches("[01459]")) { context.write(new Text(year), new IntWritable(airTemperature)); static class MaxTemperatureReducer extends Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int maxvalue = Integer.MIN_VALUE; for (IntWritable value : values) { maxvalue = Math.max(maxValue, value.get()); context.write(key, new IntWritable(maxValue)); 9

public static void main(string[] args) throws Exception{ if (args.length!= 2) { System.err.println("Usage: MaxTemperature <input path> <output path>"); System.exit(-1); Job job = new Job(); job.setjarbyclass(maxtemperature.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.setmapperclass(maxtemperaturemapper.class); job.setreducerclass(maxtemperaturereducer.class); job.setoutputkeyclass(text.class); job.setoutputvalueclass(intwritable.class); System.exit(job.waitForCompletion(true)? 0 : 1); Dans Eclipse, pour que le programme fonctionne, plusieurs fichiers.tar doivent être présents. Figure 2 Fichiers tar dans Eclipse Si on utilise un terminal, supposons que le dossier où se trouve le projet est dans Desktop/Blogtex/Weather et que les classes sont dans le dossier bin, les commandes sont les suivantes % cd Desktop/Blogtex/Weather % export HADOOP_CLASSPATH=bin % hadoop MaxTemperature weather.txt output L écran devrait a chier quelque chose de similaire à : 15/01/16 10:46:20 INFO jvm.jvmmetrics: Initializing JVM Metrics with processname=jobtracker[...] 15/01/16 10:46:20 WARN mapreduce.jobsubmitter: Hadoop command-line [...] 15/01/16 10:46:20 WARN mapreduce.jobsubmitter: No job jar file set. [...] 15/01/16 10:46:20 INFO input.fileinputformat: Total input paths to process : 1 [...] WRONG_LENGTH=0 WRONG_MAP=0 WRONG_REDUCE=0 File Input Format Counters Bytes Read=95 File Output Format Counters Bytes Written=51 10

Remarques On utilise la commande hadoop au lieu de java car les bibliothèques d Hadoop seront ajoutées au classpath. Pour ajouter les classes d application au classpath, on défine un environnement HADOOP CLASSPATH. Les warnings ne sont pas étranges car on utilise le mode local sans JAR. La sortie est enregistrée dans output. Le job a un seul reducer, on a donc un seul fichier part-r-00000. On peut a chier son contenu par % cat output/part-r-00000 1941 2621 1942 2812 1943 117 1944 2500 4.5.2 Python En Python, on peut lancer la commande : hadoop jar $HADOOP_INSTALL/share/hadoop/tools/lib/hadoop-streaming-2.6.0.jar \ -mapper MaxTemperatureMapper.py -reducer MaxTemperatureReducer.py \ -input weather.txt -output output Les classes Mapper et Reducer sont les suivantes : Mapper #!/usr/bin/env python import re import sys for line in sys.stdin: val = line.strip() (year, temp, q) = (val[0:4], val[4:9], val[9:10]) if (temp!= "+9999" and re.match("[01459]", q)): print "%s\t%s" % (year, temp) Reducer #!/usr/bin/env python import sys (last_key, max_val) = (None, 0) for line in sys.stdin: (key, val) = line.strip().split("\t") if last_key and last_key!= key: print "%s\t%s" % (last_key, max_val) (last_key, max_val) = (key, int(val)) else: (last_key, max_val) = (key, max(max_val, int(val))) if last_key: print "%s\t%s" % (last_key, max_val) 11

4.5.3 C++ and Pipeline On crée un programme similaire qu en Python et Java, à l aide de la bibliothèque Pipeline. #include <algorithm> #include <limits> #include <stdint.h> #include <string> #include "include/pipes.hh" #include "include/templatefactory.hh" #include "include/stringutils.hh" class MaxTemperatureMapper : public HadoopPipes::Mapper { public: MaxTemperatureMapper(HadoopPipes::TaskContext& context) { void map(hadooppipes::mapcontext& context) { std::string line = context.getinputvalue(); std::string year = line.substr(0, 4); std::string airtemperature = line.substr(4, 5); std::string q = line.substr(8, 1); if (airtemperature!= "+9999" && (q == "0" q == "1" q == "4" q == "5" q == "9")) { context.emit(year, airtemperature); ; class MapTemperatureReducer : public HadoopPipes::Reducer { public: MapTemperatureReducer(HadoopPipes::TaskContext& context) { void reduce(hadooppipes::reducecontext& context) { int maxvalue = INT_MIN; while (context.nextvalue()) { maxvalue = std::max(maxvalue, HadoopUtils::toInt(context.getInputValue())); context.emit(context.getinputkey(), HadoopUtils::toString(maxValue)); ; int main(int argc, char *argv[]) { return HadoopPipes::runTask(HadoopPipes::TemplateFactory<MaxTemperatureMapper, MapTemperatureReducer>()); La di érence ici est que C++ ne traite pas les streams comme Python ou Ruby. En e et, Pipe utilise les socket comme chaine de communiquer entre tasktracker et les fonctions Map et Reduce de C++. Alors, il faut d abord créer un Makefile : CC = g++ PLATFORM=Darwin-x86-64 CPPFLAGS = -m32 -I$(HADOOP_INSTALL)/c++/$(PLATFORM)/include MaxTem: MaxTemperature.cpp $(CC) $(CPPFLAGS) $< -Wall -L$(HADOOP_INSTALL)/c++/$(PLATFORM)/lib/native \ 12

-lhadooppipes -lhadooputils -lpthread -g -O2 -o $@ \make Ensuite, en tapant dans le terminal : Un exécutable est créé. On doit maintenant travailler avec le mode pseudo-distribué (les modifications nécessaires sont montrées dans la première section). On copie l exécutable (ainsi que l entrée) à HDFS : % hadoop fs -put MaxTem bin/maxtem % hadoop fs -put weather.txt weather.txt Enfin, on exécute % hadoop pipes \ -D hadoop.pipes.java.recordreader=true \ -D hadoop.pipes.java.recordwriter=true \ -input weather.txt \ -output output \ -program bin/maxtem On retrouve le même résultat qu avec Java et Python. 13