我有一个 Spark Structured Streaming Job,它从 S3 读取数据,转换数据,然后将其存储到一个 S3 接收器和一个 Elasticsearch 接收器。

目前,我正在做 readStream 一次,然后 writeStream.format("").start() 两次。这样做时,Spark 似乎从 S3 源读取数据两次,每个接收器一次。

是否有更有效的方法来写入同一管道中的多个接收器?

最佳答案



您实际上创建了两个单独的流查询。 load 部分用于描述第一个(也是唯一一个)流媒体源。这在执行方面没有任何作用。



这是描述 Spark Structured Streaming 的查询如何工作的最正确方法。接收器的数量对应于查询的数量,因为一个流式查询可以恰好有一个流式接收器(请参阅位于任何流式查询后面的 StreamExecution)。

您还可以检查线程数(使用 jconsole 或类似方法),因为结构化流式处理每个流式查询使用一个 microBatchThread 线程(请参阅 StreamExecution )。



在 Spark Structured Streaming 的当前设计中,可能是 而不是

关于apache-spark - 如何一次读取流数据集并输出到多个接收器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46295205/

10-16 00:56