Oozie script shell action
J'explore les capacités de Oozie pour la gestion de Hadoop flux de travail. Je suis en train de mettre en place une coquille d'action qui invoque quelques ruche de commandes. Mon script shell hive.sh ressemble:
#!/bin/bash
hive -f hivescript
Où le script hive (qui a été testé de façon indépendante) crée quelques tables et ainsi de suite. Ma question est là pour garder le hivescript et puis la façon de référence à partir du script shell.
J'ai essayé de deux façons, d'abord en utilisant un chemin d'accès local, comme hive -f /local/path/to/file
, et à l'aide d'un chemin d'accès relatif, comme ci-dessus, hive -f hivescript
, dans ce cas, je garde mon hivescript dans le oozie application répertoire du chemin d'accès (le même que hive.sh et workflow.xml) et l'a mis pour aller à la cache distribué via le workflow.xml.
Avec les deux méthodes, je reçois le message d'erreur:
"Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]"
sur le oozie de la console web. De plus, j'ai essayé d'utiliser hdfs chemins dans les scripts shell et cela ne fonctionne pas pour autant que je sais.
Mon travail.fichier de propriétés:
nameNode=hdfs://sandbox:8020
jobTracker=hdfs://sandbox:50300
queueName=default
oozie.libpath=${nameNode}/user/oozie/share/lib
oozie.use.system.libpath=true
oozieProjectRoot=${nameNode}/user/sandbox/poc1
appPath=${oozieProjectRoot}/testwf
oozie.wf.application.path=${appPath}
Et workflow.xml:
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>${appPath}/hive.sh</exec>
<file>${appPath}/hive.sh</file>
<file>${appPath}/hive_pill</file>
</shell>
<ok to="end"/>
<error to="end"/>
</action>
<end name="end"/>
Mon objectif est d'utiliser oozie pour appeler un script hive par le biais d'un script shell, veuillez donner vos suggestions.
Aussi, veuillez fournir des précisions sur
Additionally I've tried using hdfs paths in shell scripts and this does not work as far as I know
.
OriginalL'auteur thedragonwarrior | 2014-03-13
Vous devez vous connecter pour publier un commentaire.
Une chose qui a toujours été difficile sur Oozie flux de travail est l'exécution de scripts bash.
Hadoop est créé pour être massivement parallèle pour les actes d'architecture très différente de ce que vous ne le pensez.
Lorsqu'un oozie de flux de travail s'exécute un shell de l'action, il va recevoir des ressources à partir de votre tracker d'emploi ou de la LAINE sur les nœuds de votre cluster. Cela signifie que l'utilisation d'un local d'emplacement de votre fichier ne fonctionnera pas, depuis le local de stockage est exclusivement sur votre nœud de bord. Si le travail qui s'est passé afin de frayer sur votre nœud de bord, il pourrait fonctionner, mais tout autre cas où il échouerait, et cette distribution est aléatoire.
Pour contourner ce problème, j'ai trouvé qu'il est préférable d'avoir les fichiers dont j'ai besoin (y compris les scripts sh) dans hdfs dans une lib de l'espace ou au même endroit que mon flux de travail.
Ici est un bon moyen d'approcher ce que vous essayez d'atteindre.
Une chose que vous remarquerez est que l'exec est juste hive.sh puisque nous sommes en supposant que le fichier sera déplacé dans le répertoire de base où la coque est terminée, la
À assurez-vous que la dernière remarque est vraie, vous devez inclure le fichier hdfs chemin, ce sera la force oozie à distribuer ce fichier avec l'action. Dans votre cas, le script hive lanceur ne doit être codée en une fois, et tout simplement de la fed de fichiers différents. Depuis que nous avons un "un à plusieurs" de la relation, la hive.sh doit être conservé dans une lib et n'est pas distribuée à tous les flux de travail.
Enfin vous voyez la ligne:
Cette ligne fait deux choses. Avant le # nous avons l'emplacement du fichier. C'est juste le nom du fichier depuis que nous devrions distribuer nos distinctes des fichiers de ruche avec notre flux de travail
et le nœud qui exécute le sh aura cette répartis automatiquement. Enfin, la partie après le # est le nom de la variable de nous l'attribuer deux à l'intérieur de la sh script. Cela vous donne la possibilité de réutiliser le même script sur et sur et simplement le nourrir de fichiers différents.
HDFS répertoire de notes,
si le fichier est imbriquée dans le même répertoire que le flux de travail, alors vous avez seulement besoin de spécifier enfant chemins:
Donnerait:
Mais si le chemin est en dehors du répertoire de flux de travail, vous aurez besoin du chemin complet:
donnerait:
J'espère que cela aide tout le monde.
OriginalL'auteur Ryan Bedard
De
http://oozie.apache.org/docs/3.3.0/DG_ShellActionExtension.html#Shell_Action_Schema_Version_0.2
Si vous gardez votre script shell script hive à la fois dans un dossier de flux de travail, alors vous pouvez l'exécuter.
Voir la commande dans l'échantillon
vous pouvez écrire les commandes que vous voulez dans le fichier
Vous pouvez également utiliser la ruche action directement
http://oozie.apache.org/docs/3.3.0/DG_HiveActionExtension.html
OriginalL'auteur user2230605