Lancement d'un travail de mapreduce à partir d'eclipse.

J'ai écrit un programme mapreduce en Java, ce qui je peux envoyer à distance à un cluster en cours d'exécution en mode distribué. Actuellement, je présenter la tâche à l'aide des étapes suivantes:

  1. exporter la mapreuce travail comme un pot (par exemple myMRjob.jar)
  2. soumettre le travail à distance cluster à l'aide de la commande shell suivante: hadoop jar myMRjob.jar

Je voudrais vous présenter le travail directement à partir de l'Éclipse lorsque j'essaie d'exécuter le programme. Comment puis-je faire cela?

Je suis actuellement en utilisant CDH3, et une version abrégée de ma conf est:

conf.set("hbase.zookeeper.quorum", getZookeeperServers());
conf.set("fs.default.name","hdfs://namenode/");
conf.set("mapred.job.tracker", "jobtracker:jtPort");
Job job = new Job(conf, "COUNT ROWS");
job.setJarByClass(CountRows.class);

//Set up Mapper
TableMapReduceUtil.initTableMapperJob(inputTable, scan, 
    CountRows.MyMapper.class, ImmutableBytesWritable.class,  
    ImmutableBytesWritable.class, job);  

//Set up Reducer
job.setReducerClass(CountRows.MyReducer.class);
job.setNumReduceTasks(16);

//Setup Overall Output
job.setOutputFormatClass(MultiTableOutputFormat.class);

job.submit();

Lorsque je l'exécute directement à partir d'Eclipse, le travail est lancé, mais Hadoop ne peut pas trouver les mappeurs/réducteurs. J'obtiens les erreurs suivantes:

12/06/27 23:23:29 INFO mapred.JobClient:  map 0% reduce 0%  
12/06/27 23:23:37 INFO mapred.JobClient: Task Id :   attempt_201206152147_0645_m_000000_0, Status : FAILED  
java.lang.RuntimeException: java.lang.ClassNotFoundException:   com.mypkg.mapreduce.CountRows$MyMapper  
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:996)  
    at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:212)  
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:602)  
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323)   
    at org.apache.hadoop.mapred.Child$4.run(Child.java:270)  
    at java.security.AccessController.doPrivileged(Native Method)  
    at javax.security.auth.Subject.doAs(Subject.java:396)  
    at   org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)  
    at org.apache.hadoop.mapred.Child.main(Child.java:264)  
...

Personne ne sait comment les obtenir au-delà de ces erreurs? Si je peux résoudre ce problème, je peux intégrer plus M. emplois dans mes scripts qui serait génial!

Tucker - j'ai été en mesure d'exécuter le travail Hadoop en mode stand alone, mais pas les autres modes de Eclipse. J'ai posté la question dans la Hadoop forums il y a quelque temps et il n'y a pas de +ve réponse. BTW, Hadoop s'exécute dans le mode stand-alone sans les fichiers de configuration (paramètres par défaut).
Lorsque vous soumettez le travail au sein d'Eclipse, sont le mappeur / réducteur de classes dans le même projet, ou est le pot contenant sur le chemin de classe et les classes elles-mêmes nulle part ailleurs sur le cp?
La classe contenant tout ce qui est appelé CountRows. Cette classe contient une 'main' méthode qui définit le travail de configurations. le CountRows classe contient également de la classe pour le mappeur et réducteur appelé MyMapper et MyReducer respectivement. Le travail fonctionne bien comme je l'ai dit lorsque je lance le travail à partir de la comandline par écrit "hadoop jar CountRows.jar'
Ce n'est pas ma question, lorsque vous soumettez le travail dans Eclipse est l'CountRows.jar sur le chemin de classe, ou êtes-vous de soumettre le travail à partir de l'intérieur de la CountRows projet (d'où les fichiers de classe ne sont pas regroupés dans un bocal)
Je suis de soumettre le travail à partir de l'intérieur le nombre de Lignes du projet.

OriginalL'auteur Tucker | 2012-06-27