如何在使用Spark 2.1部署的YARN群集上使用不同的Spark版本(Spark 2.4)?

时间:2018-12-26 06:48:22

标签: apache-spark

我有一个带有Spark 2.1的Hortonworks纱线簇。

但是我想用spark 2.3+运行我的应用程序(因为使用中的基本第三方ML库需要它)。

我们是否必须使用Spark 2.1版本的spark-submit,还是必须使用Java或Scala和FAT jar将作业提交到纱线?这有可能吗? Hadoop库呢?

2 个答案:

答案 0 :(得分:0)

我假设您在项目中使用sbt作为构建工具。项目本身可以使用Java或Scala。我还认为,如果您使用gradle或maven,则一般的答案将是相似的,但是插件将完全不同。想法是一样的。


您必须使用一个程序集插件(例如sbt-assembly)将所有非Provided依赖项(包括Apache Spark)捆绑在一起,以便创建所谓的 fat jar 超级罐

如果自定义Apache Spark版本是应用程序jar的一部分,则无论您部署时使用什么spark-submit都将使用该版本。技巧是欺骗类加载器,以便它加载您选择的jar和类(而不是spark-submit)(以及集群中使用的任何东西)。

答案 1 :(得分:0)

在Hortonworks集群上,以yarn client / cluster模式运行自定义spark版本需要执行以下步骤:

  1. 下载具有适当hadoop版本的Spark预建文件
  2. 提取并解压缩到spark文件夹中。例如。 /home/centos/spark/spark-2.3.1-bin-hadoop2.7 /
  3. 将jersey-bundle 1.19.1 jar复制到spark jar文件夹中[从此处下载] [1]
  4. 创建一个包含Spark jar文件夹中所有jar的zip文件。 Spark-jar.zip
  5. 将此spark-jar.zip文件放置在世界可访问的hdfs位置,例如(hdfs dfs -put spark-jars.zip / user / centos / data / spark /)

  6. 获取hdp版本(hdp选择状态hadoop-client):例如输出。 hadoop-client- 3.0.1.0-187

  7. 在下面的导出命令中使用上面的hdp版本

  8. 导出HADOOP_CONF_DIR = $ {HADOOP_CONF_DIR:-/ usr / hdp / 3.0.1.0-187 / hadoop / conf}

  9. export HADOOP_HOME = $ {HADOOP_HOME:-/ usr / hdp / 3.0.1.0-187 / hadoop}
  10. export SPARK_HOME = / home / centos / spark / spark-2.3.1-bin-hadoop2.7 /

  11. 在spark_home / conf目录中编辑spark-defaults.conf文件,添加以下条目

  

spark.driver.extraJavaOptions -Dhdp.version = 3.0.1.0-187

     

spark.yarn.am.extraJavaOptions -Dhdp.version = 3.0.1.0-187

  1. 在spark_home / conf目录中创建java-opts文件,添加以下条目并使用上述hdp版本
  

-Dhdp.version = 3.0.1.0-187

  1. 导出LD_LIBRARY_PATH = / usr / hdp / 3.0.1.0-187 / hadoop / lib / native:/usr/hdp/3.0.1.0-187/hadoop/lib/native/Linux-amd64-64
  2. spark-shell --master纱线--deploy-mode客户端--conf spark.yarn.archive = hdfs:///user/centos/data/spark/spark-jars.zip