我有一个较旧版本的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类似。
答案 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管理员交谈)是:
在构建系统中定义Spark 2的库依赖关系,无论是sbt还是maven。
组装你的Spark应用程序,用里面的Spark库创建一个所谓的uber-jar或fatjar。
它有效,我个人在项目中至少测试过一次。
它的唯一(?)缺点是构建过程需要更长时间(你必须sbt assembly
而不是sbt package
)并且你的Spark应用程序的可部署fatjar的大小是......好吧.. 。更大。这也使得部署时间更长,因为您必须spark-submit
通过网络进行YARN。
总而言之,它可以工作但需要更长的时间(可能仍然比说服你的管理神更短,比如忘记Cloudera的CDH或Hortonworks的HDP或MapR发行版等商业产品中的内容)。