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));
}