【问题标题】:Multiple SparkContext detected in the same JVM在同一个 JVM 中检测到多个 SparkContext
【发布时间】:2016-01-19 14:30:16
【问题描述】:

根据我的last question,我必须为我独特的 JVM 定义 Multiple SparkContext。

我用下一个方法(使用 Java):

SparkConf conf = new SparkConf();
conf.setAppName("Spark MultipleContest Test");
conf.set("spark.driver.allowMultipleContexts", "true");
conf.setMaster("local");

之后我创建下一个源代码:

SparkContext sc = new SparkContext(conf);
SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);

以及后面的代码:

JavaSparkContext ctx = new JavaSparkContext(conf);
JavaRDD<Row> testRDD = ctx.parallelize(AllList);

代码执行后,我收到下一条错误消息:

16/01/19 15:21:08 WARN SparkContext: Multiple running SparkContexts detected in the same JVM!
org.apache.spark.SparkException: Only one SparkContext may be running in this JVM (see SPARK-2243). To ignore this error, set spark.driver.allowMultipleContexts = true. The currently running SparkContext was created at:
org.apache.spark.SparkContext.<init>(SparkContext.scala:81)
test.MLlib.BinarryClassification.main(BinaryClassification.java:41)
    at org.apache.spark.SparkContext$$anonfun$assertNoOtherContextIsRunning$1.apply(SparkContext.scala:2083)
    at org.apache.spark.SparkContext$$anonfun$assertNoOtherContextIsRunning$1.apply(SparkContext.scala:2065)
    at scala.Option.foreach(Option.scala:236)
    at org.apache.spark.SparkContext$.assertNoOtherContextIsRunning(SparkContext.scala:2065)
    at org.apache.spark.SparkContext$.setActiveContext(SparkContext.scala:2151)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:2023)
    at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:61)
    at test.MLlib.BinarryClassification.main(BinaryClassification.java:105)

数字41105 是这两个对象在Java 代码中定义的行。我的问题是,如果我已经使用 set-method,是否可以在同一个 JVM 上执行多个 SparkContext 以及如何执行?

【问题讨论】:

标签: java apache-spark jvm


【解决方案1】:

您确定需要将 JavaSparkContext 作为单独的上下文吗?您提到的上一个问题没有这样说。如果你已经有一个 Spark 上下文,你可以从中创建一个新的 JavaSparkContext,而不是创建一个单独的上下文:

SparkConf conf = new SparkConf();
conf.setAppName("Spark MultipleContest Test");
conf.set("spark.driver.allowMultipleContexts", "true");
conf.setMaster("local");

SparkContext sc = new SparkContext(conf);
SQLContext sqlContext = new org.apache.spark.sql.SQLContext(sc);

//Create a Java Context which is the same as the scala one under the hood
JavaSparkContext.fromSparkContext(sc)

【讨论】:

  • 不,我不想要 :) 非常感谢您的解决方案,它似乎有效。我很高兴得到社区的支持:)
【解决方案2】:

默认情况下 SparkContext 正在运行,所以你必须停止这个上下文: sc.stop 那么你可以在没有任何pb的情况下继续

【讨论】:

    【解决方案3】:

    而不是使用SparkContext,您应该在SparkSession 上使用builder 方法,该方法更鲁棒地实例化火花和SQL 上下文并确保不存在上下文冲突。

    import org.apache.spark.sql.SparkSession
    val spark = SparkSession.builder().appName("demo").getOrCreate()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      相关资源
      最近更新 更多