我使用带有updateStateByKey()
和mapWithState()
函数的Spark Streaming,但我不清楚哪里保存了状态。状态是否保存在HDFS上?还是它的内存存储?如何保证容错?
答案 0 :(得分:5)
Spark Streaming目前有两个有状态流实现。一个是较旧的PairRDDFunctions.updateStateByKey
(Spark< = 1.5.0),它使用CoGroupedRDD
来存储每个键的状态。名为PairRDDFunctions.mapWithState
(Spark> = 1.6.0)的较新版本使用OpenHashMapBasedStateMap[K, V]
来存储内部状态。这两个都是内存实现
这两个有状态流都使用checkpointing作为持久性容错的机制。检查点位置可以是HDFS或亚马逊S3,其中数据在每个间隔保持,该间隔由用户使用DStream.checkpoint
定义或将默认为(批间隔*常数)。在使用有状态流时,您有义务指定检查点目录。
答案 1 :(得分:0)
状态存储在检查点目录中,该目录在流式上下文启动期间指定。有关检查点和容错的详细信息,请参阅documentation