OOzie Spark:代码101错误

时间:2016-08-03 14:51:11

标签: apache-spark oozie

我在理解Oozie给我的错误时遇到了一些问题。 说明:

我在Oozie中创建了一个非常简单的“工作”,XML就是:

<workflow-app name="Massimiliano" xmlns="uri:oozie:workflow:0.5">
    <start to="spark-2adf"/>
    <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <action name="spark-2adf">
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <master>local[*]</master>
            <mode>client</mode>
            <name>MySpark</name>
              <class>org.XXX.SimpleApp</class>
            <jar>${nameNode}/user/${wf:user()}//prova_spark/SimpleApp1.jar</jar>
        </spark>
        <ok to="End"/>
        <error to="Kill"/>
    </action>
    <end name="End"/>
</workflow-app>

job.properties如下:

nameNode=hdfs://10.203.17.90:8020
jobTracker=10.203.17.90:8021
master=local[*]
queueName=default
oozie.use.system.libpath=true
oozie.wf.application.path=${nameNode}/user/${user.name}/hdfs/user/oozie/share/lib/lib_20160628182408/spark

我尝试了越来越多的时间来改变所有参数,绝对没有结果。

困扰我的错误是:

Main class [org.apache.oozie.action.hadoop.SparkMain], exit code [101]

名称节点是主节点; 我不知道oozie.wf.application.path是否设置正确;

错误的更多细节:

                    hdfs://nameservice1/user/hdfs//prova_spark/SimpleApp1.jar

=================================================================

>>> Invoking Spark class now >>>

Intercepting System.exit(101)

<<< Invocation of Main class completed <<<

Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SparkMain], exit code [101]

Oozie Launcher failed, finishing Hadoop job gracefully

Oozie Launcher, uploading action data to HDFS sequence file: hdfs://nameservice1/user/hdfs/oozie-oozi/0000117-160804173605999-oozie-oozi-W/spark-2adf--spark/action-data.seq

Oozie Launcher ends

路径hdfs://nameservice1/user/hdfs//prova_spark/SimpleApp1.jar是正确的!但我不知道在哪里需要解决这个问题。

请帮帮我吗?

3 个答案:

答案 0 :(得分:1)

> Step 1. First capture spark and related jars used to execute. One way would be to execute with spark-submit at command line.
> Step 2. Create lib folder if not exists in the workflow path. 
> Step 3. Place all the jars collected in step 1 in the lib folders
> Step 4. Run the workflow.

I think this should fix it. However, I would curious to know if it still didn't work.

答案 1 :(得分:1)

我也遇到了类似的问题,结果就是jar路径 <jar>${nameNode}/user/${wf:user()}//prova_spark/SimpleApp1.jar</jar> shuold是你当地的道路。 您不需要将您的火花罐放入HDFS,只需使用您的Linux系统上的那个。 解决方案解决了我的问题,所以我在这里发布。

答案 2 :(得分:0)

我已经以这种方式解决了:对于我真的不了解Oozie的火花工作的问题并不是很有效。 我说'#34;效果不好&#34;因为syslog和stderr中发生的所有错误都非常普遍(错误的描述非常难以理解),因此很难解决每个问题,并且每次必须走在阴影中解决问题。

所以,我改变了方法,并使用了shell job,我把这段代码放在了:

d=`date +"%Y-%m-%d_%T" | sed 's/:/-/g'`
echo "START_TIMESTAMP=$d"

export HADOOP_USER_NAME=hdfs

spark-submit --master yarn --deploy-mode cluster --class org.XXX.TryApp TryApp.jar "/user/hue/oozie/workspaces/hue-oozie-1471949509.25"

在实践中,我已经编写了#34;中间解决方案&#34;,所以我理解了一点点Hadoop与Spark。

我在群集模式下用纱线激发了火花作业,然后将文件的路径传递给我的jar。在我的scala代码中,这是主要行:

import ...
import org.apache.hadoop.fs.{ FileSystem, Path }

object TryApp {

  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("TryApp")
    val sc = new SparkContext()
    val sqlContext = new HiveContext(sc)

    val fs = FileSystem.get(sc.hadoopConfiguration).getUri //hdfs://nameservice1

}

现在,鉴于路径为//hdfs://nameservice1,知道路径的其余部分非常简单,我通过变量args(0)传递了其他部分。

Hue界面中,您必须指定3件事:

enter image description here

  1. 文件名sh,没有参数,因为我在文件action.sh
  2. 中指定了这个名称
  3. 您必须指定附件:第一个是action.sh,第二个是我们必须通过Oozie启动的文件jar。
  4. 这对我有用,我认为这是更好的解决方案,因为即使你有一些问题,错误的输出也很清楚,你可以纠正你的代码或你的工作。

    我希望对某人有所帮助!