运行 Spark Job 通过 Uber Jar 与 Oozie 和 Hue
Run Spark Job via Uber Jar with Oozie and Hue
我目前正在学习如何使用 Apache Oozie 运行 CDH 5.8 中的 Spark 作业,但似乎发现了问题。
我正在使用 IntelliJ > Build Artifact (into Uber JAR / Fat JAR) 编译我的 spark 作业,然后删除它的清单文件。然后我 运行 spark-submit 到 运行 JAR。效果很好。
但是当我用 Oozie 指定一个 Spark Action 时。我收到以下错误:
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SparkMain], exception invoking main(), java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found
java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2199)
at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:234)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2105)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2197)
... 9 more
job.properties:
oozie.use.system.libpath=false
security_enabled=False
dryrun=False
jobTracker=master.meshiang:8032
nameNode=hdfs://master.meshiang:8020
我的工作流程:
<workflow-app name="CSV" xmlns="uri:oozie:workflow:0.4">
<start to="spark-2bab"/>
<kill name="Kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="spark-2bab">
<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>ETL.CSVTransform</class>
<jar>/user/meshiang/jar/Spark-GetData.jar</jar>
<arg>work_id</arg>
<arg>csv_table</arg>
<arg>id/FirstName/Lastname</arg>
<arg>/user/meshiang/csv/ST1471448595.csv</arg>
<arg>,</arg>
</spark>
<ok to="End"/>
<error to="Kill"/>
</action>
<end name="End"/>
</workflow-app>
我已经做了:
- 当我把同样的jar放到工作区的/lib文件夹下,使用方法同上。作业 运行 10 分钟后自行终止,并且没有显示任何错误代码或消息。
- 我 运行 Hue 中的 Spark Example 作业。我收到以下消息
错误:
JA018
Error Message Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0, localhost): java.lang.RuntimeException: Stream '/jars/oozie-examples.jar' was not found. at org.apache.spark.network.client.TransportResponseHandler.handle(TransportResponseHandler.java:219) at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:106) at org.apache.spark.network.server.TransportChannelHandler.channelRead0(Tr
我的问题 :
- 我应该只编译我需要的 类 并使用 Oozie ShareLibs 吗? Oozie 一般支持 Uber JARS 吗?
- 如果我正在使用 Pig/Sqoop,我需要做同样的事情吗?
要解决 ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain
您需要启用 oozie 系统库 属性。
oozie.use.system.libpath=true.
这是 运行 任何 Hive、Pig、Sqoop、Spark 等作业所必需的。
您可以编译构建 spark 应用程序 jar,并将它们放入 oozie 应用程序路径下的 lib
目录中。 Oozie 应用程序路径是您在 HDFS 中存储和引用 workflow.xml
文件的目录。
希望这会有所帮助。谢谢
我目前正在学习如何使用 Apache Oozie 运行 CDH 5.8 中的 Spark 作业,但似乎发现了问题。
我正在使用 IntelliJ > Build Artifact (into Uber JAR / Fat JAR) 编译我的 spark 作业,然后删除它的清单文件。然后我 运行 spark-submit 到 运行 JAR。效果很好。
但是当我用 Oozie 指定一个 Spark Action 时。我收到以下错误:
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SparkMain], exception invoking main(), java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found
java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2199)
at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:234)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2105)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2197)
... 9 more
job.properties:
oozie.use.system.libpath=false
security_enabled=False
dryrun=False
jobTracker=master.meshiang:8032
nameNode=hdfs://master.meshiang:8020
我的工作流程:
<workflow-app name="CSV" xmlns="uri:oozie:workflow:0.4">
<start to="spark-2bab"/>
<kill name="Kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="spark-2bab">
<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>ETL.CSVTransform</class>
<jar>/user/meshiang/jar/Spark-GetData.jar</jar>
<arg>work_id</arg>
<arg>csv_table</arg>
<arg>id/FirstName/Lastname</arg>
<arg>/user/meshiang/csv/ST1471448595.csv</arg>
<arg>,</arg>
</spark>
<ok to="End"/>
<error to="Kill"/>
</action>
<end name="End"/>
</workflow-app>
我已经做了:
- 当我把同样的jar放到工作区的/lib文件夹下,使用方法同上。作业 运行 10 分钟后自行终止,并且没有显示任何错误代码或消息。
- 我 运行 Hue 中的 Spark Example 作业。我收到以下消息
错误:
JA018
Error Message Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0, localhost): java.lang.RuntimeException: Stream '/jars/oozie-examples.jar' was not found. at org.apache.spark.network.client.TransportResponseHandler.handle(TransportResponseHandler.java:219) at org.apache.spark.network.server.TransportChannelHandler.channelRead0(TransportChannelHandler.java:106) at org.apache.spark.network.server.TransportChannelHandler.channelRead0(Tr
我的问题 :
- 我应该只编译我需要的 类 并使用 Oozie ShareLibs 吗? Oozie 一般支持 Uber JARS 吗?
- 如果我正在使用 Pig/Sqoop,我需要做同样的事情吗?
要解决 ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain
您需要启用 oozie 系统库 属性。
oozie.use.system.libpath=true.
这是 运行 任何 Hive、Pig、Sqoop、Spark 等作业所必需的。
您可以编译构建 spark 应用程序 jar,并将它们放入 oozie 应用程序路径下的 lib
目录中。 Oozie 应用程序路径是您在 HDFS 中存储和引用 workflow.xml
文件的目录。
希望这会有所帮助。谢谢