是的,你是对的 - spark 2.0.1 不包含 uber jar 本身,如 1.6.x 及更低版本(例如。spark-1.6.2-bin-hadoop2.6\lib\spark-assembly- 1.6.2-hadoop2.6.0.jar)
Spark 2.0.0+ spark-release-2-0-0.html 不需要胖组装 uber jar。但是,当您比较 spark-assembly-1.6.2-hadoop2.6.0 的内容和 spark-2.0.0-bin-hadoop2.7\jars\ 中的 libs(jar 文件的内容)时,您可以看到几乎相同的内容以及相同的类、包等。
如果我能找到旧的 jar,我可以将它与 apache 2.0.1 一起使用吗?
个人不这么认为。向后兼容性可能存在一些潜在问题,并且在latest 版本中删除了某些内容很奇怪。
SparkYarnTasklet 需要汇编 jar 是对的,因为有一些 postPropertiesSet 验证:
@Override
public void afterPropertiesSet() throws Exception {
Assert.hasText(sparkAssemblyJar, "sparkAssemblyJar property was not set. " +
"You must specify the path for the spark-assembly jar file. " +
"It can either be a local file or stored in HDFS using an 'hdfs://' prefix.");
但是,这个sparkAssemblyJar只用在sparkConf.set("spark.yarn.jar", sparkAssemblyJar);中
- 当您将使用
SparkYarnTasklet 时,程序可能会验证失败(您可以尝试扩展SparkYarnTasklet 并覆盖afterPropertiesSet 而不进行验证)
还有documentation about "spark.yarn.jar:"
要使 Spark 运行时 jar 可以从 YARN 端访问,您可以指定
spark.yarn.archive 或 spark.yarn.jars。详情请参考
火花属性。如果 spark.yarn.archive 和 spark.yarn.jars 都不是
指定,Spark 将创建一个包含所有 jar 的 zip 文件
$SPARK_HOME/jars 并将其上传到分布式缓存。
所以看看属性:spark.yarn.jars 和 spark.yarn.archive。
所以比较一下 1.6.x- 和 2.0.0+ 中的 spark.yarn.jar 是什么
- spark.yarn.jar 在 1.6.2 中:
Spark jar 文件的位置,以防需要覆盖默认位置。默认情况下,YARN 上的 Spark 将使用本地安装的 Spark jar,但 Spark jar 也可以位于 HDFS 上的世界可读位置。这允许 YARN 将其缓存在节点上,这样就不需要在每次应用程序运行时分发它。例如,要指向 HDFS 上的 jar,将此配置设置为 hdfs:///some/path。
包含 Spark 代码的库列表 分发到 YARN
容器。默认情况下,YARN 上的 Spark 将使用已安装的 Spark jars
在本地,但 Spark jar 也可以在世界可读的位置
在 HDFS 上。这允许 YARN 将其缓存在节点上,因此它不需要
每次应用程序运行时分发。指向罐子
例如 HDFS,将此配置设置为 hdfs:///some/path。球体
是允许的。
但这似乎将所有罐子一一设置。
但在 2.0.0+ 中,spark.yarn.archive 替换了 spark.yarn.jars,并提供了一种如何避免逐个传递 jar 的方法 - 使用根“dir”中的所有 jar 创建存档。
我认为spring-hadoop 将在几周内反映 2.0.0+ 的变化,但对于“快速修复”,我可能会尝试覆盖 SparkYarnTasklet 并反映 2.0.1 的变化 - 正如我所看到的 @987654324 @ 和 afterPropertiesSet 方法。