使用Oozie(使用Hue)在YARN上运行Spark应用程序的正确方法是什么?

时间:2015-08-17 15:47:23

标签: apache-spark cloudera yarn oozie hue

我在Scala中编写了一个使用Spark的应用程序 该应用程序包含两个模块 - App模块,其中包含具有不同逻辑的类,以及Env模块,其中包含环境和系统初始化代码以及实用程序功能。
入口点位于Env,初始化后,它在App中创建一个类(根据args,使用Class.forName)并执行逻辑。 /> 这些模块被导出到2个不同的JAR中(即env.jarapp.jar)。

当我在本地运行应用程序时,它执行得很好。下一步是将应用程序部署到我的服务器。我使用Cloudera的CDH 5.4。

我使用Hue使用Spark任务创建一个新的Oozie工作流,其中包含以下参数:

  • Spark Master:yarn
  • 模式:cluster
  • 应用名称:myApp
  • Jars / py文件:lib/env.jar,lib/app.jar
  • 主要课程:env.Main(在Env模块中)
  • 参数:app.AggBlock1Task

然后我将2个JAR放在工作流程文件夹(lib)的/user/hue/oozie/workspaces/hue-oozie-1439807802.48文件夹中。

当我运行工作流时,它会抛出FileNotFoundException并且应用程序不会执行:

java.io.FileNotFoundException: File file:/cloudera/yarn/nm/usercache/danny/appcache/application_1439823995861_0029/container_1439823995861_0029_01_000001/lib/app.jar,lib/env.jar does not exist

但是,当我将Spark主模式和模式参数留空时,一切正常,但是当我以编程方式检查spark.master时,它设置为local[*]而不是yarn。此外,在观察日志时,我在Oozie Spark操作配置下遇到了这个:

--master
null
--name
myApp
--class
env.Main
--verbose
lib/env.jar,lib/app.jar
app.AggBlock1Task

我认为我做得不对 - 没有设置Spark主模式和模式参数,并且在spark.master设置为local[*]的情况下运行应用程序。据我所知,在应用程序中创建一个SparkConf对象应该将spark.master属性设置为我在Oozie中指定的任何属性(在本例中为yarn),但它不是没有当我这样做时工作..

我有什么不对或错过的吗? 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

我设法通过将两个JAR放在用户目录/user/danny/app/中并将Jar/py files参数指定为${nameNode}/user/danny/app/env.jar来解决问题。即使JAR位于HDFS中的同一文件夹中,运行它也会导致ClassNotFoundException被抛出。要解决这个问题,我必须转到设置并将以下内容添加到选项列表中:--jars ${nameNode}/user/danny/app/app.jar。这样也引用了App模块,并且应用程序成功运行。