2015-07-23 1 views
1

Je ne suis pas sûr d'utiliser le bon outil pour ce que je veux.est-il possible de lancer quelques workflows oozie avec un seul coordinateur?

J'ai beaucoup de flux de travail qui peuvent être dépendants ou non.

Exemple:

  1. /Workflow1
    • /workflow.xml
    • /job.properties
  2. /workflow2
    • /workflow.xml
    • /job.properties
  3. ....

Je pensais que nous pouvons avoir une corrdinator qui peut lancer (avec certaines conditions de données) tout le flux de travail. Mais je commence à penser que ce n'est pas la bonne pratique.

Devrions-nous avoir un coordinateur par workflow avec toutes les conditions d'exécutions + un bundle qui lance tout le coodinator? comme ça:

  1. /WF1
    • /workflow.xml
    • /job.properties
    • /coordinator.xml
  2. /WF2
    • /flux de travail. xml
    • /j ob.properties
    • /coordinator.xml
  3. /bundle.xml

OU un coordonnateur peut lancer tout le flux de travail (ils peuvent être dépendants ou non)?

  1. /WF1
    • /workflow.xml
    • /job.properties
  2. /WF2
    • /workflow.xml
    • /job.properties
  3. /coordinateur.xml

Répondre

2

Cela dépend. Si wf1 et wf2 sont logiquement liés, ont la même fréquence et ont des dépendances de jeu de données communes, vous pouvez les mettre par un coordinateur (et les exécuter simultanément ou les unes après les autres). Mais s'ils ne le sont pas, il vaut mieux les mettre dans des coordinateurs séparés.

Vous pouvez lancer plusieurs flux de travail d'une aide de la fonction sub-workflow:

<workflow-app name="root-workflow" xmlns="uri:oozie:workflow:0.4"> 
    <start to="run-wf1"/> 
    <action name="run-wf1"> 
     <sub-workflow> 
      <app-path>${appPath}/wf1.xml</app-path> 
      <propagate-configuration/> 
     </sub-workflow> 
     <ok to="run-wf2"/> 
     <error to="kill"/> 
    </action> 
    <action name="run-wf2"> 
     <sub-workflow> 
      <app-path>${appPath}/wf2.xml</app-path> 
      <propagate-configuration/> 
     </sub-workflow> 
     <ok to="end"/> 
     <error to="kill"/> 
    </action> 
    <kill name="kill"> 
     <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> 
    </kill> 
    <end name="end"/> 
</workflow-app> 

Si vous souhaitez les exécuter simultanément que l'utilisation de bifurquer.

+0

J'ai environ 30 workflows, je n'aime pas le sous-workflow parce qu'il est difficile de voir rapidement si tout est ok dans tout le sous-workflow. De plus, certains d'entre eux dépendent d'une même entrée mais parfois pas ou d'autres workflows ... L'ordonnancement sera difficile. C'est la raison pour laquelle je dois savoir quelle est la meilleure façon de le faire. – Angelik

+0

Si vous avez 30 workflows, vous devez absolument les mettre dans différents coordinateurs. Je développe moi-même le système, qui compte environ 50 coordinateurs, dont seulement 2 fonctionnent avec plus d'un worfklow. –

+0

OK, merci. Alors utilisez-vous un bundle? Et comment gérez-vous les fichiers de propriétés? Maintenant j'en ai un par workflow mais quand j'essaie d'utiliser un bundle, les job.properties du wf ne sont pas lues. – Angelik