【问题标题】:Loading dependency jars (different versions of same jar for different actions/jobs) with oozie spark action使用 oozie spark 操作加载依赖项 jar(不同版本的相同 jar 用于不同的操作/作业)
【发布时间】:2017-10-22 00:42:25
【问题描述】:

我的主要 spark 项目依赖于其他 utils jars。所以组合可能是这样的:

 1. main_spark-1.0.jar will work with utils_spark-1.0.jar (some jobs use this set)
 2. main_spark-2.0.jar will work with utils_spark-2.0.jar  (and some of the jobs use this set)

对我来说处理这种情况的方法是使用 spark-opt as 传递 jars

oozie spark action job1
<jar>main_spark-1.0.jar</jar>
<spark-opt>--jars utils_spark-1.0.jar</spark-opt>

oozie spark action job2
<jar>main_spark-2.0.jar</jar>
<spark-opt>--jars utils_spark-2.0.jar</spark-opt>

我在两个不同的操作中测试了这个配置,它可以工作。 我的问题是

  1. 与在应用程序库路径中加载 jars 有何不同(oozie)?
  2. 如果两个作业/操作在同一个纱线集群上并行运行,那么是否存在类加载器问题(同一个 jar 的多个版本)?

据我了解,这两个应用程序都将在其 spark 上下文中运行,所以应该没问题,但有什么专家建议吗?

【问题讨论】:

  • 我建议您将问题一分为二,因为这样会更容易回答。
  • AFAIK Oozie 通过标准 YARN 机制提供 JAR,因此它们是在默认 CLASSPATH 中为操作定义的。而 Spark 通过从 Driver 的自定义下载来交付 JAR,在 Executor 启动序列中;它们被添加到自定义 Spark 类加载器中。这会导致不同类型的 CLASSPATH 优先问题...

标签: apache-spark oozie oozie-coordinator


【解决方案1】:

如果两个作业/动作在同一个纱线集群上并行运行,那么是否存在类加载器问题(同一个 jar 的多个版本)的可能性?

没有(或者至少不是预期的,如果发生了,我会认为这是一个错误)。

将 Spark 应用程序提交到 YARN 集群总是以一组单独的驱动程序和执行程序结束,它们共同构成与其他 Spark 应用程序不同的环境。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 2011-12-01
    相关资源
    最近更新 更多