spark streaming (一)
实时计算介绍
Spark Streaming, 其实就是一种Spark提供的, 对于大数据, 进行实时计算的一种框架。 它的底层, 其实, 也是基于我们之前讲解的Spark Core的。 基本的计算模型, 还是基于内存的大数据实时计算模型。 而且, 它的底层的组件或者叫做概念, 其实还是最核心的RDD。
针对实时计算的特点, 在RDD之上, 进行了一层封装, 叫做DStream。 其实, 学过了Spark SQL之后, 你理解这种封装就容易了。 之前学习Spark SQL是不是也是发现,它针对数据查询这种应用, 提供了一种基于RDD之上的全新概念, DataFrame, 但是,其底层还是基于RDD的。 所以,
RDD是整个Spark技术生态中的核心。 要学好Spark在交互式查询、 实时计算上的应用技术和框架, 首先必须学好Spark核心编程, 也就是Spark Core。
一、Spark Streaming基本工作原理
1、spark streaming 简介
Spark Streaming是Spark Core API的一种扩展, 它可以用于进行大规模、 高吞吐量、容错的实时数据流的处理。 它支持从很多种数据源中读取数据, 比如Kafka、 Flume、Twitter、 ZeroMQ、 Kinesis或者是TCP Socket。 并且能够使用类似高阶函数的复杂算法来进行数据处理,
比如map、 reduce、 join和window。 处理后的数据可以被保存到文件系统、 数据库、 Dashboard等存储中。 
2、Spark Streaming基本工作原理
Spark Streaming内部的基本工作原理如下: 接收实时输入数据流, 然后将数据拆分成多个batch(批), 比如每收集1秒的数据封装为一个batch, 然后将每个batch交给Spark的计算引擎进行处理, 最后会生产出一个结果数据流, 其中的数据, 也是由一个一个的batch所组成的。 
3、DStream(一)
Spark Streaming提供了一种高级的抽象, 叫做DStream, 英文全称为Discretized Stream, 中文翻译为“ 离散流” , 它代表了一个持续不断的数据流。 DStream可以通过输入数据源来创建, 比如Kafka、 Flume和Kinesis; 也可以通过对其他DStream应用高阶函数来创建, 比如map、 reduce、 join、 window。
DStream的内部, 其实一系列持续不断产生的RDD。 RDD是Spark Core的核心抽象, 即, 不可变的, 分布式的数据集。 DStream中的每个RDD都包含了一个时间段内的数据。

对DStream应用的算子, 比如map, 其实在底层会被翻译为对DStream中每个RDD的操作。比如对一个DStream执行一个map操作, 会产生一个新的DStream。 但是, 在底层, 其实其原理为, 对输入DStream中每个时间段的RDD, 都应用一遍map操作, 然后生成的新的RDD,
即作为新的DStream中的那个时间段的一个RDD。 底层的RDD的transformation操作, 其实,还是由Spark Core的计算引擎来实现的。 Spark Streaming对Spark Core进行了一层封装, 隐藏了细节, 然后对开发人员提供了方便易用的高层次的API。 
总结:
Dstream(离散流)
1、 Dstream是spark streaming中特有的一个概念,它对RDD进行了封装。一个Dstream中包含一系列多个RDD,我们对Dstream的操作实际上对Dstream中一系列多个RDD进行操作。
在spark1.x的sql中,提出了DataFrame的概念,它是基于RDD之上的一个全新的概念。
我们可以把RDD直接转换成DataFrame,然后对数据进行操作。在spark2.x的SQL中,提出并完善了DataSet,所以在spark2.x中可以使用DataSet来替带DataFrame。
2、DStream是一个持续不断的数据流,包含一系列RDD,每个RDD中存储某个时间段内的数据。
它的创建方式有以下两种:
1)从Socket、HDFS、Flume、Kafka等外部数据源中创建
2)对现有的DStream进行Transformation类型的算子操作,从而产生新的DStream。
默认情况下200ms生成一个block
二、与Storm的对比分析
1、Spark Streaming与Storm的对比

