Spark Streaming揭秘 Day9

从Receiver的设计到Spark框架的扩展

Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们可以充分领略到Spark框架设计之巧妙,废话少说,让我们来看代码。

解决的问题

在开始之前,让我们先明确一个概念,就是Receiver于inputDStream之间的关系,从如下代码中,我们可以看到,receiver其实是由inputDStream映射得到的,也就是说Receiver和inputDStream是一一对应的。

让我们需要明确一下需要解决的问题,或者说设计的目标。

Receiver其实是一个独立的应用程序,一边不断从外部数据源接收数据,一边向进行数据存储。以如下SocketInputStream为例,其实就是一个标准的Socket数据接收程序。

那么,作为一个应用程序,如何在集群上进行运行就是一个要解决的问题。
通过前面几讲的说明,我们知道,在Spark中是将Receiver作为一个Job来进行运行的。
但是如果只是简单的作为一个Job来运行,因为Spark core并不知道Receiver的特殊性,所以可能在一个executor上启动多个receiver,这时候会出现两个非常大的问题:

  1. 由于会与其他应用Job共同调度,负载可能不均衡。
  2. 如果receiver启动失败的话,可能导致整个应用程序无法工作,无法保证高可用。

事实上,对整个Receiver运行的设计,我们就是要突破Spark本身限制,解决这两个关键的问题。

解决负载均衡问题

如下代码是receiver的启动代码:

进入startReceiver

通过上面两段代码,我们可以看到两点。

  1. 每个Receiver的启动都会触发一个作业。
  2. 在启动作业时,是基于scheduledLocation来决定运行的位置。

首先,分开作业,可以起到很好的隔离作用,不同receiver互相不会发生影响,并且可以在最大程度负载均衡.
其次,利用RDD可自定义的机制,通过对scheduledLocation的操作,其实SparkStreaming是把负载均衡的策略掌握到了自己手里,而不是使用Spark自身的机制!!!

让下面看下scheduledLocation的生成,策略本身比较复杂,从注释我们可以看到,主要还是会以当前最小负载的原则进行分配,从而确保Receiver尽可能的分布。

解决高可用问题

高可用的设计目标,简单来说,就是只要集群存在,我们希望receiver一定启动成功。

在这里,比较巧妙的使用了Job启动的回调机制,可以看到,当失败时会自动进行重启操作,只要集群在运行,就会进行永无休止的重试。

那Spark原生的重试限制如何解决呢,在如下代码中,实际上是把Spark原生的重试机制进行了短路,和负载均衡类似,将这一机制控制到SparkStreaming手中,绕开了重试次数的限制。

最后,在重试机制中,使用了future的语法,使得重试在缓冲线程池中运行,支持并发启动,还可以控制负载。

其他

说实话,我是有点被这段代码震到了,SparkStreaming中采用了一组非常简洁的代码,就扩展了Spark框架,并解决了一系列其实是在分布式系统中非常通用的问题,真是精彩绝伦!!!

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

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

Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展的更多相关文章

  1. Spark Streaming揭秘 Day19 架构设计和运行机制

    Spark Streaming揭秘 Day19 架构设计和运行机制 今天主要讨论一些SparkStreaming设计的关键点,也算做个小结. DStream设计 首先我们可以进行一个简单的理解:DSt ...

  2. Spark Streaming揭秘 Day11 Receiver Tracker的具体实现

    Spark Streaming揭秘 Day11 Receiver Tracker的具体实现 ReceiverTracker是运行在Driver上Receiver管理程序,今天让我们深入学习一下. 核心 ...

  3. Spark Streaming揭秘 Day33 checkpoint的使用

    Spark Streaming揭秘 Day33 checkpoint的使用 今天谈下sparkstreaming中,另外一个至关重要的内容Checkpoint. 首先,我们会看下checkpoint的 ...

  4. Spark Streaming揭秘 Day32 WAL框架及实现

    Spark Streaming揭秘 Day32 WAL框架及实现 今天会聚焦于SparkStreaming中非常重要的数据安全机制WAL(预写日志). 设计要点 从本质点说,WAL框架是一个存储系统, ...

  5. Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析

    Spark Streaming揭秘 Day30 集群模式下SparkStreaming日志分析 今天通过集群运行模式观察.研究和透彻的刨析SparkStreaming的日志和web监控台. Day28 ...

  6. Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming

    Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming 在Spark2.x中,Spark Streaming获得了比较全面的升级,称为St ...

  7. Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕

    Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...

  8. Spark Streaming揭秘 Day24 Transformation和action图解

    Spark Streaming揭秘 Day24 Transformation和action图解 今天我们进入SparkStreaming的数据处理,谈一下两个重要的操作Transfromation和a ...

  9. Spark Streaming揭秘 Day20 动态Batch size实现初探(上)

    Spark Streaming揭秘 Day20 动态Batch size实现初探(上) 今天开始,主要是通过对动态Batch size调整的论文的解析,来进一步了解SparkStreaming的处理机 ...

随机推荐

  1. Centos 安装KScope1.6.2

    准备工作:安装ctags graphviz,和cscope  (可以用yum install来安装) 1.首先下载kscope,最好下载16.x的版本,这个最好的 下载kscope-1.6.2.tar ...

  2. js学习笔记第二篇

    Js笔记整理 1.StringAPI a)        大小写转换:str.toUpperCase();str.toLowerCase(); b)        获取指定位置字符: Str[i]-- ...

  3. 1. Android 系统上一款开源的图表库

    1. MPAndroidChart  MPAndroidChart 是 Android 系统上一款开源的图表库.目前提供线图和饼图,支持选择.缩放和拖放. 一个可以拖动缩放的图表库,包含曲线图.直方图 ...

  4. Android 自学之选项卡TabHost

    选项卡(TabHost)是一种非常实用的组件,TabHost可以很方便地在窗口上放置多个标签页,每个标签页相当于获得了一个与外部容器相同大小的组建摆放区域.通过这种方式,就可以在一个容器中放置更多组件 ...

  5. postgresql常用SQL

    --查看数据库 select * from pg_database; --查看表空间 select * from pg_tablespace; --查看语言 select * from pg_lang ...

  6. poj 1987 树的分治

    思路:1741的A1送 1. #include<iostream> #include<cstring> #include<algorithm> #include&l ...

  7. 安装SqlServer2008时相关问题

    在安装SqlServer2008时,安装程序支持规则,老提示重启计算机 1,运行 regedit 打开注册表编辑器. 2,依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentCo ...

  8. 小议jQuery中的事件

    学了jQuery这么长时间,到这里真的有一种柳暗花明又一村的感觉,在这里先表达一下自己学这一章节的happy心情吧(在严厉的金工实习老师眼皮底下偷偷学习,当然还有各种nerves~). 1加载DOM ...

  9. ActiveMQ(5.10.0) - Building a custom security plug-in

    If none of any built-in security mechanisms works for you, you can always build your own. Though the ...

  10. SQL语句添加,删除主键

    IF EXISTS (SELECT * FROM sys.all_objects  WHERE  type_desc= N'主键名')begin --删除主键 alter table 表名 drop ...