簡體   English   中英

重新加載Playframework Spark配置異常

[英]Playframework Spark provisioning exception on reload

游戲和火花都很棒。 但是我把它們結合起來有些麻煩。 Play提供了很好的重新編譯機制。 但是,無法重新實例化火花上下文。

如果我的代碼中有一些錯誤/更改了一些代碼並重新編譯,我很遺憾地收到以下錯誤:

ProvisionException: Unable to provision, see the following errors:

1) Error injecting constructor, 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:82)
controllers.Application.createSparkContext(Application.scala:38)
controllers.Application.<init>(Application.scala:35)
controllers.Application$$FastClassByGuice$$b5b6aa19.newInstance(<generated>)

一種解決方法是手動終止播放應用程序,然后重新運行它。 但這似乎並不好。 有更好的想法嗎?

我有同樣的問題。 有一個解決方案對我有用:

定義LocalSparkProvider.scala對象:

object LocalSparkProvider {
  val sparkContext = new SparkContext(new SparkConf().setAppName("myApplication").setMaster("local"))
  val sqlContext = new SQLContext = new SQLContext(sparkContext)
}

現在在根包下創建Global.scala對象(在Play應用程序中它是“app”目錄)

import play.api.GlobalSettings

object Global extends GlobalSettings {
  override def onStop(app: play.api.Application): Unit = { // Use an explicit definition of the package!
    LocalSparkProvider.sparkContext.stop()
  }
}

重新加載應用程序后,Play觸發onStop方法。 哪個可以用來阻止火花環境。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM