我有一个带有Spark 2.1的Hortonworks纱线簇。
但是我想用spark 2.3+运行我的应用程序(因为使用中的基本第三方ML库需要它)。
我们是否必须使用Spark 2.1版本的spark-submit
,还是必须使用Java或Scala和FAT jar将作业提交到纱线?这有可能吗? Hadoop库呢?
答案 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版本需要执行以下步骤:
将此spark-jar.zip文件放置在世界可访问的hdfs位置,例如(hdfs dfs -put spark-jars.zip / user / centos / data / spark /)
获取hdp版本(hdp选择状态hadoop-client):例如输出。 hadoop-client- 3.0.1.0-187
在下面的导出命令中使用上面的hdp版本
导出HADOOP_CONF_DIR = $ {HADOOP_CONF_DIR:-/ usr / hdp / 3.0.1.0-187 / hadoop / conf}
export SPARK_HOME = / home / centos / spark / spark-2.3.1-bin-hadoop2.7 /
在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
-Dhdp.version = 3.0.1.0-187