Spark Streaming:执行者与自定义接收者的数量

Posted

技术标签:

【中文标题】Spark Streaming:执行者与自定义接收者的数量【英文标题】:Spark Streaming : number of executor vs Custom Receiver 【发布时间】:2015-11-05 21:36:24 【问题描述】:

为什么 Spark 有一个工作节点和四个执行程序,每个执行程序只有一个核心,无法处理 自定义接收器 ??

如果执行器在 Spark Streaming 中具有单核,那么不通过自定义接收器处理传入数据的原因是什么?

我在独立模式下运行 Spark。我在 Spark Streaming 应用程序的自定义接收器中获取数据。我的笔记本电脑有 4 个内核。

master="spark://lappi:7077"

$spark_path/bin/spark-submit --executor-cores 1 --total-executor-cores 4 \ --class“我的.class.path.App”\ --master $master

【问题讨论】:

问题不够清楚,请分享具体代码、运行方法和日志。 【参考方案1】:

您指出您的 (1) 执行程序应该为 Spark 保留 1 个核心,这意味着您使用 4 个核心中的 1 个。参数total-executor-cores 永远不会受到限制,因为它限制了集群上为 Spark 保留的内核总数,根据您之前的设置,即 1。

接收器使用一个线程来使用可用的数据,这意味着您没有剩余的核心来处理数据。所有这些都在文档中进行了解释: https://spark.apache.org/docs/latest/streaming-programming-guide.html#input-dstreams-and-receivers

您想将 executor-cores 参数设置为 4。

【讨论】:

如果我指定 $spark_path/bin/spark-submit --executor-cores 4 --total-executor-cores 4 ,那么 spark 将创建一个包含所有4个核心。这意味着,在这种情况下,Spark 也将无法处理 4 个自定义接收器的传入数据流。 为什么你会有 4 个自定义接收器?每个 DStream 一个接收器,而不是每个核心一个接收器。 我听从了你的指示。

以上是关于Spark Streaming:执行者与自定义接收者的数量的主要内容,如果未能解决你的问题,请参考以下文章

Spark Streaming 数据接收过程

使用自定义接收器从数据集中接收流数据 [Spark Streaming]

如何使用spark streaming接收kafka中发送的自定义对象

Spark Streaming运行流程及源码解析

Spark Streaming:微批处理并行执行

spark streaming 接收kafka消息之一 -- 两种接收方式