运行 在不同版本的 spark 上远程应用 spark 应用程序

Run spark application on a different version of spark remotely

我很少进行 spark 测试,我在 spark 1.6.0 上通过 maven 远程 运行 正常,并且我正在使用 scala。现在我想 运行 在 spark2 上进行这些测试。问题是默认情况下使用 spark 1.6 的 cloudera。 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 本身中指定版本?

提交新的 Spark 作业时,有两个地方需要更改 Spark 版本:

  1. SPARK_HOME 设置为包含正确 Spark 安装的(本地)路径。 (有时 - 特别是对于较小的版本更改 - SPARK_HOME 中的版本不必 100% 正确,尽管我建议保持干净。)
  2. 通知集群 Spark 罐子所在的位置。默认情况下,spark-submit 会将 SPARK_HOME 中的 jar 上传到您的集群(这是您不应混合版本的原因之一)。但是您可以通过提示集群管理器使用位于 hdfs 中的 jar 来跳过此上传过程。当您使用 Cloudera 时,我假设您的集群管理器是 Yarn。在这种情况下,将 spark.yarn.jarsspark.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_HOMEspark.yarn.jars.

引用的版本相匹配

我能够成功 运行 它用于 spark 2.3.0。我之前无法在 spark 2.3.0 上 运行 的问题是因为我在 pom.xml 中为 1.6 版本添加了 spark-core 依赖项。这就是为什么无论我们指定什么 jar 位置,它默认采用 spark 1.6(仍在弄清楚原因)。在更改库版本时,我能够 运行 它。