Apache spark spark UI对应用程序的影响是什么;内存使用情况如何?
我有一个Spark应用程序(2.4.5),使用Kafka作为源,使用大批量窗口(5分钟),在我们的应用程序中,我们只关心从特定时间间隔到处理数据的RDD 发生的情况是,我们的应用程序不时崩溃,驱动程序上出现OutOfMemory异常(在客户端模式下运行)或执行器上出现GC OutOfMemory异常。经过大量的研究,我们似乎没有正确地处理导致血统无限增长的状态。我们考虑通过使用批处理方法(控制从Kafka获取的偏移量并从中创建RDD(这将截断沿袭)或通过启用检查点来解决问题 在调查过程中,有人发现了一个不太类似的问题,通过调整一些UI参数()解决了这个问题:Apache spark spark UI对应用程序的影响是什么;内存使用情况如何?,apache-spark,user-interface,parameters,out-of-memory,driver,Apache Spark,User Interface,Parameters,Out Of Memory,Driver,我有一个Spark应用程序(2.4.5),使用Kafka作为源,使用大批量窗口(5分钟),在我们的应用程序中,我们只关心从特定时间间隔到处理数据的RDD 发生的情况是,我们的应用程序不时崩溃,驱动程序上出现OutOfMemory异常(在客户端模式下运行)或执行器上出现GC OutOfMemory异常。经过大量的研究,我们似乎没有正确地处理导致血统无限增长的状态。我们考虑通过使用批处理方法(控制从Kafka获取的偏移量并从中创建RDD(这将截断沿袭)或通过启用检查点来解决问题 在调查过程中,有人发
- spark.ui.retainedJobs=50
- spark.ui.retainedStages=50
- spark.ui.retainedTasks=500
- spark.worker.ui.retainedExecutors=50
- spark.worker.ui.retainedrivers=50
- spark.sql.ui.retainedExecutions=50
- spark.streaming.ui.retainedBatches=50
谢谢您经过大量测试,我们的团队设法将问题缩小到这个特定参数: spark.sql.ui.retainedExecutions 我决定深入研究,所以我下载了Spark的代码。我发现有关解析的逻辑计划的信息不仅保存在应用程序的内存中,而且还受此参数的控制 创建SparkSession会话时,实例化的许多对象之一是SQLAppStatusListener。此类实现两个方法: OneExecutionStart-每次执行时,都会创建一个新的SparkLangraphWrapper,它将保存对已解析逻辑计划的引用,并将其添加到SharedState对象中,在本例中,该对象跟踪创建了多少个对象实例 cleanupExecution-如果存储对象的数量大于spark.sql.ui.retainedExecutions的值(默认值为1000),则从SharedState对象中删除SparkPlanGraphWrapper
具体地说,在我们的例子中,逻辑计划占用4MB内存,因此以一种简单的方式,我们必须分配4GB内存来容纳保留的执行。learnsome。我无法从手册或其他地方收集到这一点。在GC方面很难遵循。假设正确的话,就这样投票。也就是说,spark很难从其他几个方面入手。我不相信所有人都知道他们在处理什么。