【问题标题】:What is the proper way of running a Spark application on YARN using Oozie (with Hue)?使用 Oozie(使用 Hue)在 YARN 上运行 Spark 应用程序的正确方法是什么?
【发布时间】:2015-11-10 08:03:12
【问题描述】:

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


    【解决方案1】:

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

    【讨论】:

    • 不错的发现,这很棘手,将考虑在 UI 中添加更好的帮助!
    猜你喜欢
    • 2015-12-05
    • 2016-04-28
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多