一 Spark Streaming 运行架构图

二 Spark Streaming各个组件

2.1 StreamingContext: Spark Streaming 中Driver端的上下文对象,初始化的时候会构造Spark Streaming应用程序需要使用的组件,比如DStreamGraph、JobScheduler等

2.2 DStreamGraph:用于保存DStream和DStream之间依赖关系等信息

2.3 JobScheduler: 主要用于调度job。JobScheduler主要通过JobGenerator产生job,并且通过ReceiverTracker管理流数据接收器Receiver

2.4 JobGenerator: 主要是从DStream产生job, 且根据指定时间执行checkpoint. 他维护了一个定时器,该定时器在批处理时间到来的时候会进行生成作业的操作。

2.5 ReceiverTracker: 管理各个Executor上的Receiver的元数据。它在启动的时候,需要根据流数据接收器Receiver分发策略通知对应的Executor中的ReceiverSupervisor(接收器管理着)启动,然后再由ReceiverSupervisor来启动对应节点的Receiver

2.6 ReceiverTrackerEndpoint: ReceiverTracker用于通信的RPC终端

2.7 Receiver:数据接收器,用于接收数据,通过ReceiverSupervisor将数据交给ReceiveBlockHandler来处理

2.8 ReceiverSupervisor:主要用于管理各个worker节点上的Receivor,比如启动worker上的Receiver,或者是转存数据,交给ReceiveBlockHandler来处理;数据转存完毕,将数据存储的元信息汇报给ReceiverTracker,由它来负责管理收到的数据块元信息

2.9 BlockGenerator: 这个类的主要作用是创建Receiver接收的数据的batches,然后根据时间间隔命名为合适的block. 并且把准备就绪的batches作为block 推送到BlockManager

2.10 ReceiveBlockHandler:主要根据是否启用WAL预写日志的机制,区分为预写日志和非预写日志存储。非预写日志则是直接将数据通过BlockManager写入Worker的内存或者磁盘;而预写日志则是在预写日志的同时把数据写入Worker的内存或者磁盘

2.11 ReceiverSchedulingPolicy: Receiver调度策略

三 消息通信机制

启动过程中,会启动所有的数据接收器Receiver和注册Receiver。在接收存储数据中,当数据块存储完成后发送添加数据块消息,而当Spark Streaming停止的时候发送关闭所有的Receiver的消息

四 Receiver分发、调度机制

Spark Streaming 中处理数据一方面通过内部接口获取,一方面来自原kafka,flume或者其他外部系统,获取之后对这些输入源进行map,join、window等操作。这些数据均抽象于DStream。

根据DStream是初始输入的还是之后转换操作形成的,分为InputDStream、ForEachDStream、MappedDStream、TransformedDStream、ShuffledDStream等

对于InputDStream,我们根据不同的输入来源,又区别为FileInputDStream、DirectKafkaInputDStream、QueueInputDStream以及ReceiverInputDStream等等,另外我们还可以通过继承PluggableInputDStream自定义流数据接收器。

Streaming 启动过程中,ReceiverTracker会起动所有的Receiver,所以需要对Receiver进行调度或者说把Receiver分发到Executor上,然后由Executor中ReceiverSupervisor起动对应的Receiver。

ReceiverSchedulingPolicy:这个类就是Receiver调度策略。对于调度Receiver有两个阶段:

第一阶段:当ReceiverTracker启动的时候开始进行全局的调度,即启动所有的Receiver

第二阶段:是本地调度,当Receiver重启的时候,这儿有两种情况:

# case 1: 实际的location和调度的location不匹配,换句话说,从建议的或者候选的scheduleReceiver中获取一个Receiver启动失败,ReceiverTracker应该首先选择调度的location列表中仍然存活的Executor,染回使用它们发起Receiver

# case 2: 因为没有调度的location列表而重启,或者有调度的location列表,但是里面的Executors都挂了,ReceiverTracker应该调用方法

rescheduleReceiver

4.1 scheduleReceivers

# 对待分配的executors按照host进行分组

# 构建一个receivers长度的数组,存放着TaskLocation数组,相当于每一个receiver都对应着一组候选的TaskLocation

# 遍历receiver的首选位置, 判断该host是否是未知的host,如果不是选择一个有较少的receiver的executor,然后放入location中。如果是未知的则创建一个TaskLocation放在对应的位置上

# 对于那些不存在首选位置的Receiver,即locations里面为空的数组,根据numReceiversOnExecutor获取receiver数量最少的元素;该数组添加这个最少receiver数量的executor,并且更新对应的receiver的数量

# 然后将receivers和location对应的TaskLocation数组进行拉链操作

4.2 rescheduleReceiver

# 创建一个location集合,首先把首选位置映射成TaskLocation添加到scheduledLocations

# 尝试转化一个receiver tracking info为executor 权重,然后转化成一个map

# 获取空闲的executor,即没有运行也没有分配receiver运行的executor

# 如果存在空闲executor,将空闲的executors更新到scheduledLocations

# 如果不存在,则按照权重排序

Spark Streaming之运行架构相关推荐

  1. Spark生态系统和运行架构

    Spark是一个可应用于大规模数据处理的快速.通用引擎,spark提供了内存计算和基于DAG的任务调度机制.Spark最大的特点就是将计算数据.中间结果都存储在内存中,因此更适合于迭代运算. 1.Sp ...

  2. Spark Streaming之运行原理

    一 启动流处理引擎 1.1初始化StreamingContext 首先需要初始化StreamingContext,在初始化的过程中会对DStreamGraph.JobScheduler等进行初始化,D ...

  3. 基于案例贯通 Spark Streaming 流计算框架的运行源码

    本期内容 : Spark Streaming+Spark SQL案例展示 基于案例贯穿Spark Streaming的运行源码 一. 案例代码阐述 : 在线动态计算电商中不同类别中最热门的商品排名,例 ...

  4. 【Spark】Spark Streaming的back pressure

    1.美图 在讲flink的back pressure之前,我们先讲讲Spark Streaming的back pressure.Spark Streaming的back pressure出现的原因呢, ...

  5. grafana计算不同时间的差值_大数据时代!如何基于Spark Streaming构建实时计算平台...

    随着互联网技术的迅速发展,用户对于数据处理的时效性.准确性与稳定性要求越来越高,如何构建一个稳定易用并提供齐备的监控与预警功能的实时计算平台也成了很多公司一个很大的挑战. 自2015年携程实时计算平台 ...

  6. Spark Streaming 图片处理案例介绍

    Spark Streaming 图片处理案例介绍 本文首先介绍了流式处理框架的设计原理.Spark Streaming 的工作原理,然后通过一个基于 Spark Streaming 编写的读取.分析. ...

  7. 021 Spark Streaming

    1.简介 Spark Streaming抽象.架构与原理 StreamingContext 是 Spark Streaming 程序的入口,其指定sparkConf.确定DStream生成的间隔.设定 ...

  8. Spark Streaming笔记整理(二):案例、SSC、数据源与自定义Receiver

    [TOC] 实时WordCount案例 主要是监听网络端口中的数据,并实时进行wc的计算. Java版 测试代码如下: package cn.xpleaf.bigdata.spark.java.str ...

  9. Spark Streaming 原理剖析

    通过源码呈现 Spark Streaming 的底层机制. 1. 初始化与接收数据 Spark Streaming 通过分布在各个节点上的接收器缓存接收到的流数据并将流数 据 包 装 成 Spark ...

最新文章

  1. Linux系统普通用户切换省略输入用户名密码
  2. 汉堡王什么汉堡好吃_315 曝光用过期面包做汉堡:汉堡王到底怎么了?
  3. 深圳零基础自学python_深圳学习python
  4. 本地安装Docker
  5. Python笔记-函数装饰器
  6. 小学生四则运算JAVA
  7. Python快速生成注释文档
  8. 《组合数学全家桶》(ACM / OI 全网最全,清晰易懂)
  9. 利用 Python 特性在 Jinja2 模板中执行任意代码
  10. 【转】葡萄酒的干型、半干型、半甜型、甜型是什么意思?
  11. 人类一败涂地做图教程_人类一败涂地自定义人物怎么制作 捏人实用技巧教学...
  12. 局域网SDN技术硬核内幕 二 云网CP的日常恩爱——硬件VXLAN转发平面
  13. MATLAB 幂函数 图像增强
  14. freeswitch + dbl 呼入设置
  15. ps--photoshop的简单使用方法
  16. FTX创办人SBF:区块链并不是炒作,有三大应用场景可大放异彩
  17. jmeter-连接数据库
  18. docker安装Nextcloud私有云盘
  19. python苹果版本下载_python for mac 2.7 下载
  20. php excel 模板 导出word,使用phpexcel导出excel和phpword导出word--简单使用

热门文章

  1. 微型计算机机房湿度不宜过大对,2013年计算机等考三级PC技术练习题及答案(1)...
  2. Zookeeper之Watcher机制详解
  3. 在线图表分析制作_(漂亮)象形柱状图表制作 在线图表制作工具
  4. 04数据库的高级查询
  5. 左侧栏下拉框HTML代码,html5下拉菜单代码
  6. 解决django需要手动调整数据库,避免manage.py各种报错
  7. linux根据进程的运行路径,停止进程
  8. 得到当前python解释器的路径
  9. python使用random生成不重复的随机数
  10. Mac 重置homebrew源