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. centos中samba配置后始终连不上的绝招

    奶奶的,按照网上的办法改了/etc/samba/smb.conf配置文件,结果在win7里面死活连不上,后来发现是防火墙的问题. 有两个命令必须要执行: 1.将SELIUNX设置成disabled或者 ...

  2. 小白日记43:kali渗透测试之Web渗透-SqlMap自动注入(一)-sqlmap参数详解TARGET

    SqlMap自动注入(一) sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞[动态页面中get/post参数.cookie.HTTP头].它由Python语言开发 ...

  3. Turn the pokers

    Problem Description During summer vacation,Alice stay at home for a long time, with nothing to do. S ...

  4. Java字符流和字节流对文件操作

    记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后自己查询.Java的IO流分为字符流(Reader,Writ ...

  5. python-其他常用模块

    本节大纲: 模块介绍 time &datetime模块 random shutil shelve xml处理 yaml处理 configparser hashlib subprocess lo ...

  6. cocos2d-x, protobuf, no config.h, #error "No suitable threading library available."

    在用cocos2d-x3.2 + protobuf编译Android项目的时候,protobuf出现了两个问题: 1. 首先是config.h找不到,查阅自后说是通过命令或工具生成的,里面的内容根据不 ...

  7. AutoCAD 2014 win 32bit破解版

    AutoCAD 2014 win 32bit破解版 百度云盘:http://pan.baidu.com/s/1nu2u6Hr

  8. (转)linuxmint,ubuntu 下修改guake宽度方法

    之前在网上找到修改guake.py的方式,但是我一直没能找到guake.py的文件,弄的我纠结,后来找到这个文章,这个确实是有效果的 Ubuntu12.04上Guake在唤出的时候滚动条会消失,主要原 ...

  9. Ehcache(2.9.x) - API Developer Guide, Cache Loaders

    About Cache Loaders A CacheLoader is an interface that specifies load() and loadAll() methods with a ...

  10. Linux 命令 - cp: 拷贝文件和目录

    命令格式 cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY ...