【发布时间】: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>
我在两个不同的操作中测试了这个配置,它可以工作。 我的问题是
- 与在应用程序库路径中加载 jars 有何不同(oozie)?
- 如果两个作业/操作在同一个纱线集群上并行运行,那么是否存在类加载器问题(同一个 jar 的多个版本)?
据我了解,这两个应用程序都将在其 spark 上下文中运行,所以应该没问题,但有什么专家建议吗?
【问题讨论】:
-
我建议您将问题一分为二,因为这样会更容易回答。
-
AFAIK Oozie 通过标准 YARN 机制提供 JAR,因此它们是在默认 CLASSPATH 中为操作定义的。而 Spark 通过从 Driver 的自定义下载来交付 JAR,在 Executor 启动序列中;它们被添加到自定义 Spark 类加载器中。这会导致不同类型的 CLASSPATH 优先问题...
标签: apache-spark oozie oozie-coordinator