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


    Spark Streaming揭秘 Day31

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

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

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

    从框架代码开始

    我们从生成Job开始,generateJobs方法产生了Job,之后,提交了一个JobSet来进行处理。
    Snip20160622_51

    JobSet会根据输出情况来确定Job数量,有多少个输出就有多少个Job,在我们的演示代码中,只有一个outputDStream,所以job是一个。jobExecutor 是个线程池,一次只能运行一个任务。
    Snip20160622_52

    JobHandler是个Runnable对象,其中调用了run方法,而run方法中,就是在业务代码func外,封装了一个Try结构,主要防止程序运行异常时退出。
    Snip20160622_53
    Snip20160622_54

    真相

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

    通过跟踪业务代码,我们可以锁定了是在这段代码中产生了多个Job,其中,只有rdd.take操作会在集群中运行,所以多个Job是在其中产生的。
    Snip20160622_56

    通过阅读,我们发现take的机制操作是先扫描一个分区,如果没有足够数据的话,会评估并进行下一次扫描,一次最多扫描4个分区。也就是说每一次扫描都会新产生一个Job!!!
    Snip20160622_57

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

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

  • 相关阅读:
    Oracle 删除表中的一整列
    如何查看数据库中表的创建时间
    Oracle数据库的简单数据恢复
    分治和动态规划
    深入浅出 妙用Javascript中apply、call、bind
    CSS3 Background-size
    WampServer 2.5设置外网访问/局域网手机访问(403 Forbidden错误解决方法)
    js中apply方法的使用
    Leetcode No.1 Two Sum
    Python的sys.argv使用说明
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5608356.html
Copyright © 2020-2023  润新知