实时计算介绍

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 (一)的更多相关文章

  1. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  2. Spark Streaming+Kafka

    Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...

  3. Storm介绍及与Spark Streaming对比

    Storm介绍 Storm是由Twitter开源的分布式.高容错的实时处理系统,它的出现令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求.Storm常用于在实时分析.在线机器学 ...

  4. flume+kafka+spark streaming整合

    1.安装好flume2.安装好kafka3.安装好spark4.流程说明: 日志文件->flume->kafka->spark streaming flume输入:文件 flume输 ...

  5. spark streaming kafka example

    // scalastyle:off println package org.apache.spark.examples.streaming import kafka.serializer.String ...

  6. Spark Streaming中动态Batch Size实现初探

    本期内容 : BatchDuration与 Process Time 动态Batch Size Spark Streaming中有很多算子,是否每一个算子都是预期中的类似线性规律的时间消耗呢? 例如: ...

  7. Spark Streaming源码解读之No Receivers彻底思考

    本期内容 : Direct Acess Kafka Spark Streaming接收数据现在支持的两种方式: 01. Receiver的方式来接收数据,及输入数据的控制 02. No Receive ...

  8. Spark Streaming架构设计和运行机制总结

    本期内容 : Spark Streaming中的架构设计和运行机制 Spark Streaming深度思考 Spark Streaming的本质就是在RDD基础之上加上Time ,由Time不断的运行 ...

  9. Spark Streaming中空RDD处理及流处理程序优雅的停止

    本期内容 : Spark Streaming中的空RDD处理 Spark Streaming程序的停止 由于Spark Streaming的每个BatchDuration都会不断的产生RDD,空RDD ...

  10. Spark Streaming源码解读之State管理之UpdataStateByKey和MapWithState解密

    本期内容 : UpdateStateByKey解密 MapWithState解密 Spark Streaming是实现State状态管理因素: 01. Spark Streaming是按照整个Bach ...

随机推荐

  1. 180729-Quick-Task 动态脚本支持框架之任务动态加载

    Quick-Task 动态脚本支持框架之任务动态加载 前面几篇博文分别介绍了整个项目的基本架构,使用说明,以及整体框架的设计与实现初稿,接下来则进入更细节的实现篇,将整个工程中核心实现捞出来,从为什么 ...

  2. Unity利用Share SDK实现QQ、微信及微博第三方登录及定制内容分享(附代码)

    最近因为公司的项目需要添加一些实用性的功能,需要添加第三方登录及分享,采用的是Mob的SDK,可以先到其官网下载对应的SDK 点击这里,为了方便后期进行数据统计和分析,所以可以先添加一个应用,添加成功 ...

  3. 天下武功,无快不破,Python开发必备的6个库

    01 Python 必备之 PyPy PyPy 主要用于何处? 如果你需要更快的 Python 应用程序,最简单的实现的方法就是通过 PyPy ,Python 运行时与实时(JIT)编译器.与使用普通 ...

  4. 《Node.js核心技术教程》学习笔记

    <Node.js核心技术教程>TOC \o "1-3" \h \z \u 1.章模块化编程 2019.2.19 13:30' PAGEREF _101 \h 1 08D ...

  5. 设计模式C++实现(1)——策略(Strategy)模式

    目录 策略模式 应用案例 实现的关键 Talk is cheap,let's See The Code 设计思想 参考 策略模式 策略模式定义了一系列算法和行为(也就是策略),他们可以在运行时相互替换 ...

  6. hdu6447

    YJJ's Salesman Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  7. Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut

    cat 查看文件内容 [root@mysql tmp]# cat 2.txt 1234 -n 查看行号 [root@mysql tmp]# cat -n 2.txt      1 1234       ...

  8. sparkSQL中RDD——DataFrame——DataSet的区别

    spark中RDD.DataFrame.DataSet都是spark的数据集合抽象,RDD针对的是一个个对象,但是DF与DS中针对的是一个个Row RDD 优点: 编译时类型安全 编译时就能检查出类型 ...

  9. 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?(转)

    摘自https://blog.csdn.net/jiange_zh/article/details/50198097 在算法竞赛中,我们常常需要用到一个“无穷大”的值,对于我来说,大多数时间我会根据具 ...

  10. 测试与优化bugbugbugbug

    单元测试