Spark结构化的流状态管理

时间:2018-12-06 17:35:12

标签: java apache-spark spark-structured-streaming

我了解到默认情况下结构化流支持HDFSBackedStateStoreProvider。 这意味着所有与状态有关的信息都存储在HDFS位置。

是否可以确保没有数据存储在内存中,否则可能导致长时间的GC暂停?

这个问题的原因是我正在运行的作业在高流量时停止处理数据,并在延迟15-20分钟后赶上。

2 个答案:

答案 0 :(得分:1)

您是正确的,Spark结构化流确实支持HDFSBackedStateStoreProvider

但是,它不能确保没有数据存储在内存中。它使用HDFS定期存储检查点作为预写日志。这样做的方式是,如果您的流中断,则可以从HDFS恢复最后一个已知状态,而下一个流将能够从上一个流中断的地方重新处理数据。

关于长时间的GC暂停,您可能需要看以下文章:

  1. https://databricks.com/blog/2015/05/28/tuning-java-garbage-collection-for-spark-applications.html

答案 1 :(得分:1)

  

是否可以确保没有数据存储在内存中,否则可能导致长时间的GC暂停?

Spark在执行者的内存中维护一些状态版本,以避免每批重新读取以前的状态。

顺便说一句,您正在使用哪个版本的Spark?在Spark 2.4.0中,HDFS状态存储提供程序中的内存使用有了一些改进,这将大大减少长时间运行的结构化流应用程序中的内存使用。因此,如果您不使用Spark 2.4.0,则值得一试。