Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 其中有状态操作的状态保存在Spark Cluster中_Apache Spark_Spark Structured Streaming - Fatal编程技术网

Apache spark 其中有状态操作的状态保存在Spark Cluster中

Apache spark 其中有状态操作的状态保存在Spark Cluster中,apache-spark,spark-structured-streaming,Apache Spark,Spark Structured Streaming,我曾尝试使用Spark结构化流媒体的“flatMapGroupsWithState”,这个想法很有趣,但现在我问自己,由于Spark的分布式特性,这些状态信息保存在哪里 假设我有一个集群10,那么所有10个集群是否都会共享存储负载以保留此状态信息,或者集群中的一个节点可能会过载 我在某个地方读到,状态对象必须是Java可序列化的,考虑到Java序列化效率极低,有没有一种方法可以自定义它以使用Protobuffer或Avro等 谢谢你的回答 此状态信息保存在哪里 关于遗嘱执行人 默认情况下,有20

我曾尝试使用Spark结构化流媒体的“flatMapGroupsWithState”,这个想法很有趣,但现在我问自己,由于Spark的分布式特性,这些状态信息保存在哪里

假设我有一个集群10,那么所有10个集群是否都会共享存储负载以保留此状态信息,或者集群中的一个节点可能会过载

我在某个地方读到,状态对象必须是Java可序列化的,考虑到Java序列化效率极低,有没有一种方法可以自定义它以使用Protobuffer或Avro等

谢谢你的回答

此状态信息保存在哪里

关于遗嘱执行人

默认情况下,有200个状态存储,因为有分区。您可以使用
spark.sql.shuffle.partitions
configuration属性更改它。这样,分区的数量就等于状态存储的数量。这也意味着,无论您使用什么作为分组键,都将在分区之间洗牌您的数据,并且(很可能)一些可用的状态存储将完全没有状态(为空)

假设我有一个集群10,那么所有10个集群是否都会共享存储负载以保留此状态信息,或者集群中的一个节点可能会过载

是的,但它是由分组键和分区控制的,这是Spark开发人员编写的代码

我在某个地方读到,鉴于Java序列化效率极低,状态对象必须是Java可序列化的

无需考虑序列化,因为状态存储是任务的本地存储(在执行器上)

,有没有一种方法可以自定义它以使用Protobuffer或Avro等

当然。您应该编写自己的状态存储实现。默认情况下,只有一个
HDFSBackedStateStoreProvider
使用
spark.sql.streaming.stateStore.providerClass
内部配置属性进行配置