首页 > 解决方案 > 尽管缓存了输入 df,但 Spark 流式传输性能问题

问题描述

我正在使用火花 dstream 方法。我有一个输入 RDD,我一读到它就缓存它。

val cachedDf = rdd
             .repartition(200)
             .persist(StorageLevel.MEMORY_AND_DISK).toDF()

我还看到输入 rdd 被缓存在storage我的 spark 应用程序 UI 的选项卡中。我的卡夫卡主题有15 partitions.

但是,在缓存数据帧上的每个操作之后,我看到 15 个任务在我的应用程序中多次运行(不仅仅是在第一个操作之后,在每个操作之后),这会降低我的应用程序在较长时间内运行的速度。

这些任务运行 2-3 分钟,并随着每批处理的消息数量的增加而增加。

我不明白的是,如果我正在重新分区我的数据帧并立即将其持久化,那么运行的 15 个任务是什么?

其他每个主任务都有 200 个子任务,这 15 个子任务中读取的是什么?

我的应用程序是否再次从 kafka 读取?

标签: apache-sparkapache-spark-sqlspark-streamingapache-spark-2.0

解决方案


推荐阅读