Spark胖jar在YARN上运行多个版本

时间:2016-12-28 00:52:24

标签: java maven apache-spark pyspark sbt-assembly

我有一个较旧版本的Spark设置与YARN,我不想消灭但仍想使用更新的版本。我找到了couple帖子,指的是如何使用胖罐。

Many SO posts指向maven(官方支持)或sbt构建一个胖罐,因为它不能直接用于download。 似乎有多个插件可以使用maven:maven-assembly-plugin,maven-shade-plugin,onejar-maven-plugin等。

然而,我无法弄清楚我是否真的需要一个插件,如果是的话,哪一个以及如何去实现它。我尝试使用' build / mvn'直接编译github源代码。并且' build / sbt'但是' spark-assembly_2.11-2.0.2.jar'文件只有283个字节。

我的目标是使用较新版本的胖罐运行pyspark shell,其方式与提到的here类似。

2 个答案:

答案 0 :(得分:0)

从spark版本2.0.0开始,不再支持创建远jar,您可以在Do we still have to make a fat jar for submitting jobs in Spark 2.0.0?

中找到更多信息

在您的情况下(在YARN上运行)推荐的方法是在HDFS上创建目录为spark的jars/目录,并将此路径添加到spark-defaults.conf

spark.yarn.jars    hdfs:///path/too/jars/directory/on/hdfs/*.jar

然后,如果您运行pyspark shell,它将使用以前上传的库,因此它的行为与Spark 1.X中的胖jar完全相同。

答案 1 :(得分:0)

最简单的解决方案(不更改您的YARN架构上的Spark并与YARN管理员交谈)是:

  1. 在构建系统中定义Spark 2的库依赖关系,无论是sbt还是maven。

  2. 组装你的Spark应用程序,用里面的Spark库创建一个所谓的uber-jar或fatjar。

  3. 它有效,我个人在项目中至少测试过一次。

    它的唯一(?)缺点是构建过程需要更长时间(你必须sbt assembly而不是sbt package)并且你的Spark应用程序的可部署fatjar的大小是......好吧.. 。更大。这也使得部署时间更长,因为您必须spark-submit通过网络进行YARN。

    总而言之,它可以工作但需要更长的时间(可能仍然比说服你的管理神更短,比如忘记Cloudera的CDH或Hortonworks的HDP或MapR发行版等商业产品中的内容)。