如何在多个SparkContexts活动时迁移Spark应用程序?

时间:2017-10-16 11:35:11

标签: java apache-spark

我正在从Spark 1.3.0迁移到Spark 2.1.1。 之前我能够使用以下内容在Java 1.3.0上创建SparkContext:

SparkConf conf = new SparkConf().setAppName(dsp.getAppName()).setMaster("local").set("spark.driver.allowMultipleContexts", "true");
JavaSparkContext java_sc = new JavaSparkContext(conf);

但是我收到错误“在同一个JVM中检测到多个运行的SparkContexts!”和“org.apache.spark.SparkException: Failed to get broadcast_0_piece0 of broadcast_0"

有人能帮助我吗?

2 个答案:

答案 0 :(得分:0)

引用JavaSparkContext的javadoc:

  

每个JVM只能激活一个SparkContext。您必须在创建新的SparkContext之前停止()活动的SparkContext。

在Scala中,您可以使用SparkContext.getOrCreate从Spark应用程序中的任何位置获取或实例化customerID并将其注册为单个对象。

  

getOrCreate():SparkContext 此函数可用于获取或实例化SparkContext并将其注册为单例对象。因为每个JVM只能有一个活动的SparkContext,所以当应用程序可能希望共享SparkContext时,这很有用。

我找不到Java的方法版本,所以也许只使用Scala。

答案 1 :(得分:0)

以下答案似乎适用于我的情况: https://stackoverflow.com/a/34880317/3567232

我所做的只是从已有的SparkContext创建一个新的JavaSparkContext。