实时计算介绍

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. Linux 安装FastDFS<准备>(使用Mac远程访问)

    阅读本文需要一定的Linux基础 一 FastDFS简介 fastdfs是用c语言编写的一款开源分布式文件系统, fastdfs为互联网量身定制, 充分考虑了冗余备份, 负载均衡, 线性扩容等机制, ...

  2. 2018 ACM-ICPC World Finals - Beijing F.Go with the Flow

    先枚举所有的列长度 对于每种列长度,然后里面用dp算 #include <algorithm> #include <cmath> #include <cstdio> ...

  3. 如何使用Win+R快捷键打开自定义程序

    鉴于大家对于提高效率这块有争议,更改了下标题. 大家平时一定都使用过Win+R运行快捷键, 在运行里可以快捷的打开一些系统软件,比如说输入mstsc是打开远程连接,输入explorer是打开文件管理器 ...

  4. Linux内核学习笔记(4)-- wait、waitpid、wait3 和 wait4

    进程调用 exit() 退出执行后,被设置为僵死状态,这时父进程可以通过 wait4() 系统调用查询子进程是否终结,之后再进行最后的操作,彻底删除进程所占用的内存资源. wait4() 系统调用由 ...

  5. PRML学习笔记第一章

    [转] PRML笔记 - 1.1介绍 模式识别的目标 自动从数据中发现潜在规律,以利用这些规律做后续操作,如数据分类等. 模型选择和参数调节 类似的一族规律通常可以以一种模型的形式为表达,选择合适模型 ...

  6. 原生开发小程序 和 wepy 、 mpvue 对比

    1.三者的开发文档以及介绍: 原生开发小程序文档:点此进入 wepy 开发文档:点此进入 mpvue 开发文档:点此进入 2.三者的简单对比: 以下用一张图来简单概括三者的区别: 小程序支持的是 WX ...

  7. selenium--判断元素是否存在

    # coding:utf-8from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitf ...

  8. Alpha发布—文案+美工展示

    目录 团队简介 项目进展 组内分工 队员总结 后期计划 一.团队简介 二.项目进展 从选题发布到今天的Alpha发布,我们团队经历了许许多多的磨难.我们最终设计了如下的功能:首页.班级.个人.更多.打 ...

  9. Linux系统LVS搭建笔记

    因为客户是国有企业,且一次性购买了14台服务器(16核),14台中暂且先用8台,其中LVS使用5台,NFS一台主要为了共享WEB系统(多台电脑的1.5T的硬盘容量浪费了).MySQL两台,Memcac ...

  10. Python:模块学习——sys模块

    sys模块常见函数和变量 sys.argv:命令行参数,实现从程序外部向程序传递参数 [注]:(1) sys.argv[0] 表示代码本身的文件路径 (2)sys.argv是一个元组,可以用[ ]提取 ...