Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop Oozie Pypspark工作_Hadoop_Apache Spark_Pyspark_Oozie - Fatal编程技术网

Hadoop Oozie Pypspark工作

Hadoop Oozie Pypspark工作,hadoop,apache-spark,pyspark,oozie,Hadoop,Apache Spark,Pyspark,Oozie,我有非常简单的工作流程 <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-tra

我有非常简单的工作流程

<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>
我认为这是权限问题,所以我将hdfs文件夹-chmod 777和我的本地文件夹也设置为chmod 777 我使用的是spark 1.6。当我通过spark submit运行脚本时,一切都很好(甚至是读/写hdfs或hive的更复杂的脚本)

编辑:我试过了


不幸的是,Oozie Spark action只支持Java工件,因此您必须指定主类(该错误消息很难解释)。所以你有两个选择:

  • 将代码重写为Java/Scala
  • 使用自定义动作或脚本,如 (我没有测试它)

  • 可以使用
    spark action
    来运行python脚本,但必须将spark的
    python API
    路径作为参数传递。此外,文件的第一行必须是:

    #!/usr/bin/env python.
    
    • 1:尝试使用getOpt
    在你的财产里

    fuente=BURO_CONCENTRADO
    
    代码.py

    try:
        parametros, args = getopt.getopt(sys.argv[1:], "f:i:", ["fuente=", "id="])
        if len(parametros) < 2:
            print("Argumentos incompletos")
            sys.exit(1)
    except getopt.GetoptError:
        print("Error en los argumentos")
        sys.exit(2)
    
    for opt, arg in parametros:
        if opt in ("-f", "--fuente"):
            nom_fuente = str(arg).strip()
        elif opt in ("-i", "--id"):
            id_proceso = str(arg).strip()
        else:
            print("Parametro '" + opt + "' no reconocido")
    
    试试看:
    参数,args=getopt.getopt(sys.argv[1:],“f:i:”,[“fuente=”,“id=”)
    如果len(参数)<2:
    打印(“不完整的论证”)
    系统出口(1)
    除getopt.GetoptError外:
    打印(“论证错误”)
    系统出口(2)
    对于opt,参数中的arg:
    如果选择加入(“-f”,即“--fuente”):
    nom_fuente=str(arg).strip()
    elif选择加入(“-i”,“-id”):
    id_proceso=str(arg).strip()
    其他:
    打印(“参数”“选择+”‘不重新确认”)
    
    在您的工作流程中

                    <jar>${nameNode}/${workflowRoot}/${appDir}/lib/GeneradorDeInsumos.py</jar>
                    <spark-opts>
                        --queue ${queueName}
                        --num-executors 40
                        --executor-cores 2
                        --executor-memory 8g
    
    
                    </spark-opts>
                    <arg>-f ${fuente}</arg>
                    <arg>-i ${wf:id()}</arg>
    
    ${nameNode}/${workflowRoot}/${appDir}/lib/GeneradorDeInsumos.py
    --队列${queueName}
    --num执行者40
    --执行器核心2
    --执行器存储器8g
    -f${fuente}
    -i${wf:id()}
    
    并输出“vuala”

    Fuente:BURO_CONCENTRADO
    Contexto:<pyspark.context.SparkContext object at 0x7efd80424090>
    id_workflow:0062795-190808055847737-oozie-oozi-W
    
    Fuente:BURO_CONCENTRADO
    上下文:
    id_工作流:0062795-190808055847737-oozie-oozi-W
    
    以python scrip作为参数运行shell脚本是我最初的想法,但这是行不通的。我希望,现在是:)谢谢你证实我的想法。无论如何,这很奇怪,因为在我发现的文档中:jar元素表示一个以逗号分隔的jar或python文件列表。
    try:
        parametros, args = getopt.getopt(sys.argv[1:], "f:i:", ["fuente=", "id="])
        if len(parametros) < 2:
            print("Argumentos incompletos")
            sys.exit(1)
    except getopt.GetoptError:
        print("Error en los argumentos")
        sys.exit(2)
    
    for opt, arg in parametros:
        if opt in ("-f", "--fuente"):
            nom_fuente = str(arg).strip()
        elif opt in ("-i", "--id"):
            id_proceso = str(arg).strip()
        else:
            print("Parametro '" + opt + "' no reconocido")
    
                    <jar>${nameNode}/${workflowRoot}/${appDir}/lib/GeneradorDeInsumos.py</jar>
                    <spark-opts>
                        --queue ${queueName}
                        --num-executors 40
                        --executor-cores 2
                        --executor-memory 8g
    
    
                    </spark-opts>
                    <arg>-f ${fuente}</arg>
                    <arg>-i ${wf:id()}</arg>
    
    Fuente:BURO_CONCENTRADO
    Contexto:<pyspark.context.SparkContext object at 0x7efd80424090>
    id_workflow:0062795-190808055847737-oozie-oozi-W