如何保持Spark Web UI活着?

时间:2015-02-23 13:58:55

标签: apache-spark

Spark提交执行结束后,Spark Web UI将被终止。有没有办法让它活着?

我正在使用Spark 1.2.1。

7 个答案:

答案 0 :(得分:7)

如果您在本地模式下测试,即使用IDEA或Eclipse,则一种方法是执行如下操作。

System.in.read();
spark.stop(); // spark --> SparkSession 

这将确保只要您愿意就可以访问UI。只需在IDEA / Eclipse控制台上按Enter键即可终止应用程序

答案 1 :(得分:5)

您可以使用Spark的事件记录和历史记录服务器功能来查看已完成应用程序的UI;有关详细信息,请参阅https://spark.apache.org/docs/latest/monitoring.html

答案 2 :(得分:4)

添加如何使用历史记录服务器的新手友好的逐步解决方案:

  • 在spark distribution文件夹中,尝试通过以下方式启动历史记录服务器:

    ./sbin/start-history-server.sh

    默认情况下,历史记录服务器会尝试监视/tmp/spark-events日志,但不幸的是,如果路径不存在,它将崩溃。因此,如果您收到错误,可能需要先mkdir /tmp/spark-events。您可以在./logs中查看历史记录服务器日志,以便在出现问题时查看详细信息。

  • 为了使上下文保持其事件日志,您必须启用事件日志记录。这可以通过编程方式或通过编辑./conf/spark-defaults.conf(如果模板尚未存在则复制模板)以及取消注释/添加该行来完成:

    spark.eventLog.enabled true

    运行spark-submit会产生/tmp/spark-events/local-1465133722470等事件日志文件夹。

  • 访问历史记录服务器用户界面,通常来自http://localhost:18080

答案 3 :(得分:3)

Web UI本质上与SparkContext绑定,因此如果您不调用.stop并保持应用程序处于活动状态,则UI应保持活动状态。如果您需要查看日志,那么这些日志仍应保留在服务器上。它可能会使一个有趣的功能是让Web服务器部分保持打开一段时间,或者某些其他视图,但可能是一个功能请求?

来自SparkContext.scala

// Initialize the Spark UI
private[spark] val ui: Option[SparkUI] =
if (conf.getBoolean("spark.ui.enabled", true)) {
  Some(SparkUI.createLiveUI(this, conf, listenerBus, jobProgressListener,
    env.securityManager,appName))
} else {
  // For tests, do not enable the UI
  None
}


/** Shut down the SparkContext. */
  def stop() {
    SparkContext.SPARK_CONTEXT_CONSTRUCTOR_LOCK.synchronized {
      postApplicationEnd()
      ui.foreach(_.stop())
      ...
    }
  }

更新 - 更好的答案

我忘记了火花历史记录服务器。 That is something you might want to look into

答案 4 :(得分:1)

答案的解决方案

  1. 在SparkContext停止之前,请使用Thread.sleep(86400000)。这将使您的Spark UI保持24小时处于活动状态,直到您终止该过程。这不是建议的解决方案。

    SparkConf conf = new SparkConf().setAppName("Simple Application").setMaster("local[*]");
    JavaSparkContext sc = new JavaSparkContext(conf);
    Thread.sleep(86400000); //throws InterruptedException. 
    sc.stop();
    
    1. 最佳解决方案是在某个地方记录Spark事件并使用Spark历史记录服务器。

      spark.eventLog.enabled=true
      $ ./sbin/start-history-server.sh
      

答案 5 :(得分:0)

可能是您可以添加以下行:

new Scanner(System.in).nextLine()

确保它在驱动程序中运行

答案 6 :(得分:0)

在本地测试用Python编写的Spark应用程序时,我将其添加到我的应用程序的末尾:

raw_input("Press ctrl+c to exit")

在YARN集群管理器上运行时,我使用端口18080上可用的历史记录管理器。