我了解到默认情况下结构化流支持HDFSBackedStateStoreProvider
。
这意味着所有与状态有关的信息都存储在HDFS位置。
是否可以确保没有数据存储在内存中,否则可能导致长时间的GC暂停?
这个问题的原因是我正在运行的作业在高流量时停止处理数据,并在延迟15-20分钟后赶上。
答案 0 :(得分:1)
您是正确的,Spark结构化流确实支持HDFSBackedStateStoreProvider
。
但是,它不能确保没有数据存储在内存中。它使用HDFS定期存储检查点作为预写日志。这样做的方式是,如果您的流中断,则可以从HDFS恢复最后一个已知状态,而下一个流将能够从上一个流中断的地方重新处理数据。
关于长时间的GC暂停,您可能需要看以下文章:
答案 1 :(得分:1)
是否可以确保没有数据存储在内存中,否则可能导致长时间的GC暂停?
Spark在执行者的内存中维护一些状态版本,以避免每批重新读取以前的状态。
顺便说一句,您正在使用哪个版本的Spark?在Spark 2.4.0中,HDFS状态存储提供程序中的内存使用有了一些改进,这将大大减少长时间运行的结构化流应用程序中的内存使用。因此,如果您不使用Spark 2.4.0,则值得一试。
SPARK-24763 [2]:从流聚合中的值中删除冗余键数据