web-dev-qa-db-fra.com

Exécuter un script shell avec Oozie

J'essaie de lancer un script sh par Oozie, mais je suis confronté à un problème:

Impossible d'exécuter le programme "script.sh" (dans le répertoire "/Mapred/local/taskTracker/Dell/jobcache/job_201312061003_0001/attempt_201312061003_0001_m_000000_0/work"):(.____./11.IO.ception: error = 2 , Aucun fichier ou répertoire de ce nom.

S'il vous plaît aidez-moi avec les étapes nécessaires.

10
user3072994

Cette erreur est vraiment ambiguë. Voici quelques problèmes qui m'ont aidé à résoudre ce problème.

-Si vous exécutez des flux de travail oozie sur un cluster kérberisé, assurez-vous de vous authentifier en transmettant votre clé Kerberos en tant qu'argument:

...
<Shell>
  <exec>scriptPath.sh</exec>
  <file>scriptPath.sh</file>
  <file>yourKeytabFilePath</file>
</Shell>
...

-Dans votre fichier Shell (scriptPath.sh), assurez-vous de supprimer la première ligne de référence Shell.

#!usr/bin/bash

en effet, si cette référence Shell n'est pas déployée sur tous les nœuds de données, cela peut entraîner ce code d'erreur. 

6
theudbald

J'ai eu le même problème à cause de quelque chose de vraiment stupide. J'ai ajouté un bloc shell dans le flux de travail, puis j'ai sélectionné le sendMail.sh correspondant, mais j'ai oublié d'ajouter le fichier sendMail.sh dansFICHIER+. 

 enter image description here

2
Ignacio Alorre

Essayez de donner un chemin complet pour HDFS comme

<exec>/user/nathalok/run.sh</exec>  
<file>/user/nathalok/run.sh#run.sh</file> 

et assurez-vous que dans job.properties, le chemin est correctement mentionné pour la bibliothèque et workflow.xml

oozie.libpath=hdfs://server/user/oozie/share/lib/lib_20150312161328/oozie
oozie.wf.application.path=hdfs://bcarddev/user/budaledi/Teradata_Flow
1
user3754136

workflow.xml:

...
<Shell>
  <exec>script.sh</exec>

  <file>scripts/script.sh</file>
</Shell>
...

Assurez-vous d’avoir scripts/script.sh dans le même dossier que hdfs.

1
Oleksii

Une action Oozie Shell est exécutée sur un noeud Hadoop aléatoire, c’est-à-dire pas localement sur la machine sur laquelle le serveur Oozie est en cours d’exécution. Comme le dit Oleksii, vous devez vous assurer que votre script se trouve sur le noeud qui exécute le travail. 

Voir les exemples complets suivants d'exécution d'une action Shell et d'une action ssh:

https://github.com/airawat/OozieSamples/tree/master/oozieProject/workflowShellActionhttps://github.com/airawat/OozieSamples/tree/master/oozieProject/workflowSshAction

1
Jakub Kotowski

si votre fichier Shell existe dans votre répertoire corrélé de projet. alors c’est votre format de fichier Shell qui cause cette erreur. vous devez convertir le format de dos en linux en utilisant dos2linux: dos2linux xxxx.sh

1
SHI YU

En plus de ce que d'autres ont dit, cela peut également être causé par un script Shell comportant des fins de ligne incorrectes (par exemple, CRLF pour Windows). Au moins cela m'est arrivé :)

0
LiMuBei

Assurez-vous également que les scripts Shell sont compatibles avec UNIX. Si ces scripts Shell ont été écrits dans un environnement Windows, il ajoute une fin de ligne spécifique à Windows et ces scripts ne sont pas reconnus par oozie. Ainsi, vous obtiendrez "aucun fichier ou répertoire de ce type" dans les actions de Shell.

0
Norman D