我想了解接收器在Spark Streaming中的工作原理。根据我的理解,将有一个接收器任务在执行器中运行,它们收集数据并保存为RDD。调用start()时,接收器开始读取。需要澄清以下内容。
想知道Spark Streaming和接收器的解剖结构。
答案 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