如何设置具有不同批处理持续时间的多个spark流作业?

6tr1vspr  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(417)

我们正处于转换大型企业当前数据体系结构的初始阶段,我正在构建spark流式etl框架,在该框架中,我们将通过转换将所有源连接到目标(源/目标可以是kafka主题、flume、hdfs等)。这看起来像: SparkStreamingEtlManager.addEtl(Source, Transformation*, Destination) SparkStreamingEtlManager.streamEtl() streamingContext.start() 假设是,因为我们应该只有一个sparkcontext,所以我们将在一个application/jar中部署所有etl管道。
问题是batchduration是上下文本身的属性,而不是receiverinputdstream的属性(为什么会这样?)。因此,我们需要有多个spark集群,还是允许多个sparkContext并部署多个应用程序?是否有其他方法来控制每个接收器的批处理持续时间?
请让我知道,如果我的任何假设是幼稚的或需要重新措辞。谢谢!

qvk1mo1f

qvk1mo1f1#

根据我的经验,不同的流有不同的调优需求。吞吐量、延迟、接收方的容量、需要遵守的sla等。
为了迎合这种多样性,我们需要配置每个spark流作业来解决上述特殊性。因此,不仅是批处理间隔,还包括内存和cpu、数据分区等资源,以及执行节点的#(当负载绑定到网络时)。
因此,每个spark流作业都成为spark集群上的一个单独作业部署。这还将允许对彼此独立的单独管道进行监测和管理,并有助于进一步微调流程。
在我们的例子中,我们使用mesos+marathon来管理一组运行3600x24x7的spark流作业。

相关问题