我正在从 DStreams Spark 应用程序迁移到结构化流应用程序。在测试过程中,我发现 Spark 的 UI 中 Executors 选项卡中的 Storage Memory 不断增长。它甚至超过了分配的内存,同时没有溢出到磁盘,缓存的 RDD 也只有几 MB。我使用的是 Spark 2.4.3 版并使用来自 Kafka 2.1 版的数据。
下面的示例显示了一个带有一个驱动程序和一个执行程序的应用程序。驱动程序分配了 3 GB 内存,执行程序分配了 5 GB(和 3 个内核)。
如您所见,UI 显示每个进程(执行程序和驱动程序)消耗大约 8 GB 的内存,而分配的值要小得多。它还表明没有溢出到磁盘。下图还显示缓存的 RDD 的大小约为 100 MB:
我试图用系统的值来验证 UI 报告的内存使用情况。我使用了 ps 命令,它显示驱动程序消耗大约 2 GB 的内存,执行程序消耗 5 GB,这在分配的值内。
我还使用 Spark 的 REST API 来获取执行程序的状态。响应显示“memoryUsed”值是 UI 中显示的值。这是 JSON 响应:
{
"id": "driver",
"hostPort": "ip:41214",
"isActive": true,
"rddBlocks": 0,
"memoryUsed": 7909526598,
"diskUsed": 0,
"totalCores": 0,
"maxTasks": 0,
"activeTasks": 0,
"failedTasks": 0, …Run Code Online (Sandbox Code Playgroud)