2017-07-25 3 views
0

Ich habe wirklich einfachen Workflow.Oozie pyspark Job

<workflow-app name="testSparkjob" xmlns="uri:oozie:workflow:0.5"> 
<start to="testJob"/> 

    <action name="testJob"> 
    <spark xmlns="uri:oozie:spark-action:0.1"> 
     <job-tracker>${jobTracker}</job-tracker> 
     <name-node>${nameNode}</name-node> 
     <configuration> 
      <property> 
       <name>mapred.compress.map.output</name> 
       <value>true</value> 
      </property> 
     </configuration> 
     <master>local[*]</master> 
     <name>Spark Example</name> 
     <jar>mapping.py</jar> 
     <spark-opts>--executor-memory 1G --num-executors 3 
--executor-cores  1 </spark-opts> 
     <arg>argument1</arg> 
     <arg>argument2</arg> 
    </spark> 
    <ok to="end"/> 
    <error to="killAction"/> 
</action> 
<kill name="killAction"> 
    <message>"Killed job due to error"</message> 
</kill> 
<end name="end"/> 
</workflow-app> 

Spark-Skript tut so ziemlich nichts:

if len(sys.argv) < 2: 
    print('You must pass 2 parameters ') 
    #just for testing, later will be discarded, sys.exit(1) will be used.") 
    ext = 'testArgA' 
    int = 'testArgB' 
    #sys.exit(1) 
else: 
    print('arguments accepted') 
    ext = sys.argv[1] 
    int = sys.argv[2] 

Das Skript auf hdfs im selben Ordner wie workflow.xml befindet.

Wenn ich runt den Workflow-I-Fehler folgende bekam

Launcher ERROR, reason: Main class 
[org.apache.oozie.action.hadoop.SparkMain], exit code [2] 

ich tought es Erlaubnis Problem, so dass ich die hdfs Ordner -chmod 777 und meine lokalen Ordner auch 777 chmod ich verwende Funke 1.6 . Wenn ich das Skript durch spark-submit führe, ist alles in Ordnung (sogar viel kompliziertere Skripte, die hdfs lesen oder schreiben).

EDIT: Ich habe versucht, this

<action name="forceLoadFromLocal2hdfs"> 
<shell xmlns="uri:oozie:shell-action:0.3"> 
    <job-tracker>${jobTracker}</job-tracker> 
    <name-node>${nameNode}</name-node> 
    <configuration> 
    <property> 
     <name>mapred.job.queue.name</name> 
     <value>${queueName}</value> 
    </property> 
    </configuration> 
    <exec>driver-script.sh</exec> 
<!-- single --> 
    <argument>s</argument> 
<!-- py script --> 
    <argument>load_local_2_hdfs.py</argument> 
<!-- local file to be moved--> 
    <argument>localFilePath</argument> 
<!-- hdfs destination folder, be aware of, script is deleting existing folder! --> 
    <argument>hdfsPath</argument> 
    <file>${workflowRoot}driver-script.sh</file> 
    <file>${workflowRoot}load_local_2_hdfs.py</file> 
</shell> 
<ok to="end"/> 
<error to="killAction"/> 

Die workkflow erfolgreich war, aber die Datei auf die hdfs nicht kopiert wird. Keine Fehler. Das Skript funktioniert von selbst. Mehr here.

Antwort

0

Leider Oozie Spark Aktion unterstützt nur Java-Artefakte, so müssen Sie die Hauptklasse angeben (diese Fehlermeldung versucht kaum zu erklären). So haben Sie zwei Möglichkeiten:

  1. Code neu schreiben zu Java/Scala
  2. Verwendung benutzerdefinierte Aktion oder Skript wie this (ich habe es nicht getestet)
+0

Ausführen des Shell-Skript mit Python Scrip als Argument war meine ursprüngliche Idee, aber es war nicht zu gehen. Ich hoffe, es wird jetzt :) Vielen Dank für die Bestätigung meiner Gedanken. –

+0

Wie auch immer, es ist seltsam, weil ich in Documentation gefunden habe: Das jar-Element zeigt eine durch Kommas getrennte Liste von Gläsern oder Python-Dateien. –

Verwandte Themen