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. 实验-hadoop开发环境部署

    hadoop-0.20.2自带了eclipse插件,比如1.0.0和2.2.0就没有 1.windows下 1)把插件hadoop-0.20.2-eclipse-plugin.jar复制到eclips ...

  2. css笔记11:选择器练习

    1. (1)exam1.css文件: .s1 { font-size: 50px; color: blue; } .s2 { backgoround:gray; font-style: italic; ...

  3. css笔记07:通配符选择器

    通配符选择器: * { margin:10px ;//默认四个位置参数全为零 margin-top:10px;//分别设置四个参数 margin-left:10px; margin-right:0px ...

  4. WordPress搬家全攻略

    零.前言 我自己有两个博客,一个是你看到的这个,专门用来写我的技术文章:另一个是我自己的心情记录博客,专门记录和技术无关的东西. 之前我的心情记录博客一直放在openshift上面,这是redhat官 ...

  5. poj 3648 2-SAT问题

    思路:将每对夫妻看成是对立状态,每个不正常关系都是一个矛盾,按2-SAT的方式建边.最后建一条新娘到新郎的边.具体看注释 #include<iostream> #include<cs ...

  6. c#中网络异常的处理办法

    加入try catch来判断,catch使用的WebException来处理 try { var request = WebRequest.Create(uri); using (var respon ...

  7. 三种方式得到LayoutInflater

    LayoutInflaterinflater=LayoutInflater.from(this); LayoutInflaterinflater=getLayoutInflater(); Layout ...

  8. CDH离线安装之安装包下载地址

    cloudermanager安装包地址:http://archive.cloudera.com/cm5/cm/5/cloudera-manager-el6-cm5.3.0_x86_64.tar.gz, ...

  9. JavaScript之模拟评星打分

    <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...

  10. 让.NET程序会说话

    在开发过程中需要用到让程序自动播放语音,如果是一个一个录则太麻烦了,在开发过程中发现.NET已经自带了该功能 Type type = Type.GetTypeFromProgID("SAPI ...