Spark Streaming揭秘 Day28

在集成开发环境中详解Spark Streaming的运行日志内幕

今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountOnline这个Demo。

启动过程

SparkStreaming启动是从如下日志开始:

16/06/16 21:26:44 INFO ReceiverTracker: Starting 1 receivers
16/06/16 21:26:44 INFO ReceiverTracker: ReceiverTracker started
16/06/16 21:26:44 INFO ReceiverTracker: Receiver 0 started

ReceiverTracker启动了一个receiver,完成启动

16/06/16 21:26:44 INFO ForEachDStream: metadataCleanupDelay = -1
16/06/16 21:26:44 INFO ShuffledDStream: metadataCleanupDelay = -1
16/06/16 21:26:44 INFO MappedDStream: metadataCleanupDelay = -1
16/06/16 21:26:44 INFO FlatMappedDStream: metadataCleanupDelay = -1
16/06/16 21:26:44 INFO SocketInputDStream: metadataCleanupDelay = -1

从日志的顺序,可以看出从Driver的角度讲,DStreamGraph是从后往前构造的,一直到最开始的地方SocketInputDStream

16/06/16 21:26:44 INFO SocketInputDStream: Slide time = 15000 ms
16/06/16 21:26:44 INFO SocketInputDStream: Storage level = StorageLevel(false, false, false, false, 1)
16/06/16 21:26:44 INFO SocketInputDStream: Checkpoint interval = null
16/06/16 21:26:44 INFO SocketInputDStream: Remember duration = 15000 ms
16/06/16 21:26:44 INFO SocketInputDStream: Initialized and validated org.apache.spark.streaming.dstream.SocketInputDStream@2d14d3a1
....
16/06/16 21:26:44 INFO ForEachDStream: Slide time = 15000 ms
16/06/16 21:26:44 INFO ForEachDStream: Storage level = StorageLevel(false, false, false, false, 1)
16/06/16 21:26:44 INFO ForEachDStream: Checkpoint interval = null
16/06/16 21:26:44 INFO ForEachDStream: Remember duration = 15000 ms
16/06/16 21:26:44 INFO ForEachDStream: Initialized and validated org.apache.spark.streaming.dstream.ForEachDStream@57481f9

这部分日志是在SparkStreaming运行前的实例化过程,构建起DStreamGraph中的对象。
Slide time和Remember duration分别表示Batch Duration和Remember Duration。
StorageLevel部分的日志有点问题,从源码看应该是StorageLevel(true, true, false, false, 2)。

16/06/16 21:26:44 INFO RecurringTimer: Started timer for JobGenerator at time 1466083605000
16/06/16 21:26:44 INFO JobGenerator: Started JobGenerator at 1466083605000 ms
16/06/16 21:26:44 INFO JobScheduler: Started JobScheduler
16/06/16 21:26:44 INFO StreamingContext: StreamingContext started

这里启动了定时器支持JobGenerator工作,JobGenerator与定期器结合能不断的产生Job,
定时器产生Job之后,放在线程中,通过JobScheduler提交给SparkCore来进行运行。

简单总结下:

  1. 在启动时会在Executor上启动receivers。
  2. 在这个基础上,因为要构造出DStreamGraph,会从后往前回溯链条,并从前往后构造对象。
  3. RecurringTimer、JobGenerator、JobScheduler是调度的核心。

至此,Driver和Receiver都启动完成。

接收数据

接下来是接收数据,定时器会根据我们设定的时间开始工作,这里是关键。

16/06/16 21:26:44 INFO RecurringTimer: Started timer for BlockGenerator at time 1466083605000
16/06/16 21:26:44 INFO BlockGenerator: Started BlockGenerator
16/06/16 21:26:44 INFO BlockGenerator: Started block pushing thread
启动线程存数据
16/06/16 21:26:44 INFO ReceiverTracker: Registered receiver for stream 0 from 192.168.1.120:51324
对Receiver进行注册

下面开始在Executor上执行,启动Receiver
16/06/16 21:26:44 INFO ReceiverSupervisorImpl: Starting receiver
16/06/16 21:26:44 INFO ReceiverSupervisorImpl: Called receiver onStart
16/06/16 21:26:44 INFO ReceiverSupervisorImpl: Waiting for receiver to be stopped
16/06/16 21:26:44 INFO SocketReceiver: Connecting to localhost:9999
16/06/16 21:26:44 INFO SocketReceiver: Connected to localhost:9999

下面是具体存储数据
16/06/16 21:26:45 INFO MemoryStore: Block input-0-1466083604800 stored as bytes in memory (estimated size 10.0 B, free 45.1 KB)
16/06/16 21:26:45 INFO BlockManagerInfo: Added input-0-1466083604800 in memory on localhost:51326 (size: 10.0 B, free: 1140.4 MB)
16/06/16 21:26:45 WARN BlockManager: Block input-0-1466083604800 replicated to only 0 peer(s) instead of 1 peers
16/06/16 21:26:45 INFO BlockGenerator: Pushed block input-0-1466083604800

下面回到Driver,产生了Job
16/06/16 21:26:45 INFO JobScheduler: Added jobs for time 1466083605000 ms
16/06/16 21:26:45 INFO JobScheduler: Starting job streaming job 1466083605000 ms.0 from job set of time 1466083605000 ms

再看下执行完成后日志:
16/06/16 21:26:45 INFO JobScheduler: Finished job streaming job 1466083605000 ms.0 from job set of time 1466083605000 ms
16/06/16 21:26:45 INFO JobScheduler: Total delay: 0.188 s for time 1466083605000 ms (execution: 0.127 s)
这里说明了延时时间。

清理数据

16/06/16 21:26:45 INFO ReceivedBlockTracker: Deleting batches ArrayBuffer()
16/06/16 21:26:45 INFO InputInfoTracker: remove old batch metadata:

之后是删除数据,我们发现,执行清理RDD的动作是有点滞后的,差了一个Batch Duration,也就是说在下一个Batch Duration的时候,清理前一次的。
16/06/16 21:27:00 INFO ShuffledRDD: Removing RDD 4 from persistence list
16/06/16 21:27:00 INFO MapPartitionsRDD: Removing RDD 3 from persistence list
16/06/16 21:27:00 INFO MapPartitionsRDD: Removing RDD 2 from persistence list
16/06/16 21:27:00 INFO BlockRDD: Removing RDD 1 from persistence list
16/06/16 21:27:00 INFO BlockManager: Removing RDD 4
16/06/16 21:27:00 INFO BlockManager: Removing RDD 3
16/06/16 21:27:00 INFO BlockManager: Removing RDD 2
16/06/16 21:27:00 INFO BlockManager: Removing RDD 1
16/06/16 21:27:00 INFO SocketInputDStream: Removing blocks of RDD BlockRDD[1] at socketTextStream at WordCountOnline.java:58 of time 1466083620000 ms
完成数据删除后,是删除元数据。
16/06/16 21:27:00 INFO ReceivedBlockTracker: Deleting batches ArrayBuffer()
16/06/16 21:27:00 INFO InputInfoTracker: remove old batch metadata:

