在不同版本的 spark 上远程运行 spark 应用程序
Posted
技术标签:
【中文标题】在不同版本的 spark 上远程运行 spark 应用程序【英文标题】:Run spark application on a different version of spark remotely 【发布时间】:2018-10-17 21:34:00 【问题描述】:我很少有火花测试,我在 spark 1.6.0 上通过 maven 远程运行良好,并且正在使用 scala。现在我想在 spark2 上运行这些测试。问题是 cloudera,默认情况下使用 spark 1.6。 cloudera 是从哪里获取这个版本的,我需要做什么来更改 spark 的默认版本? 此外,spark 1.6 和 spark 2 存在于同一个集群上。两种火花版本都存在于纱线之上。 hadoop 配置文件存在于我用来在测试环境中运行测试的集群上,这就是我获取 spark 上下文的方式。
def getSparkContext(hadoopConfiguration: Configuration): SparkContext =
val conf = new SparkConf().setAppName("SparkTest").setMaster("local")
hadoopConfiguration.set("hadoop.security.authentication", "Kerberos")
UserGroupInformation.loginUserFromKeytab("alice", "/etc/security/keytab/alice.keytab")
val sc=new SparkContext(conf)
return sc
有什么方法可以在 conf 文件或 cloudera 本身中指定版本吗?
【问题讨论】:
我无法理解您的问题。特别是:有什么方法可以在 conf 文件中指定 it[...]? 这里的“it”是什么? @wind 基于这个How do i specify the version ?
,我会说“它”是spark版本。
可以为依赖管理器定义一个版本的 Spark,因此对于 Scala,它可以是 SBT、Maven 或 Gradle。项目中有一个文件(相应的build.sbt、pom.xml、build.gradle)来定义依赖项(包名和版本)。
【参考方案1】:
提交新的 Spark Job 时,有两个地方需要更改 Spark-Version:
-
将
SPARK_HOME
设置为包含正确Spark 安装的(本地)路径。 (有时 - 特别是对于较小的版本更改 - SPARK_HOME
中的版本不必 100% 正确,但我建议保持干净。)
通知您的集群 Spark jar 所在的位置。默认情况下,spark-submit 会将SPARK_HOME
中的jar 上传到您的集群(这是您不应该混合版本的原因之一)。但是您可以通过提示集群管理器使用位于 hdfs 中的 jar 来跳过此上传过程。当您使用 Cloudera 时,我假设您的集群管理器是 Yarn。在这种情况下,请将 spark.yarn.jars
或 spark.yarn.archive
设置为正确 Spark 版本的 jar 所在的路径。示例:--conf spark.yarn.jar=hdfs://server:port/<path to your jars with the desired Spark version>
在任何情况下,您都应该确保您在运行时使用的 Spark 版本与编译时相同。您在 Maven、Gradle 或 Sbt 配置中指定的版本应始终与 SPARK_HOME
或 spark.yarn.jars
引用的版本匹配。
【讨论】:
我将 /opt/spark2/jars 中的所有 jars 复制到 hdfs 并在 spark.yarn.jars 中给出了路径。它仍在运行 spark v1.6.0 @werner 您可以在调用 spark-submit 时分享输出的相关部分吗?应该有一行提交过程通知您它不会上传 spark jar,因为它们已经存在于由spark.yarn.jars
指定的目录中的 hdfs 中【参考方案2】:
我能够为 spark 2.3.0 成功运行它。我之前无法在 spark 2.3.0 上运行它的问题是因为我在 pom.xml 中为 1.6 版本添加了 spark-core 依赖项。这就是为什么无论我们指定什么 jar 位置,它默认采用 spark 1.6(仍在弄清楚为什么)。在更改库版本时,我能够运行它。
【讨论】:
以上是关于在不同版本的 spark 上远程运行 spark 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
多节点火花集群上的 spark-shell 无法在远程工作节点上旋转执行程序
在远程集群上从 Spark 运行 hive 查询时,客户端无法通过以下方式进行身份验证:[TOKEN, KERBEROS]