J'ai besoin de la chaîne de deux emplois Mapreduce. J'ai utilisé Jobcontrol pour définir Job2 aussi dépendant de Job1.
Cela fonctionne, les fichiers de sortie sont créés !! Mais ça ne s'arrête pas!
Dans la coquille, il reste dans cet état: Comment puis-je l'arrêter?
Ceci est ma principale. P> }
} p> p>
4 Réponses :
J'ai essentiellement fait ce que Pietro faisait allusion au-dessus. et dans ma carte de map / réduise, j'ai: P> public void handleRun(JobControl control) throws InterruptedException {
JobRunner runner = new JobRunner(control);
Thread t = new Thread(runner);
t.start();
while (!control.allFinished()) {
System.out.println("Still running...");
Thread.sleep(5000);
}
}
L'objet Jobcontrol lui-même est exécutable, vous pouvez donc simplement l'utiliser comme ceci:
new Thread(myJobControlInstance).start()
Juste un tweak à l'extrait de code Qu'est-ce que SINEMETU1 avait partagé ..
Vous pouvez supprimer l'appel au JobRunner comme JobControl en soi-même implémente Runnable P>
Thread thread = new Thread(jobControl); thread.start(); while (!jobControl.allFinished()) { System.out.println("Still running..."); Thread.sleep(5000); }
Essayez ceci:
Thread jcThread = new Thread(jobControl); jcThread.start(); System.out.println("循ç¯å¤æjobControlè¿è¡ç¶æ >>>>>>>>>>>>>>>>"); while (true) { if (jobControl.allFinished()) { System.out.println("====>> jobControl.allFinished=" + jobControl.getSuccessfulJobList()); jobControl.stop(); // 妿ä¸å break æè returnï¼ç¨åºä¼ä¸ç´å¾ªç¯ break; } if (jobControl.getFailedJobList().size() > 0) { succ = 0; System.out.println("====>> jobControl.getFailedJobList=" + jobControl.getFailedJobList()); jobControl.stop(); // 妿ä¸å break æè returnï¼ç¨åºä¼ä¸ç´å¾ªç¯ break; } }
J'ai résolu l'utilisation d'un fil pour démarrer JobControl. J'ai vérifié que les travaux ont été effectués en utilisant un cycle tandis que: tandis que (! Jobctrl.Allfinished ()) et un système.exit () sur le cycle. Maintenant, je voudrais que les travaux renvoient des messages d'information, tout ce que j'ai obtenu est de savoir quel travail est en cours d'exécution, avec ControldedJob.tostring (). Je ne sais pas comment obtenir des messages d'information comme: numéro de tâche de mapper, numéro de tâche de réduction, enregistrements en entrée ou en sortie, etc. ... une idée de ces messages?
Est "job.getcounters (). Tostring ()" Assez?
Est-ce un bogue dans la classe JobControl?
Ceci est en fait vraiment utile pour voir un exemple de travail de la chaîne de la chaîne de MR. Impossible de trouver une explication claire à ce sujet!
@Pietroluciani aussi, pour le moins expérimenté, voir le code que vous avez utilisé pour arrêter votre travail serait vraiment utile.
Bonjour, j'ai écrit du code il y a deux ans, ce soir ou demain je vais essayer de rechercher du code.
Bonjour, @Austin A, je modifie mon message avec le code demandé par vous.
Merci @pietroluciani, je n'ai pas fait beaucoup de choses avec un filetage, c'est vraiment utile pour moi!