Spark Streaming:mapWithState函数如何在集群中工作?

Yas*_*r S 2 apache-spark spark-streaming

我正在使用Spark Streaming v2.0.0从Kafka检索日志并进行一些操作。我正在使用该功能mapWithState以保存和更新与设备相关的某些字段。我想知道此功能如何在群集中工作。确实,到目前为止,我只是使用独立模式,但稍后将在Yarn群集中尝试使用它。

但是,假设我有一个包含多个节点的群集,如果一个节点更新了设备的状态,他是否会立即将此更新通知所有其他节点?如果否,则mapWithState需要设置集群功能。我该怎么办呢?

Yuv*_*kov 5

但是,假设我有一个包含多个节点的集群,如果一个节点更新了设备的状态,他是否会立即将此更新通知所有其他节点?如果否,则需要在集群中设置mapWithState函数。

那不是mapWithState工作原理。mapWithState是洗牌阶段,这意味着它将导致集群中的数据四处移动。如何影响mapWithState?每个条目(键值对)将被改组为特定的执行器。在给定时间从输入流中将同一个密钥后续处理到执行该密钥的那个执行者时,它将被重新混合到具有先前消息状态的内存映射中的节点。默认情况下,这是通过进行的HashPartitioner,它将哈希密钥,然后将其发送到持有状态的适当执行器,这就是为什么您需要仔细选择密钥的原因。

这意味着特定密钥的状态不会散布到整个群集中。它被分配给集群中的特定执行器,并且每次输入的数据都会根据密钥的哈希值保持回到原来的状态。