Spark提交执行结束后,Spark Web UI将被终止。有没有办法让它活着?
我正在使用Spark 1.2.1。
答案 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服务器部分保持打开一段时间,或者某些其他视图,但可能是一个功能请求?
// 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)
答案的解决方案
在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();
最佳解决方案是在某个地方记录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上可用的历史记录管理器。