Spark Streaming应用也是Spark应用,Spark Streaming生成的DStream最终也是会转化成RDD,然后进行RDD的计算,所以Spark Streaming最终的计算是RDD的计算,那么Spark Streaming的原理当然也包含了Spark应用通用的原理。Spark Streaming作为实时计算的技术,和其他的实时计算技术(比如Storm)不太一样,我们可以将Spark Streaming理解为micro-batch模式的实时计算,也就是说Spark Streaming本质是批处理,就是这个批处理之间的时间间隔是非常的小,这个时间间隔最小是500ms,基本上可以适合企业中80%的实时计算场景。
在实时计算的步骤中,Spark Streaming当然也包含了实时接收数据过程、数据的transformation过程以及数据结果输出过程三个最基本的过程。Spark Streaming在数据接收的部分包括基于Receiver模式以及Direct模式(Kafka Direct),接下来详细的讲解下基于Receiver模式的Spark Streaming应用的原理。
当我们使用spark-submit提交一个Spark Streaming应用的时候,向集群申请到资源并且初始化需要的Executor后,Spark Streaming应用的执行过程包括两部分:一个是StreamingContext的初始化,一个是Spark Streaming应用对Receiver实时接收到的数据的实时计算。以下分别介绍
StreamingContext的初始化:
StreamingContext的初始化的时候,会初始化DStreamGraph和JobScheduler两个模块,其中DStreamGraph包含了InputDStream和OutputDStream两个DStream,InputDStream中包含了Receiver信息,OutputDStream包含了最终结果的输出信息,这两个DStream之间就是一系列的业务Transformations。JobScheduler中包含了JobGenerator和ReceiverTracker,JobGenerator中有一个定时器,用于定时的触发并生成批次定时任务,ReceiverTracker用于跟踪Receiver接收的数据,当ReceiverTracker初始化的时候会从DStreamGraph中InputDStream拿到Receiver,然后在一个Executor上启动这个Receiver,至此StreamingContext的初始化完成
Spark Streaming应用对Receiver实时接收到的数据的实时计算
Receiver将实时接收到的数据存储在Executor的内存中,由BlockManager管理,存储完数据后会告诉ReceiverTracker数据块存储的位置,方便ReceiverTracker跟踪定位;当我们设定的batch interval时间到了的时候,JobGenerator就会告诉ReceiverTracker定位所有这个batch interval收集到的数据,并且生成一个定时任务,这个定时任务就会根据ReceiverTracker定位到的所有的数据块生成一个BlockRDD(这个是RDD链中的第一个需要执行的),并且根据InputDStream和OutputDStream两个DStream之间的一系列的业务Transformations生成RDD链,最后生成RDD DAG,进行RDD的计算任务的提交,这个时候就来到了Spark RDD的任务提交的原理的,可以参考Spark Core中的内容

Spark Streaming应用中每一个batch interval中接收到的数据组成的RDD有多少个分区。
BlockRDD的分区数(或者说并行度) = batch interval / block interval
其中batch interval就是我们初始化StreamingContext的时候指定的批处理时间间隔
block interval是指接收到的数据生成数据块的时间间隔,这个时间间隔可以通过spark.streaming.blockInterval来配置,默认是200ms,这个值最小可以设置为50ms

SparkStreaming运行原理的更多相关文章

  1. SparkStreaming 运行原理与核心概念

    SparkStreaming 运行原理 sparkstreaming 的高层抽象DStream Dstream与RDD的关系 Batch duration

  2. Spark Streaming概念学习系列之SparkStreaming运行原理

    SparkStreaming运行原理 Spark Streaming不断的从数据源获取数据(连续的数据流),并将这些数据按照周期划分为batch. Spark Streaming将每个batch的数据 ...

  3. Flink 集群运行原理兼部署及Yarn运行模式深入剖析

    1 Flink的前世今生(生态很重要) 原文:https://blog.csdn.net/shenshouniu/article/details/84439459 很多人可能都是在 2015 年才听到 ...

  4. iis6.0与asp.net的运行原理

    这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客,学的有点零零散散,花了好长时间做了一个小结(虽然文字不多,但也花了不少时间呢),鄙人不才,难免有理解不道的地方,还望前辈们不吝赐教 ...

  5. ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)

    ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...

  6. ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行

    ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...

  7. 场景9 深入RAC运行原理

    场景9 深入RAC运行原理 OPS(Oracle Parallel Server)通过磁盘的节点判定数据是否最新   —>   Data Guard   —>    RAC(Real Ap ...

  8. Camel运行原理分析

    Camel运行原理分析 以一个简单的例子说明一下camel的运行原理,例子本身很简单,目的就是将一个目录下的文件搬运到另一个文件夹,处理器只是将文件(限于文本文件)的内容打印到控制台,首先代码如下: ...

  9. Web程序的运行原理及流程(一)

    自己做Web程序的开发也有两年多了 从最开始跟风学框架  到第一用上框架的欣喜若狂 我相信每个程序员都是这样过来的 在大学学习一门语言 学会后往往很想做一个实际的项目出来  我当时第一次做WEB项目看 ...

随机推荐

  1. 【Appium + Python3】之安卓8.1,使用xpath定位不到元素

    desired_cap = { "deviceName":"vivo", # 真机名称 "platformName":"andro ...

  2. 洛谷P3957:跳房子——题解

    https://www.luogu.org/problem/P3957 沉迷普及组题无法自拔. 显然二分答案,然后里面套个dp,$f[i]$表示跳到第$i$个格子的最大得分,复杂度$O(n^2logn ...

  3. C语言创建链表

    一.链表中结点的存储 链表的结点左边一部分是存放的数据,右边一部分是后继指针指向下一个结点的地址.C语言中通常定义一个结构体类型来存储一个结点,如下: struct node { int data; ...

  4. SQL Server 中获取一个表的字段信息

    直接贴代码了: SELECT sysobjects.name AS TableName, syscolumns.Id AS TableId, syscolumns.name AS DbColumnNa ...

  5. web项目文档总览

    一个web项目的文档应该包含哪些部分 一.规范文档1.ui 设计规范2.js.css.html 编码规范3.后台程序编码规范4.文件层级及模块编码规范二.技术架构评审三.运行环境部署细则四.研发流程: ...

  6. 推送一个docker 使用阿里docker hub

    阿里docker hub 地址 打开容器镜像服务页https://cr.console.aliyun.com/cn-qingdao/namespaces 这个是我的私有库 配置加速 我这边用的也是阿里 ...

  7. kafka集群安全化之启用kerberos与acl

    一.背景 在我们部署完kafka之后,虽然我们已经可以“肆意”的用kafka了,但是在一个大公司的实际生产环境中,kafka集群往往十分庞大,每个使用者都应该只关心自己所负责的Topic,并且对其他人 ...

  8. vue 封装公用函数

    Vue 函数封装 格式化浏览器时间 /** * 格式化时间 * @param params * @param blo 默认为true * @returns {string} * @constructo ...

  9. 面试题:什么叫B*树

    B*-tree是B+-tree的变体,在B+树的基础上(所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针),B*树中非根和非叶子结点再增加指向兄弟的指针:

  10. ML-求解 SVM 的SMO 算法

    这算是我真正意义上认真去读的第一篇ML论文了, but, 我还是很多地方没有搞懂, 想想, 缓缓吧, 还是先熟练调用API 哈哈 原论文地址: https://www.microsoft.com/en ...