2017-05-17 1 views
0

Ich habe einen Oozie-Workflow für Shell-Aktion erstellt. Unten ist die einfache Oozie Shell Aktion. Ich habe das Shell-Skript in den Workflow-Lib-Ordner gestellt. Dieses Shell-Skript wird im folgenden Dinge zu tun:Kann Shell-Skript mit Oozie Shell-Aktion nicht ausführen

1) Abrufen von verschlüsselten json von s3 Eimer und in lokalen Ordner

2) Decrypting json setzen und es in einer hdfs Lage setzen.

3) Für aws Verbindung und Entschlüsselung Json, seine Verwendung einiger Schlüssel, d. H. pem und Pub-Schlüssel.

4) Ich habe diese Schlüssel in Lib-Ordner zusammen mit dem Shell-Skript.

<workflow-app xmlns="uri:oozie:workflow:0.5" name="LaborIngestion"> 
<start to='LaborIngestion'/> 
    <action name='LaborIngestion'> 
     <shell xmlns="uri:oozie:shell-action:0.1"> 
       <job-tracker>${jobTracker}</job-tracker> 
       <name-node>${nameNode}</name-node> 
       <exec>pullDataS3.sh</exec> 
     </shell> 

     <ok to="end"/> 
     <error to="fail"/> 
    </action> 

    <kill name="fail"> 
     <message>LaborHrExtract workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}] 
     </message> 
    </kill> 
    <end name="end"/> 
</workflow-app> 

Das Problem, das ich bin vor, dass dieser Workflow innerhalb 7-8 Sekunden mit Erfolgsstatus endet aber seine beliebige Datei abgerufen werden. Normalerweise dauert es ungefähr 2-3 Minuten, wenn ich dieses Skript über die Eingabeaufforderung ausführe. Ich bin mir nicht sicher, ob ich Entschlüsselungsschlüssel und Verbindungsschlüssel richtig setze. Bitte schlagen Sie mir vor, wenn dies der richtige Weg ist, Schlüssel in oozie zu setzen.

Darüber hinaus lief ich ein einfaches Skript mit unter Hadoop-Befehl mit dem gleichen Workflow und es hat gut funktioniert.

hadoop fs -mkdir/com/kapil/kumar

+0

Haben Sie die YARN-Protokolle für Fehlermeldungen überprüft? Und Sie sagen, dass der Workflow endet _ "mit Erfolgsstatus" _, aber was passieren würde, falls einer der Befehle fehlgeschlagen wäre - würde Ihr Skript den Fehler auffangen und 'exit' mit einem Code ungleich Null beenden, so dass Oozie erkennen könnte der Fehlschlag? –

Antwort

0

In Ihrem Workflow nach

<job-tracker>${jobTracker}</job-tracker> 
<name-node>${nameNode}</name-node> 
<exec>pullDataS3.sh</exec> 

Yow den HDFS Pfad der Speicherort des Shell-Skript zur Verfügung stellen müssen.

Dann sollte es funktionieren. Etwas wie unten

<file>/user/xxxxx/oozie/import/lib/pullDataS3.sh#pullDataS3.sh</file> 
+0

Hallo New_learner, Problem wurde gelöst. Das Problem war, dass dieses Shellskript den Schlüssel für die Verbindung zum aws-Cluster verwendete. Wenn ich dieses Skript über oozie ausführte, fand es den Schlüssel in einer verteilten Umgebung nicht, weil es Probleme mit der Datenlokalität gab. Also verwendete ich die SSH-oozie-Aktion, um eine Verbindung zu meinem Host herzustellen und das Skript selbst auszuführen. Trotzdem danke :) – Kapil

Verwandte Themen