您如何设置具有不同批次持续时间的多个 Spark Streaming 作业?
How do you setup multiple Spark Streaming jobs with different batch durations?
我们正处于转换大型企业当前数据架构的开始阶段,我目前正在构建一个 Spark Streaming ETL 框架,我们将在其中将所有源连接到目的地(source/destinations 可能是Kafka 主题、Flume、HDFS 等)通过转换。这看起来像:
SparkStreamingEtlManager.addEtl(Source, Transformation*, Destination)
SparkStreamingEtlManager.streamEtl()
streamingContext.start()
假设是,因为我们应该只有一个 SparkContext,所以我们将在一个 application/jar 中部署所有 ETL 管道。
问题在于 batchDuration 是上下文本身的属性,而不是 ReceiverInputDStream 的属性(这是为什么?)。因此,我们是否需要拥有多个 Spark 集群,或者允许多个 SparkContext 并部署多个应用程序?有没有其他方法可以控制每个接收器的批次持续时间?
如果我的任何假设幼稚或需要改写,请告诉我。谢谢!
根据我的经验,不同的流有不同的调整要求。吞吐量、延迟、接收端的容量、要遵守的 SLA 等。
为了满足这种多样性,我们需要配置每个 Spark Streaming 作业来解决上述特殊性。因此,不仅是批处理间隔,还有内存和 cpu、数据分区、执行节点数量(当负载受网络限制时)等资源。
由此可见,每个 Spark Streaming 作业都成为 Spark 集群上的一个单独作业部署。这也将允许相互独立地监视和管理单独的管道,并有助于进一步微调流程。
在我们的例子中,我们使用 Mesos + Marathon 来管理我们的 Spark Streaming 作业集 运行 3600x24x7。
我们正处于转换大型企业当前数据架构的开始阶段,我目前正在构建一个 Spark Streaming ETL 框架,我们将在其中将所有源连接到目的地(source/destinations 可能是Kafka 主题、Flume、HDFS 等)通过转换。这看起来像:
SparkStreamingEtlManager.addEtl(Source, Transformation*, Destination)
SparkStreamingEtlManager.streamEtl()
streamingContext.start()
假设是,因为我们应该只有一个 SparkContext,所以我们将在一个 application/jar 中部署所有 ETL 管道。
问题在于 batchDuration 是上下文本身的属性,而不是 ReceiverInputDStream 的属性(这是为什么?)。因此,我们是否需要拥有多个 Spark 集群,或者允许多个 SparkContext 并部署多个应用程序?有没有其他方法可以控制每个接收器的批次持续时间?
如果我的任何假设幼稚或需要改写,请告诉我。谢谢!
根据我的经验,不同的流有不同的调整要求。吞吐量、延迟、接收端的容量、要遵守的 SLA 等。
为了满足这种多样性,我们需要配置每个 Spark Streaming 作业来解决上述特殊性。因此,不仅是批处理间隔,还有内存和 cpu、数据分区、执行节点数量(当负载受网络限制时)等资源。
由此可见,每个 Spark Streaming 作业都成为 Spark 集群上的一个单独作业部署。这也将允许相互独立地监视和管理单独的管道,并有助于进一步微调流程。
在我们的例子中,我们使用 Mesos + Marathon 来管理我们的 Spark Streaming 作业集 运行 3600x24x7。