2017-03-20 2 views
0

Actuellement, nous exécutons tous nos jobs Pig de manière séquentielle sur Amazon EMR, donc nous lançons un cluster et ensuite ajoutons tous nos jobs Pig en tant qu'étape au cluster 1 par 1. Alors que cela fonctionne, Je me demandais s'il y avait quelque chose qui pourrait vous permettre d'exécuter ces travaux en parallèle.Exécuter des scripts Pig dans Parallel sur Amazon AWS

Idéalement, je voudrais faire ce qui suit: Lancez un cluster (disons c3.xlarge), puis lancez 15 jobs pig. Ces tâches seraient ensuite exécutées en parallèle du mieux qu'elles le peuvent (par exemple: 3 en même temps) et quand 1 est terminé, un autre est exécuté.

Toute aide serait la bienvenue si quelque chose comme ceci existe et comment nous pourrions l'utiliser. J'ai lu quelque chose à propos de Oozie mais je ne suis pas sûr que cela conviendrait à nos besoins.

Répondre

1

Les étapes EMR ne peuvent pas être exécutées en parallèle. Cependant, comme vous l'avez mentionné, utilisez oozie pour orchestrer l'exécution de votre script cochon en utilisant des actions fork et join pour les exécuter en parallèle.

1

Généralement, il est possible de reconfigurer manuellement votre cluster EMR pour utiliser Fair scheduler et soumettre des tâches via shell. Ou probablement vous pourriez aller le qay avec Oozie. Mais généralement, ce n'est pas comme dans la boîte.

1

Oozie peut vous aider à exécuter les scripts pig en parallèle. Pour planifier l'exécution parallèle des scripts pig, vous pouvez utiliser les nœuds de contrôle Fork-Join. Par exemple Fork and Join Control Nodes. La seule chose est, il va commencer l'exécution de tous les scripts fourchus en parallèle, ne vous permet pas de contrôler un parallélisme fixe. Vous devez le gérer vous-même dans la définition d'application de flux de travail Oozie. Pour Pig action vérifier le document.

Les deux tâches de réduction de mappage s'exécuteront en parallèle. Vous pouvez utiliser une combinaison d'emplois ici Pig, Ruche, Carte-Reduce etc.

<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.1"> 
    ... 
    <fork name="forking"> 
     <path start="firstparalleljob"/> 
     <path start="secondparalleljob"/> 
    </fork> 
    <action name="firstparallejob"> 
     <map-reduce> 
      <job-tracker>foo:8021</job-tracker> 
      <name-node>bar:8020</name-node> 
      <job-xml>job1.xml</job-xml> 
     </map-reduce> 
     <ok to="joining"/> 
     <error to="kill"/> 
    </action> 
    <action name="secondparalleljob"> 
     <map-reduce> 
      <job-tracker>foo:8021</job-tracker> 
      <name-node>bar:8020</name-node> 
      <job-xml>job2.xml</job-xml> 
     </map-reduce> 
     <ok to="joining"/> 
     <error to="kill"/> 
    </action> 
    <join name="joining" to="nextaction"/> 
    ... 
</workflow-app> 
+0

Merci pour l'info, avait déjà un oeil à oozie mais je ne sais pas si mes besoins s'intègre. Parce que je ne pense pas qu'Oozie prenne en compte les ressources disponibles (par défaut) – darkownage

+0

Oozie ne tient pas compte de la disponibilité des ressources. Il soumet les travaux au cadre Yarn/MR et en dépend. Merci. – YoungHobbit