在应用程序中仅确保一个Spark上下文的良好实践

时间:2015-07-22 20:16:51

标签: scala design-patterns apache-spark singleton

我正在寻找一种确保我的应用只使用一个Spark Context(sc)的好方法。在开发过程中,我经常遇到错误,不得不重启我的游戏!服务器重新测试我的修改。 Singleton模式会成为解决方案吗?

object sparckContextSingleton {
  @transient private var instance: SparkContext = _
  private val conf : SparkConf = new SparkConf()
    .setMaster("local[2]")
    .setAppName("myApp")

  def getInstance(): SparkContext = {
    if (instance == null){
      instance = new SparkContext(conf)
    }
    instance
  }  
}

这不是一件好事。我应该停止SparkContext吗?

2 个答案:

答案 0 :(得分:0)

在Play中你应该编写一个暴露SparkContext的插件。使用插件的启动和停止挂钩来启动和停止上下文。

答案 1 :(得分:0)

这应该足以做到这一点,重要的是使用val而不是var。

object SparkContextKeeper {
  val conf = new SparkConf().setAppName("SparkApp")
  val context= new SparkContext(conf)
  val sqlContext = new SQLContext(context)
}