【Streaming】30分钟概览Spark Streaming 实时计算
本文主要介绍四个问题:
- 什么是Spark Streaming实时计算?
- Spark实时计算原理流程是什么?
- Spark 2.X下一代实时计算框架Structured Streaming
- Spark Streaming相对其他实时计算框架该如何技术选型?
本文主要针对初学者,如果有不明白的概念可了解之前的博客内容。
1、什么是Spark Streaming?
与其他大数据框架Storm、Flink一样,Spark Streaming是基于Spark Core基础之上用于处理实时计算业务的框架。其实现就是把输入的流数据进行按时间切分,切分的数据块用离线批处理的方式进行并行计算处理,原理如下图。
(什么是Spark Core ?Spark Core就是基于RDD数据抽象用于数据并行处理的基础组件,详细可参考Spark 核心API开发 了解RDD算子)
输入的数据流经过Spark Streaming的receiver,数据切分为DStream(类似RDD,DStream是Spark Streaming中流数据的逻辑抽象),然后DStream被Spark Core的离线计算引擎执行并行处理。
简言之,Spark Streaming就是把数据按时间切分,然后按传统离线处理的方式计算。从计算流程角度看就是多了对数据收集和按时间节分。
2、Spark实时计算原理流程是什么?
下面将从更细粒度架构角度看Spark Streaming的执行原理,这里先回顾一下Spark框架执行流程。
Spark计算平台有两个重要角色,Driver和executor,不论是Standlone模式还是Yarn模式,都是Driver充当Application的master角色,负责任务执行计划生成和任务分发及调度;executor充当worker角色,负责实际执行任务的task,计算的结果返回Driver。
下图是Driver和Ececutor的执行流程。
Driver对任务先后生成逻辑查询计划、物理查询计划和任务派发,executor接受任务后进行处理,离线计算就是按这个流程进行。
下面看Spark Streaming实时计算的执行流程。
从整体上看,实时计算与离线计算一样,主要组件是Driver和Executor的,不同的是多了数据采集和数据按时间分片过程,数据采集依赖外部数据源,数据分片则依靠内部一个时钟,按batch interval来定时对数据分片,然后把每一个batch interval内的数据提交处理。
3、Spark 2.X下一代实时计算框架Structured Streaming
1)为什么产生下一代Structured Streaming?
目前的Spark Streaming计算逻辑是把数据按时间划分为DStream,当前问题在于:
- 框架自身只能根据Batch time单元进行数据处理,很难处理基于event time(即时间戳)的数据,很难处理延迟,乱序的数据
- 流式和批量处理的API还是不完全一致,两种使用场景中,程序代码还是需要一定的转换
- 端到端的数据容错保障逻辑需要用户自己小心构建,难以处理增量更新和持久化存储等一致性问题
基于以上问题,提出了下一代Structure Streaming
2) Structure Streaming是什么?
将数据抽象为DataFrame,即无边界的表,通过将数据源映射为一张无界长度的表,通过表的计算,输出结果映射为另一张表。这样以结构化的方式去操作流式数据,简化了实时计算过程,同时还复用了其Catalyst引擎来优化SQL操作。此外还能支持增量计算和基于event time的计算。
下图为Structure Streaming逻辑数据结构图:
输入的实时数据根据先后作为row添加到一张无界表中。
这里以wordcount为例的计算过程如下图:
图中Time横轴是时间轴,随着时间,在1、2、3秒分别输入数据,进入wordcount算法计算聚合,输出结果。更对关于Structure Streaming可以参考官网。
4、相对其他实时计算框架该如何技术选型?
一张图介绍:
这里只介绍最主流的,也是国内在技术选型中考虑最多的三种。
从延迟看:Storm和Flink原生支持流计算,对每条记录处理,毫秒级延迟,是真正的实时计算,对延迟要求较高的应用建议选择这两种。Spark Streaming的延迟是秒级。
从容错看 :Spark Streaming和Flink都支持最高的exactly-once容错级别,Storm会有记录重复计算的可能
从吞吐量看 :Spark Streaming是小批处理,故吞吐量会相对更大。
从成熟度看: Storm最成熟,Spark其次,Flink处于仍处于发展中,这三个项目都有公司生产使用,但毕竟开源项目,项目越不成熟,往往越要求公司大数据平台研发水平。
从整合性看:Storm与SQL、机器学习和图计算的结合复杂性最高;而Spark和Flink都有生态圈内对应的SQL、机器学习和图计算,与这些项目结合更容易。
公司可以根据需求进行技术选型。
参考资料:
Spark 2.0 Structured Streaming 分析
Structure Streaming官网资料
转自:http://blog.csdn.net/xwc35047/article/details/55668963
【Streaming】30分钟概览Spark Streaming 实时计算的更多相关文章
- 【分布式计算】30分钟概览Spark分布式计算引擎
本文主要帮助初学者快速了解Spark,不会面面俱到,但核心一定点到. Spark是继Hadoop之后的下一代分布式内存计算引擎,于2009年诞生于加州大学伯克利分校AMPLab实验室,现在主要由Dat ...
- 5分钟学习spark streaming 表格和图形化的文档-概览
看图回答以下问题: 1. spark streaming 架构以及功能特性 2. spark streaming mode?以及每个mode主要特性?包括延迟和语义保证.
- 5分钟学习spark streaming之 轻松在浏览器运行和修改Word Counts
方案一:根据官方实例,下载预编译好的版本,执行以下步骤: nc -lk 9999 作为实时数据源 ./bin/run-example org.apache.spark.examples.sql.str ...
- 1.Spark Streaming另类实验与 Spark Streaming本质解析
1 Spark源码定制选择从Spark Streaming入手 我们从第一课就选择Spark子框架中的SparkStreaming. 那么,我们为什么要选择从SparkStreaming入手开始我们 ...
- Spark Streaming概念学习系列之Spark Streaming的竞争对手
不多说,直接上干货! Spark Streaming的竞争对手 Storm 在Storm中,先要设计一个用于实时计算的图状结构,我们称之为拓扑(topology).这个拓扑将会被提交给集群,由集群中的 ...
- Spark Streaming概念学习系列之Spark Streaming容错
Spark Streaming容错 检查点机制-checkpoint 什么是检查点机制? Spark Streaming 周期性地把应用数据存储到诸如HDFS 或Amazon S3 这样的可靠存储系统 ...
- spark streaming 实时计算
spark streaming 开发实例 本文将分以下几部分 spark 开发环境配置 如何创建spark项目 编写streaming代码示例 如何调试 环境配置: spark 原生语言是scala, ...
- 转:Sharethrough使用Spark Streaming优化实时竞价
文章来自于:http://www.infoq.com/cn/news/2014/04/spark-streaming-bidding 来自于Sharethrough的数据基础设施工程师Russell ...
- Spark Streaming高级特性在NDCG计算实践
从storm到spark streaming,再到flink,流式计算得到长足发展, 依托于spark平台的spark streaming走出了一条自己的路,其借鉴了spark批处理架构,通过批处理方 ...
随机推荐
- 【爬坑】python3+pyqt5+pyinstaller 打包成exe的各种问题
windows系统+python3+pyqt5+pyinstaller打包,经常会出现各种打包异常情况.如果代码没有特别异常,那么综合原因,大抵都是这四个元素之间的匹配问题,引起的.作者:一心狮链接: ...
- javaScript高级教程(七)正则表达式中括号三种常见作用
括号用来将子表达式标记起来,以区别于其他表达式 比如很多的命令行程序都提供帮助命令,键入 h 和键入 help 的意义是一样的,那么就会有这样的表达式: h(elp)? 字符h之后的elp可有可无这里 ...
- 010-jdk1.8版本新特性二-Optional类,Stream流
1.5.Optional类 1.定义 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个 ...
- 一起做RGB-D SLAM (2)
第二讲 从图像到点云 本讲中,我们将带领读者,编写一个将图像转换为点云的程序.该程序是后期处理地图的基础.最简单的点云地图即是把不同位置的点云进行拼接得到的. 当我们使用RGB-D相机时,会从相机里读 ...
- 空类指针为什么可以调用类的成员函数 以及 A(){}和A();
1. 代码及问题 #include <iostream> using namespace std; class A { public: A() {} //A *p = new A()时:此 ...
- Pycharm模板添加默认信息
我们在Pycharm中使用到python3.x版本的解释器,完全没有问题可以正常使用,但是有的时候多少会出现使用python2的时候 我们明明都把代码和文字注释了,为什么使用的时候还会报错呢?? 报错 ...
- elasticsearch 通过外网访问
elasticsearch 只能通过本地访问 需要修改 network.host: 0.0.0.0. 重新开启:提示错误: ERROR: [2] bootstrap checks failed[1] ...
- PAT 1020 Tree Traversals[二叉树遍历]
1020 Tree Traversals (25)(25 分) Suppose that all the keys in a binary tree are distinct positive int ...
- HTML <input> 标签的 name 属性
定义和用法 name 属性规定 input 元素的名称. name 属性用于对提交到服务器后的表单数据进行标识,或者在客户端通过 JavaScript 引用表单数据. 注释:只有设置了 name 属性 ...
- uva12083 二分图 求最大独立集 转化为求最大匹配 由题意推出二分图
这题大白书例题 : Frank 是一个思想有些保守的高中老师,有一次,他需要带一些学生出去旅行,但又怕其中一些学生在旅途中萌生爱意.为了降低这种事情的发生概率,他决定确保带出去的任意两个学生至少要满足 ...