热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sparkstreaming框架简介

1.sparksteaming概述在《spark基础(上篇)》中,sparkstreaming是spark体系中的一个流式处理框架。因此,Sparkstreaming相对于其他流式
1. spark steaming概述

在《spark 基础(上篇)》中,spark streaming是spark体系中的一个流式处理框架。因此,Spark streaming相对于其他流式处理框架就更有优势,用途更加广泛,它能够与spark sql、机器学习以及图像处理框架无缝连接。spark streaming还能够从多种数据源获得数据,同时,能够输出到多种不同的数据平台中,包括文件系统、数据库和实时数据展示平台dashboards。spark streaming的流处理框架如下图1所示:

《spark streaming框架简介》 图1 spark streaming的流处理框架

  详细的处理流程如下图2所示,spark streaming接收实时数据流输入的数据流后,再将其划分为一个个batch(小批次数据流)供后续Spark engine处理,所以实际上,Spark Streaming是按一个个batch(小批次)来处理数据流的。

《spark streaming框架简介》 图2 spark streaming数据处理流程

  说到spark streaming就不得不提Dstream,Dstream是spark中继spark core的RDD、spark sql的DataFrame和DataSet后有一基础的数据类型,是spark streaming特有的数据类型。DStream代表了一系列连续的RDD,DStream中每个RDD包含特定时间间隔的数据,存储方式为HashMap。其中,Time为时间序列,而RDD我们都很熟悉,它是spark core的基础数据结构。Dstream的结构如下图3所示:

《spark streaming框架简介》 图3 Dstream结构

  对连续不断的streaming data流的多次切片,就会将流分成多个batch,单个batch内有一套针对多个Dstream的处理逻辑,每个batch的处理逻辑相同。这个处理逻辑相当于spark core对RDD的处理逻辑。针对RDD的处理中,DAGScheduler将DAGGraph按照宽窄依赖划分stage。每个batch内部也存在DstreamGraph,对Dstream的处理也类似于对RDD的处理。例如下图4所示,针对一段代码,在单个batch内部也会生成DstreamGraph和Dstream依赖。

《spark streaming框架简介》 图4 单个bath内部处理流程

  针对一个spark streaming的处理流中的多个batch,处理逻辑如下图5所示。图中用虚线将左侧的streaming data流分成三个batch,每个batch的处理逻辑如右侧所示。

《spark streaming框架简介》 图5 streaming流批量处理流程

2. spark streaming工作原理

根据如上图5分析可知,spark streaming的大致工作流程如下:
  首先,需要一个DAG的静态模板来定义batch内的执行逻辑。
  其次,如上图2所示,针对实时的数据流来说, 还需要有控制器,不间断地将数据流分成多个batch,同时在每个batch内部应用DAG静态模板执行处理逻辑。
  再次,要生成DStream,并不能像一般的数据源那样从存储介质中去读取,而是要从多种数据推送过来的数据,包括kafka、flume以及twitter等等。
  最后,由于流式处理要不断地循环执行,保障任务的稳定性就显得尤其重要了。
  因此,针对上述四种需要,spark streaming的整体执行流程就是围绕上述四个需求而设置的,其总体工作流程如下图6所示。如图中脚注,橙色部分显示DAG的静态定义部分,淡蓝色为控制器部分,负责流的拆分,同时执行橙色部分定义的静态模板。绿色部分显示了driver和executor的数据接收部分,最后的紫色部分,显示了spark streaming中很重要的稳定性保障功能,即checkpoint。

《spark streaming框架简介》 图6 spark streaming工作原理图

下面我们来简要介绍下每一部分的主要职责:
  第一部分:如上图4和图5所示的步骤生成DstreamGraph和Dstream。
  第二部分:JobScheduler是主要的控制器,负责动态任务的调度,包括JobGenerator和ReceiveTracker两个主要的成员。其中,JobGenerator主要负责将data streaming流按照程序中设置的时间间隔切分成多个batch,并按照静态的DstreamGraph为以后的每一个batch生成DstreamGraph。而ReceiveTracker则负责数据流的接收跟踪和控制,具体的实现见第三部分。
  第三部分:RecevieTracker启动多个job,并分发到多个executor上。Executor启动ReceiverSupervisor,ReceiverSupervisor启动Receiver来接收数据,ReceiverSupervisor接到数据后,按块的形式存储,并将块的meta信息上报给ReceiverTracker。
  第四部分:ReceiverTracker接收到块的meta信息后交给ReceivedBlockTracker去管理块信息。ReceivedBlockTracker 也采用 WAL 冷备方式进行备份,在 driver 失效后,由新的 ReceivedBlockTracker 读取 WAL 并恢复 block 的 meta 信息。
第四部分:这部分主要是处于稳定性的考虑,设置的checkpoint机制。因此,checkpoint需要将整个处理流程中的关键节点都做checkpoint,包括DstreamGraph,JobScheduler,数据块的meta信息以及块数据。

3. 与storm流处理框架对比

spark作为Apache spark开源框架的一部分,与当前流程的storm开源框架相比,主要存在以下差别:
1.处理时效
  spark streaming处理的数据单位是某个时间窗口内的数据流,而storm是针对单条记录处理的。因此,spark streaming可能存在几秒钟的延迟,而storm的延迟能缩短到秒内。
2.容错机制
  spark streaming有较好的容错机制,当单个节点发生故障后,它可以跟踪每批被处理的数据流,保证每批数据只被处理一次。storm则只能保证单条数据处理不会被遗漏,而却允许数据有重复被处理的现象。
3.运行平台
  spark streaming和storm都可以运行在自己的集群上,spark streaming能同时运行在Yarn和Mesos集群上,而storm只能运行在Mesos上。


推荐阅读
  • bat大牛带你深度剖析android 十大开源框架_请收好!5大领域,21个必知的机器学习开源工具...
    全文共3744字,预计学习时长7分钟本文将介绍21个你可能没使用过的机器学习开源工具。每个开源工具都为数据科学家处理数据库提供了不同角度。本文将重点介绍五种机器学习的 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • qt学习(六)数据库注册用户的实现方法
    本文介绍了在qt学习中实现数据库注册用户的方法,包括登录按钮按下后出现注册页面、账号可用性判断、密码格式判断、邮箱格式判断等步骤。具体实现过程包括UI设计、数据库的创建和各个模块调用数据内容。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 前言:拿到一个案例,去分析:它该是做分类还是做回归,哪部分该做分类,哪部分该做回归,哪部分该做优化,它们的目标值分别是什么。再挑影响因素,哪些和分类有关的影响因素,哪些和回归有关的 ... [详细]
  • 一.常见基于身份识别进行反爬1通过headers字段来反爬headers中有很多字段,这些字段都有可能会被对方服务器拿过来进行判断是否为爬虫1.1通过headers中的User-A ... [详细]
  • 开发笔记:Spark Java API 之 CountVectorizer
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了SparkJavaAPI之CountVectorizer相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
果子露强逼_604
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有