我在理解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
是正确的!但我不知道在哪里需要解决这个问题。
请帮帮我吗?
答案 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件事:
action.sh
action.sh
,第二个是我们必须通过Oozie启动的文件jar。这对我有用,我认为这是更好的解决方案,因为即使你有一些问题,错误的输出也很清楚,你可以纠正你的代码或你的工作。
我希望对某人有所帮助!