Spark 2.1 , Method used to prevent multiple SparkContexts from being active at the same time

来源:互联网 发布:搞笑文案知乎 编辑:程序博客网 时间:2024/06/06 04:33

SparkContect.scala

  // In order to prevent multiple SparkContexts from being active at the same time, mark this  // context as having started construction.  // NOTE: this must be placed at the beginning of the SparkContext constructor.  SparkContext.markPartiallyConstructed(this, allowMultipleContexts)
  /**   * Called at the beginning of the SparkContext constructor to ensure that no SparkContext is   * running.  Throws an exception if a running context is detected and logs a warning if another   * thread is constructing a SparkContext.  This warning is necessary because the current locking   * scheme prevents us from reliably distinguishing between cases where another context is being   * constructed and cases where another constructor threw an exception.   */  private[spark] def markPartiallyConstructed(      sc: SparkContext,      allowMultipleContexts: Boolean): Unit = {    SPARK_CONTEXT_CONSTRUCTOR_LOCK.synchronized {      assertNoOtherContextIsRunning(sc, allowMultipleContexts)      contextBeingConstructed = Some(sc)    }  }

assertNoOtherContextIsRunning

/**   * Called to ensure that no other SparkContext is running in this JVM.   *   * Throws an exception if a running context is detected and logs a warning if another thread is   * constructing a SparkContext.  This warning is necessary because the current locking scheme   * prevents us from reliably distinguishing between cases where another context is being   * constructed and cases where another constructor threw an exception.   */  private def assertNoOtherContextIsRunning(      sc: SparkContext,      allowMultipleContexts: Boolean): Unit = {    SPARK_CONTEXT_CONSTRUCTOR_LOCK.synchronized {      Option(activeContext.get()).filter(_ ne sc).foreach { ctx =>          val errMsg = "Only one SparkContext may be running in this JVM (see SPARK-2243)." +            " To ignore this error, set spark.driver.allowMultipleContexts = true. " +            s"The currently running SparkContext was created at:\n${ctx.creationSite.longForm}"          val exception = new SparkException(errMsg)          if (allowMultipleContexts) {            logWarning("Multiple running SparkContexts detected in the same JVM!", exception)          } else {            throw exception          }        }      contextBeingConstructed.filter(_ ne sc).foreach { otherContext =>        // Since otherContext might point to a partially-constructed context, guard against        // its creationSite field being null:        val otherContextCreationSite =          Option(otherContext.creationSite).map(_.longForm).getOrElse("unknown location")        val warnMsg = "Another SparkContext is being constructed (or threw an exception in its" +          " constructor).  This may indicate an error, since only one SparkContext may be" +          " running in this JVM (see SPARK-2243)." +          s" The other SparkContext was created at:\n$otherContextCreationSite"        logWarning(warnMsg)      }    }  }
0 0
原创粉丝点击