Spark Streaming 如何在驱动程序和执行程序之间调度映射任务?

Posted

技术标签:

【中文标题】Spark Streaming 如何在驱动程序和执行程序之间调度映射任务?【英文标题】:How does Spark Streaming schedule map tasks between driver and executor? 【发布时间】:2018-07-06 17:30:16 【问题描述】:

我使用 Apache Spark 2.1 和 Apache Kafka 0.9。

我有一个 Spark Streaming 应用程序,它使用 20 个执行程序运行,并从 Kafka 读取数据,该 Kafka 具有 20 个分区。此 Spark 应用程序仅执行 mapflatMap 操作。

Spark 应用程序的作用如下:

    从 kafka 创建一个以 15 秒为间隔的直接流 执行数据验证 使用仅映射的 Drool 执行转换。没有减少转换 使用 check-and-put 写入 HBase

我想知道executor和partition是1-1映射的,是每个executor独立执行上述步骤并独立写入HBase,还是数据会在多个executor中打乱,驱动和executor之间进行操作?

【问题讨论】:

【参考方案1】:

Spark 作业提交只能在 executor 上执行的任务。换句话说,执行者是唯一可以执行任务的地方。司机要协调任务并相应地安排它们。

话虽如此,我想说的是:

每个执行者会独立执行上述步骤并独立写入HBase


顺便说一句,答案与使用的 Spark 版本无关。一直都是这样(看不出有什么理由会改变,甚至应该改变)。

【讨论】:

以上是关于Spark Streaming 如何在驱动程序和执行程序之间调度映射任务?的主要内容,如果未能解决你的问题,请参考以下文章

Spark Streaming 如何在驱动程序和执行程序之间调度映射任务?

如何在idea里面直接运行spark streaming程序

如何优雅地终止正在运行的Spark Streaming程序

如何在 Spark Streaming 中自动重启故障节点?

Spark Streaming Driver 和 App 工作文件清理

Spark Streaming:如何定期刷新缓存的 RDD?