Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)

Spark Streaming揭秘 Day31

集群模式下SparkStreaming日志分析(续)

今天延续昨天的内容,主要对为什么一个处理会分解成多个Job执行进行解析。

让我们跟踪下Job调用过程。

从框架代码开始

我们从生成Job开始,generateJobs方法产生了Job,之后,提交了一个JobSet来进行处理。
Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)

JobSet会根据输出情况来确定Job数量,有多少个输出就有多少个Job,在我们的演示代码中,只有一个outputDStream,所以job是一个。jobExecutor 是个线程池,一次只能运行一个任务。
Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)

JobHandler是个Runnable对象,其中调用了run方法,而run方法中,就是在业务代码func外,封装了一个Try结构,主要防止程序运行异常时退出。
Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)
Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)

真相

到这里为止,我们并没有发现多个Job的产生,而代码已经进入了业务代码部分,也就是说这个机制和SparkStreaming没有任何关系!!!

通过跟踪业务代码,我们可以锁定了是在这段代码中产生了多个Job,其中,只有rdd.take操作会在集群中运行,所以多个Job是在其中产生的。
Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)

通过阅读,我们发现take的机制操作是先扫描一个分区,如果没有足够数据的话,会评估并进行下一次扫描,一次最多扫描4个分区。也就是说每一次扫描都会新产生一个Job!!!
Spark Streaming揭秘 Day31 集群模式下SparkStreaming日志分析(续)

欲知后事如何,且听下回分解!

DT大数据每天晚上20:00YY频道现场授课频道68917580

上一篇:原生js动态添加style,添加样式


下一篇:SSH框架中 Spring设置定时器 Quartz