Spark:火花中的接收器是否成为瓶颈?

时间:2016-03-14 06:09:49

标签: apache-spark spark-streaming

我想了解接收器在Spark Streaming中的工作原理。根据我的理解,将有一个接收器任务在执行器中运行,它们收集数据并保存为RDD。调用start()时,接收器开始读取。需要澄清以下内容。

  1. Spark Streaming作业启动了多少个接收器?多个还是一个?
  2. 接收器是实现为基于推送还是基于拉?
  3. 在任何情况下接收器都会成为瓶颈吗?
  4. 要实现并行度,应在工作节点之间对数据进行分区。因此,对于流数据,数据如何在节点之间分配。
  5. 如果基于批处理时间间隔在新节点上形成新的RDD,那么在提交作业后,SparkContext如何将转换函数序列化到节点?
  6. 接收器的启动量是否可以通过参数控制?
  7. 想知道Spark Streaming和接收器的解剖结构。

1 个答案:

答案 0 :(得分:7)

我将根据我对Kafka接收器的经验来回答,这看起来或多或少与Kinesis中的相似。

  

Spark Streaming作业启动了多少个接收器?多个或一个。

您打开的每个接收器都是单个连接。在Kafka中,如果要同时从多个分区读取,则需要打开多个接收器,并将它们组合在一起。

  

接收器是实现为基于推送还是基于拉?

拉​​。在Spark Streaming中,每个批处理间隔(在创建 var DiscussionsResource = $resource('https://jsbin.com/my-articles', {}, { post: { method: 'POST', params: {'asdsa':'sss'}, isArray: false, headers: {Authorization: "Token 5b4447996855da6de109226857ec981dfe2c50a2"}, transformResponse: function(defaults) { defaults = angular.fromJson(defaults); console.debug(' -> discussion has been created ', defaults); return defaults; } } }); DiscussionsResource.save({}); 时指定)从Kafka中提取数据。

  

在任何情况下接收器都会成为瓶颈吗?

广泛的问题。这取决于。如果您的批处理间隔很长并且您只有一个接收器,那么您的待办事项可能会开始填充。它主要是跟踪和错误,直到您在流媒体工作中达到最佳平衡。

  

要实现并行度,应在工作节点之间对数据进行分区。因此,对于流数据,数据如何在节点之间分配。

如前所述,您可以通过打开基础数据源的多个接收器来创建并发。此外,在读取数据后,可以使用标准Spark机制对数据进行重新分区。

  

如果基于批处理时间间隔在新节点上形成新的RDD,SparkContext如何在提交作业后将转换函数序列化到节点。

通过使用选择的串行器并通过线路发送数据,它在阶段中序列化每个任务的方式相同。我不确定我明白你的意思。

  

接收器的启动量是否可以通过参数控制?

是的,您可以使用配置参数来确定您打开的接收器数量。这样的代码可能如下所示:

StreamingContext