想补充一点的是,这个清理策略会和rememberDuration(window操作时使用)的设置有关,而rememberDuration默认和BatchDuration是一致的,代码也可以印证这点。

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

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

Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕的更多相关文章

  1. 不允许用(a+b)/2这种方式求两个数的均值;如下程序在Linux和32位集成开发环境中运行

    #define MAX(a,b) ((a)>(b)?(a):(b)) #include<stdio.h> int main() { int a = 10; int b = 20; i ...

  2. 搭建Android开发环境附图详解+模拟器安装(JDK+Eclipse+SDK+ADT)

    ——搭建android开发环境的方式有多种,比如:JDK+Eclipse+SDK+ADT或者JDK+Eclipse+捆绑好的AndroidSDK或者Android Studio. Google 决定将 ...

  3. eclipseIDE for javaee developers 开发环境搭建详解图文

    使用eclipse真的有年头了,相信java程序员没有不知道它的,最近在给团队中新来的应届生做指导,专门讲解了一下Eclipse开发环境的搭建过程,一是帮助他们尽快的熟悉IDE的使用,二也是保证团队开 ...

  4. web自动化开发环境配置详解

    1.安装 nodejs Grunt和所有grunt插件都是基于nodejs来运行的, https://nodejs.org/ 安装完成之后在终端 node -v 查看安装版本 2.安装 grunt-C ...

  5. AngularJS + CoffeeScript 前端开发环境配置详解

    AngularJS 号称 '第一框架' ('The first framework') 确实是名不虚传.由其从jQuery中完全转入AngularJS后就有无法离开他的感觉了.虽然AngularJS的 ...

  6. Java开发环境搭建详解

    一.jdk安装与配置 jdk7于3月份刚刚发布,目前eclipse的最新版本中还没有提供对jdk7的编译支持,所以我们只下载jdk6. 下载地址:http://download.java.net/jd ...

  7. weex和vue开发环境配置详解(配置系统变量等等)

    本文详细讲解如何搭建weex和vue开发环境 安装java 现在java安装包,网上的安装包都是国外的,很难下载下来 就用这个链接下载,亲测无毒,http://www.wmzhe.com/soft-3 ...

  8. 2-5 Flutter开发环境与Android开发环境设置详解(Windows)

    第二个是国内服务器的网址 andoid stuido的一些使用的说明文档 https://developer.android.google.cn/studio/intro 安装Flutter Dart ...

  9. Java 集成开发环境的介绍及下载

    集成开发环境(integrated development environment,JDE) 之前成功运行了Java小程序是经历了先在笔记本中编写源代码,然后通过命令行运行打开javac编译源文件, ...

随机推荐

  1. BootStrap2学习日记8---表单

    <form> <label for="username">用户名</label> <input id="username&quo ...

  2. cocos2d-x中使用Http

    一.如何使用 //发送接口 void CmdHelper::postRequest(const char* cmdTag, const char* url, const char* postData, ...

  3. [OM]Dropship SO(直发/直运订单)的流程

    What are the advantages of Drop Shipment Orders? These are the benefits: No inventory is required Re ...

  4. mysql 5.7 root password 过期

    重新修改root密码 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); ALTER USER 'root'@localhost' P ...

  5. codevs4373 窗口==poj2823 Sliding Window

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 53676   Accepted: 15399 ...

  6. Ajax具体使用

    Ajax在注册页面经常使用,当注册用户是用户名必须唯一时,要使用ajax获取表单中你输入的内容, 然后将这个数据利用XMLHttpRequest对象请求一个php文件,这个php文件接收到信息,查询数 ...

  7. Networking - IPv4 报文格式

    每个 IP 数据报都以一个 IP 报头开始.源计算机的 TCP/IP 软件构造这个 IP 报头,目的计算机的 TCP/IP 软件利用 IP 报头中封装的信息处理数据.IP 报头包含大量信息,包括源 I ...

  8. Git sparse checkout

    Git的sparse checkout在clone项目仓库时只clone指定路径下的信息. 步骤如下: (1) mkdir yourdir(2) cd yourdir(3) git init(4) g ...

  9. Linux下c函数dlopen实现加载动态库so文件代码举例

    dlopen()是一个强大的库函数.该函数将打开一个新库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了. ...

  10. Error 1406

    在安装office2010时出现错误提示:Error 1406 解决办法:在注册表中搜索“Image File Execution Options”,设置其权限:添加当前用户并授予所有权限,有时需要授 ...