我们有一个使用mapGroupWithState的Spark结构化流媒体流。经过一段时间稳定的处理后,每小批批次突然开始耗时40秒。令人怀疑的是,每次看起来恰好是40秒。在此之前,批处理时间不到一秒钟。
查看特定任务的详细信息,大多数分区的处理速度非常快,但有些分区恰好需要40秒:
由于数据正在快速处理中,GC看起来还不错,但是突然间,整个GC等都停止了(与40秒发行同时):
由于此问题的发生,我已经从一位执行者那里提取了一个线程转储,但是我看不到它们被阻塞的任何资源:
我们是否遇到了GC问题,为什么以这种方式体现出来?还有另一种资源正在阻塞吗?
答案 0 :(得分:0)
请尝试提供更多的HEAP空间,以查看GC是否仍然不堪重负,如果这样的话,您很可能会出现内存泄漏问题
您使用的是哪个Spark版本?如果知道它的火花2.3.1,则FD leakage issue是已知的,如果您正在从Kafka读取数据(这是非常常见的),以弄清您的工作是否泄漏FD,请查看从属容器过程中FD的用法,通常应该保持在100到200左右,并且只需升级到spark 2.3.2即可解决此问题,我很惊讶这个问题是如此基础,但却从未获得足够的见识