Apache Spark吹嘘它的运营商(节点)是"无状态"。这使Spark的架构可以使用更简单的协议来实现恢复,负载平衡和处理落后者等。
另一方面,Apache Flink将其运营商描述为"有状态",并声称有状态是机器学习等应用程序所必需的。然而,Spark程序能够在RDD中传递信息并维护应用程序数据,而无需维护状态"。
这里发生了什么? Spark不是一个真正的无状态系统吗?或者Flink的断言是有状态对机器学习和类似应用程序不正确是必不可少的?或者这里有一些额外的细微差别?
我不觉得我真正理解了#34;有状态"和#34;无国籍的"系统,如果可以解释,我将不胜感激。
答案 0 :(得分:2)
州的财产是指能够在当前时间点访问先前时间点的数据。
这是什么意思?假设我想对已经到达流媒体应用程序的所有单词进行单词计数。但流式传输的本质是数据流入和流出管道。为了能够访问以前的数据,在这个例子中,某种地图保存了流中前一个单词的数量,我必须访问累积的一些状态。
虽然某些Sparks RDD运算符是无状态的,例如map
,filter
等,但确实以mapWithState
的形式公开了有状态运算符。不仅如此,在新的Spark流式架构中,称为" Structured Streaming",状态内置于管道中,并且主要从用户抽象出来,以便能够公开聚合运算符,例如{{1 }}