5 votes

Chaîner Hadoop MapReduce avec des pipes (C++)

Quelqu'un sait-il comment enchaîner deux MapReduce avec l'API Pipes ? J'ai déjà enchaîné deux MapReduce dans un projet précédent avec JAVA, mais aujourd'hui j'ai besoin d'utiliser C++. Malheureusement, je n'ai pas vu d'exemples en C++.

Quelqu'un l'a-t-il déjà fait ? Est-ce impossible ?

1voto

Utilisez Oozie Flux de travail. Il vous permet de utiliser des tuyaux en même temps que les travaux MapReduce habituels.

0voto

Ericswed Points 115

J'ai finalement réussi à faire fonctionner Hadoop Pipes. Voici quelques étapes pour faire fonctionner les exemples de wordcount disponibles dans src/examples/pipes/impl/.

J'ai un cluster Hadoop 1.0.4 fonctionnel, configuré en suivant les étapes décrites dans la documentation.

Pour écrire un travail Pipes, j'ai dû inclure la bibliothèque pipes qui est déjà compilée dans le paquet initial. Elle se trouve dans le dossier C++ pour les architectures 32 et 64 bits. Cependant, j'ai dû la recompiler, ce qui peut être fait en suivant ces étapes :

# cd /src/c++/utils
# ./configure
# make install

# cd /src/c++/pipes
# ./configure
# make install

Ces deux commandes vont compiler la bibliothèque pour notre architecture et créer un répertoire 'install' dans /src/c++ contenant les fichiers compilés.

De plus, j'ai dû ajouter −lssl y −lcrypto drapeaux de liens pour compiler mon programme. Sans eux, j'ai rencontré des exceptions d'authentification au moment de l'exécution. Grâce à ces étapes, j'ai pu exécuter wordcount-simple qui se trouve dans le répertoire src/examples/pipes/impl/.

Cependant, pour exécuter l'exemple plus complexe wordcount-nopipe, j'ai dû faire d'autres points. En raison de l'implémentation du lecteur d'enregistrement et du rédacteur d'enregistrement, nous lisons ou écrivons directement à partir du système de fichiers local. C'est pourquoi nous devons spécifier notre chemin d'entrée et de sortie avec file://. De plus, nous devons utiliser un composant InputFormat dédié. Ainsi, pour lancer ce travail, j'ai dû utiliser la commande suivante :

# bin/hadoop pipes −D hadoop.pipes.java.recordreader=false −D hadoop.pipes.java.recordwriter=false −libjars hadoop−1.0.4/build/hadoop−test−1.0.4.jar −inputformat org.apache.hadoop.mapred.pipes.WordCountInputFormat −input file:///input/file −output file:///tmp/output −program wordcount−nopipe

De plus, si nous regardons org.apache.hadoop.mapred.pipes.Submitter.java de la version 1.0.4, l'implémentation actuelle désactive la possibilité de spécifier un lecteur d'enregistrement non java si vous utilisez l'option InputFormat. Ainsi, vous devez commenter la ligne setIsJavaRecordReader(job,true); pour le rendre possible et recompiler les sources de base pour prendre en compte ce changement ( http://web.archiveorange.com/archive/v/RNVYmvP08OiqufSh0cjR ).

if(results.hasOption("−inputformat")) { 
    setIsJavaRecordReader(job, true);
    job.setInputFormat(getClass(results, "−inputformat", job,InputFormat.class));
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X