【发布时间】:2015-11-10 08:03:12
【问题描述】:
我用 Scala 编写了一个使用 Spark 的应用程序。
该应用程序由两个模块组成 - App 模块包含具有不同逻辑的类,Env 模块包含环境和系统初始化代码以及实用程序函数。
入口点位于Env,初始化后在App创建一个类(根据args,使用Class.forName)并执行逻辑。
这些模块被导出到 2 个不同的 JAR 中(即env.jar 和app.jar)。
当我在本地运行应用程序时,它执行得很好。下一步是将应用程序部署到我的服务器。我使用 Cloudera 的 CDH 5.4。
我使用 Hue 创建了一个新的 Oozie 工作流,其中包含以下参数的 Spark 任务:
- 火花大师:
yarn - 模式:
cluster - 应用名称:
myApp - 罐子/py 文件:
lib/env.jar,lib/app.jar - 主类:
env.Main(在Env模块中) - 参数:
app.AggBlock1Task
然后,我将 2 个 JAR 放入工作流文件夹 (/user/hue/oozie/workspaces/hue-oozie-1439807802.48) 的 lib 文件夹中。
当我运行工作流时,它会抛出 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),但是当我这样做时它不起作用..
我做错了什么或遗漏了什么?
任何帮助将不胜感激!
【问题讨论】:
标签: apache-spark cloudera hadoop-yarn oozie hue