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

Bre*_*dan 5 hadoop apache-spark spark-streaming

我们正处于转变大型企业当前数据架构的开始阶段,我目前正在构建一个Spark Streaming ETL框架,我们将所有源连接到目的地(源/目的地可能是Kafka主题,Flume,HDFS,等)通过转换.这看起来像是这样的:

SparkStreamingEtlManager.addEtl(Source, Transformation*, Destination) SparkStreamingEtlManager.streamEtl() streamingContext.start()

假设是,因为我们应该只有一个SparkContext,所以我们将在一个应用程序/ jar中部署所有ETL管道.

这个问题是batchDuration是上下文本身的属性而不是ReceiverInputDStream的属性(这是为什么?).我们是否需要拥有多个Spark群集,或者允许多个SparkContexts并部署多个应用程序?有没有其他方法可以控制每个接收器的批处理持续时间?

如果我的任何假设是天真的或需要改写,请告诉我.谢谢!

maa*_*asg 3

根据我的经验,不同的流有不同的调优要求。吞吐量、延迟、接收方的容量、要遵守的 SLA 等。

为了满足这种多样性,我们需要配置每个 Spark Streaming 作业来解决上述特殊性。因此,不仅是批处理间隔,还包括内存和 CPU、数据分区、执行节点数量等资源(当负载受网络限制时)。

因此,每个 Spark Streaming 作业都成为 Spark 集群上的单独作业部署。这还允许对彼此独立的单独管道进行监控和管理,并有助于进一步微调流程。

在我们的示例中,我们使用 Mesos + Marathon 来管理运行 3600x24x7 的 Spark Streaming 作业集。