2、Spark Streaming与Storm的优劣分析
事实上, Spark Streaming和Storm这两个框架在实时计算领域中, 都很优秀, 只是擅长的细分场景并不相同。
Spark Streaming仅仅在吞吐量上比Storm要优秀, 而吞吐量这一点, 也是历来挺Spark Streaming, 贬Storm的人着重强调的。 但是问题是, 是不是在所有的实时计算场景下, 都那么注重吞吐量? 不尽然。因此, 通过吞吐量说Spark Streaming强于Storm, 不靠谱。
事实上, Storm在实时延迟度上, 比Spark Streaming就好多了, 前者是纯实时, 后者是准实时。 而且,Storm的事务机制、 健壮性 / 容错性、 动态调整并行度等特性, 都要比Spark Streaming更加优秀。Spark Streaming, 有一点是Storm绝对比不上的, 就是:
它位于Spark生态技术栈中, 因此Spark Streaming可以和Spark Core、 Spark SQL无缝整合, 也就意味着, 我们可以对实时处理出来的中间数据,立即在程序中无缝进行延迟批处理、 交互式查询等操作。 这个特点大大增强了Spark Streaming的优势和功能。
3、Spark Streaming与Storm的应用场景
对于Storm来说:
1、 建议在那种需要纯实时, 不能忍受1秒以上延迟的场景下使用, 比如实时金融系统, 要求纯实时进行金融交易和分析
2、 此外, 如果对于实时计算的功能中, 要求可靠的事务机制和可靠性机制, 即数据的处理完全精准, 一条也不能多, 一条也不能少, 也可以考虑使用Storm
3、 如果还需要针对高峰低峰时间段, 动态调整实时计算程序的并行度, 以最大限度利用集群资源( 通常是在小型公司,集群资源紧张的情况) , 也可以考虑用Storm
4、 如果一个大数据应用系统, 它就是纯粹的实时计算, 不需要在中间执行SQL交互式查询、 复杂的transformation算子等, 那么用Storm是比较好的选择
对于Spark Streaming来说:
1、 如果对上述适用于Storm的三点, 一条都不满足的实时场景, 即, 不要求纯实时, 不要求强大可靠的事务机制, 不要求动态调整并行度, 那么可以考虑使用Spark Streaming
2、 考虑使用Spark Streaming最主要的一个因素, 应该是针对整个项目进行宏观的考虑, 即, 如果一个项目除了实时计算之外, 还包括了离线批处理、 交互式查询等业务功能, 而且实时计算中, 可能还会牵扯到高延迟批处理、 交互式查询
等功能, 那么就应该首选Spark生态, 用Spark Core开发离线批处理, 用Spark SQL开发交互式查询, 用Spark Streaming开发实时计算, 三者可以无缝整合, 给系统提供非常高的可扩展性。
补充:
一、补充传统关系型中的重要概念:
1、事务
1)完整性:
事务是一个整体,它作为一个整体去执行,要么全部都成功,
要么全部都失败。如果成功,就提交全部数据;如果失败,就回滚
全部数据。
2)隔离性:
多个事务之间的运行是彼此隔离的。
3)持久性
事务一旦创建成功,它永久存在于数据库中。
2、存储过程
存储过程中可以包含多条SQL语句、事务等,并可以进行多个操作。
在实际开发中,如果某项操作包含多条SQL语句,而且也用到事务操作,
甚至用到触发器操作,此时可以用一个存储过程包括以上所有操作。
这样做可以提升数据操作的效率。
3、触发器
设置某一条件,当操作满足条件时,自动触发相关操作。
比如银行账户转账。
二、netcat轻量级服务器(nc)
在线安装:yum install nc
运行nc:nc -lk 9999(端口)
Nginx
tomcat
IIS internet information server
apache
也可以在Linux上安装 (上传 nc-1.84-22.el6.x86_64.rpm,再执行 rpm -ihv nc-1.84-22.el6.x86_64.rpm)
spark streaming (一)的更多相关文章
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark Streaming+Kafka
Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...
- Storm介绍及与Spark Streaming对比
Storm介绍 Storm是由Twitter开源的分布式.高容错的实时处理系统,它的出现令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求.Storm常用于在实时分析.在线机器学 ...
- flume+kafka+spark streaming整合
1.安装好flume2.安装好kafka3.安装好spark4.流程说明: 日志文件->flume->kafka->spark streaming flume输入:文件 flume输 ...
- spark streaming kafka example
// scalastyle:off println package org.apache.spark.examples.streaming import kafka.serializer.String ...
- Spark Streaming中动态Batch Size实现初探
本期内容 : BatchDuration与 Process Time 动态Batch Size Spark Streaming中有很多算子,是否每一个算子都是预期中的类似线性规律的时间消耗呢? 例如: ...
- Spark Streaming源码解读之No Receivers彻底思考
本期内容 : Direct Acess Kafka Spark Streaming接收数据现在支持的两种方式: 01. Receiver的方式来接收数据,及输入数据的控制 02. No Receive ...
- Spark Streaming架构设计和运行机制总结
本期内容 : Spark Streaming中的架构设计和运行机制 Spark Streaming深度思考 Spark Streaming的本质就是在RDD基础之上加上Time ,由Time不断的运行 ...
- Spark Streaming中空RDD处理及流处理程序优雅的停止
本期内容 : Spark Streaming中的空RDD处理 Spark Streaming程序的停止 由于Spark Streaming的每个BatchDuration都会不断的产生RDD,空RDD ...
- Spark Streaming源码解读之State管理之UpdataStateByKey和MapWithState解密
本期内容 : UpdateStateByKey解密 MapWithState解密 Spark Streaming是实现State状态管理因素: 01. Spark Streaming是按照整个Bach ...
随机推荐
- devpi 快速入门:上传,测试,推送发行版
安装 devpi 客户端和服务器端 pip install -U devpi 这将安装devpi-client,devpi-server 和 devpi-web 三个Python PyPi包. 初始化 ...
- WebGL射线拾取模型——八叉树优化
经过前面2篇WebGL射线拾取模型的文章,相信大家对射线和模型面片相交的原理已经有所了解,那么今天我们再深入探究关于射线拾取的一个问题,那就是遍历场景中的所有与射线相交的模型的优化问题.首先我们来复习 ...
- phpcms v9手机站不支持组图($pictureurls)的修改
phpcms v9自带的手机门户网站,有时候我们需要用到组图功能$pictureurls,我在做的时候发现,如果$pictureurls中只有一张图片会正常显示,但是如果有两张或两张以上的图片的时候, ...
- Elasticsearch.Net 异常:[match] query doesn't support multiple fields, found [field] and [query]
用Elasticsearch.Net检索数据,报异常: )); ElasticLowLevelClient client = new ElasticLowLevelClient(settings); ...
- Delphi 中的 RectTracker - 原创
本文算是副产品,正品是利用 FFmpeg 从任意视频中生成GIF片段的小程序,写完了就发. V2G 正品已出炉,虽然不大像样,但好歹是能用,请见:用 Delphi 7 实现基于 FFMS2 的视频转 ...
- Kubernetes v1.10----部署kubernetes-dashboard v1.83
Kubernetes v1.10----部署kubernetes-dashboard v1.83 1.下载 kubernetes-dashboard yaml文件 #因为文件中的image指定的是谷 ...
- 如何通俗理解贝叶斯推断与beta分布?
有一枚硬币(不知道它是否公平),假如抛了三次,三次都是“花”: 能够说明它两面都是“花”吗? 1 贝叶斯推断 按照传统的算法,抛了三次得到三次“花”,那么“花”的概率应该是: 但是抛三次实在太少了,完 ...
- scrapy-redis+selenium+webdriver 部署到linux上
背景:在使用selenium时,在本地使用windows,都会有一个图形界面,但是到了生产环境linux上没有了图形界面怎么部署呢? 解决方案: 1.安装图形化界面,不推荐,因为安装图形化界面会占用很 ...
- [转]如何设计自适应屏幕大小的网页 Responsive Web Design
随着3G的普及,越来越多的人使用手机上网. 移动设备正超过桌面设备,成为访问互联网的最常见终端.于是,网页设计师不得不面对一个难题:如何才能在不同大小的设备上呈现同样的网页? 手机的屏幕比较小,宽度通 ...
- lintcode-401-排序矩阵中的从小到大第k个数
401-排序矩阵中的从小到大第k个数 在一个排序矩阵中找从小到大的第 k 个整数. 排序矩阵的定义为:每一行递增,每一列也递增. 样例 给出 k = 4 和一个排序矩阵: [ [1 ,5 ,7], [ ...