SparkStreaming的介绍及原理

SparkStreaming的介绍及原理一、SparkStreaming的介绍1.离线和流处理的区别1)离线处理是针对一个批次,这个批次一般情况下都比较大流处理对应的数据是连续不断产生,处理时间间隔非常短的数据2)离线处理程序,因为数据是有限的(bounded),所以会终止流数据因为是连续不断的产生,所以数据是无限的(unbounded)由于数据的特征,一般离线处理比较缓慢,流数据处理相对较快流处理:…

大家好,又见面了,我是你们的朋友全栈君。

一、SparkStreaming的介绍

1.离线和流处理的区别

  • 1)离线处理是针对一个批次,这个批次一般情况下都比较大流处理对应的数据是连续不断产生,处理时间间隔非常短的数据
  • 2)离线处理程序,因为数据是有限的(bounded),所以会终止流数据因为是连续不断的产生,所以数据是无限的(unbounded)
    1. 由于数据的特征,一般离线处理比较缓慢,流数据处理相对较快

      流处理:
              实时流处理:(Storm 、Flink)
                每一条记录,都会提交一次计算作业。
                每一条记录,一般都被称为一个事件
            准实时流处理:(Spark Streaming)
                 介于批处理和实时流处理之间,是一个较小的时间间隔的数据处理
                 其底层原理还是基于SparkCore来处理
      

2.Spark Streaming的简介

  • 1)Spark Streaming 其实就是一种spark提供的,对于大数据,进实时计算的一种框架。基本的计算模型,

  • 2)针对实时计算的特点,在RDD之上,进行了一层封装,叫做DStream。

  • 3)Spark的运行模式多种多样,灵活多变,部署在单机上时,既以用本地模式运行,也可以用伪分布式模式运行。

  • 4)Spark Streaming是Spark Core
    API的一种扩展,它可以用于进行大规模、高吞吐量、容错的实时数据流的处理。它支持从很多种数据源中读取数据,比如Kafka、Flume等。并且能够使用类似高阶函数的复杂算法来进行数据处理,比如map、reduce、join和window。处理后的数据可以被保存到文件系统、数据库、Dashboard等存储中。
    在这里插入图片描述

二、Spark Streaming基本工作原理介绍

1.Spark Streaming提供了一种高级的抽象,DStream

“离散流”,它代表了一持续不断的数据流,DStream可以通过输入数源来创建,比如kafka、Flume等
1). DStream的内部,其实是一系列持续不断产生的RDD。
DStream中的每个RDD都包括了一个时间段内的数据。
在这里插入图片描述
2.Spark Streaming由Spark Core的计算引擎来实现的

  • 1)对DStream应用的算子,比如map,其实在底层都会被翻译为DStream中 每个RDD的操作。
  • 2) Spark Streaming 对Spark Core 进行了一层封装,隐藏了节,然后对开发人员提供了方便易用的高层次的API。
  • DataFream
    3)步骤
    1、接受实时输入数据流,然后将数据拆分成多个batch(比如每收集1秒的数据封装为一个batch)
    2、将每个batch交给Spark的计算引擎进行处理,最后生产出一个结果数据流(其中的数据,也是由一个一个的batch所组成)

三、Spark Streaming与其他流式框的对比分析

  • 1、SparkStreaming绝对谈不上比Storm、Flink优秀。这两个框架在实时计算领域中,都很优秀,只是擅长的细分场景并不相同。
  • 2、Spark Streaming在吞吐量上要比Storm优秀。
  • 3、Storm在实时延迟度上,比SparkStreaming就好多了,前者是纯实时,后者是准实时。而且,Storm的事务机制、健壮性/容错性、动态调整并行度等特性,都要比Spark
    Streaming更加优秀。
  • 4、Spark Streaming,有一点是Storm绝对比不上的,就是:它位于Spark整个生态技术栈中,因此Spark Streaming可以和Spark Core、SparkSQL、Spark Graphx无缝整合,换句话说,我们可以对实时处理出来的中间数据,立即在程序中无缝进行延迟批处理、交互式查询等操作。这个特点大大增强了Spark
    Streaming的优势和功能。

四、Spark Streaming 核心术语

1.离散流(DStream) :
这是 Spark Streaming 对内部持续的实时数据流的抽象描述,即我们处理的一个实时数据流,在 Spark Streaming 中对应于一个 DStream 实例。
2.批数据(batch data):
这是化整为零的第一步,将实时流数据以时间片为单位进行分批,将流处理转化为时间片数据的批处理。
3.时间片或批处理时间间隔(batch interval)
这是人为地对流数据进行定量的标准,以时间片作为我们拆分流数据的依据。一个时间片的数据对应一个 RDD 实例。
4.窗口长度(window length)
一个窗口覆盖的流数据的时间长度。必须是批处理时间间隔的倍数
5.滑动时间间隔
前一个窗口到后一个窗口所经过的时间长度。必须是批处理时间间隔的倍数
6.Input DStream
一个InputDStream是一个特殊的DStream,将Spark Streaming连接到一个外部数据源来读取数据

1.DStream相关操作
DStream上的原语与RDD类似,分为Transformations(转换)和Output Operations(输出和RDD的action操作类似)两种。

2.StreamingContext
在Spark Streaming当中,StreamingContext是整个程序的入口

object StreamingContextTest {
 def main(args: Array[String]): Unit = {
 val sparkConf = new SparkConf().setAppName("SCTest").setMaster("local[4]")
 val streamingContext = new StreamingContext(sparkConf, Seconds(2))
 }
}

当创建完成StreamingContext之后,再按下列步骤进行:

1、通过输入源创建 InputDStream
2、对 DStream 进行 transformation 和 output 操作,这样操作构成了后期流式计算的逻辑
3、 通过 streamingContext.start()方法启动接收和处理数据的流程
4、使用 streamingContext.awaitTermination()方法等待程序结束(手动停止或出错停止)
5、也可以调用 streamingContext.stop()方法结束程序的

3.InputDStreams 和Receivers

InputDStream 指的是从数据流的源头接受的输入数据流,在将来习的 StreamingWordCount程序当中,val lines =ssc.textFileStream(args(0)) 就是一种 InputDStream。除文件流外每个InputDStream 都关联一个 Receiver 对象,该 Receiver 对象接收数据源传来的数据并将其保存在内存中以便后期 Spark 处理。
Spark Streaming提供两种原生支持的数据源和自定义的数据源:

1、Basic Sources(基础数据源)
直接通过 StreamingContext API 创建,例如文件系统(本地文件系统及分布式文件系统)、Socket 连接及 Akka 的 Actor。
2、Advanced Sources(高级流数据源)
如 Kafka, Flume, Kinesis, Twitter 等,需要借助外部工具类,在运行时需要外部依赖(下一节内容中介绍)
3、Custom Sources(自定义流数据源)
Spark Streaming 还支持用户,它需要用户定义 receiver

注意:

1、在本地运行 Spark Streaming 时,master URL 能使用”local”或”local[1] ”,因为当 Input DStream 与 Receiver(如sockets, Kafka, Flume 等)关联时,Receiver 自身就需要一个线程来运行,
2、在集群上运行 Spark Streaming 时,分配给 Spark Streaming 程的 CPU 核数也必须大于receiver 的数量,否则系统将只接受数据,无法处理数据。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151237.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 普通大一学生的自我反思[通俗易懂]

    普通大一学生的自我反思[通俗易懂]​ 暑假高考完,得知自己被计科(普通本科)录取,便开始在知乎等地方搜索相关知识,以此来提高自己的认识。​ 先是在b站上跟着比特鹏哥学完了c语言(基础),这里又要有一大段故事了,我家在江苏扬州,大概是9月份突然爆发了疫情,就被关在家里不让出去,(在家里坐牢,核酸检测,基本隔一天就要做一次)就在B站上天天看鹏哥学c语言,一开始有新鲜劲,学起来还是很有动力的,后来学到指针,很是痛苦,就又专门去B站听了其他的指针教程,学着学着慢慢就明白了,当时每天的生活节奏基本就是,起床打开电脑学习c语言,学饿了,吃点饭(由于疫

    2022年7月15日
    11
  • Vijos1051. 送给圣诞夜的极光

    Vijos1051. 送给圣诞夜的极光

    2022年1月30日
    183
  • WPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel

    WPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanelWPF面板布局介绍Grid、StackPanel、DockPanel、WrapPanel回顾上一篇,我们介绍了基本控件及控件的重要属性和用法,我们本篇详细介绍WPF中的几种布局容器及每种布局容器的使用场景,当然这些都是本人在实际项目中的使用经验,可能还存在错误之处,还请大家指出。本文大纲1、Grid2、StackPanel3、DockPanel…

    2022年7月22日
    5
  • ideamaven仓库设置_搭建maven仓库

    ideamaven仓库设置_搭建maven仓库1、Maven下载在maven官网下载maven安装:http://maven.apache.org/download.cgi下载之后解压到安装路径:完成安装。2、Maven本地仓库配置在本地新建本地仓库文件夹,替代默认新建在系统盘的仓库地址,因为随着时间,仓库会越来越大,所以建议自己新建一个本地仓库:Maven远程库也是位于网络上的存储库。因为maven在获取需要的jar包时会首先从本地仓库获取,当本地仓库不存在需要的jar包时会从setting.xml的…

    2022年9月23日
    0
  • ListView-1(包括常用属性和方法)「建议收藏」

    ListView-1(包括常用属性和方法)「建议收藏」Spinner-下拉列表在vakues里建立一个arrays.xml文件,为listview提供数据,也可以写在string.xml文件里activity_main.xml布局android:

    2022年7月4日
    17
  • Node.js实战:Express实现简单后台登录系统

    Node.js实战:Express实现简单后台登录系统1.建立Express项目在进行以下操作之前,请确保你的电脑已经装好Node.js和Express框架。首先打开命令行提示符,输入express–view=ejs-ewww其中–view=ejs表示使用ejs模版引擎,-e指定项目名称,此处设为www。回车之后,当前文件夹下会多出一个名为www的文件夹,这个就是我们项目所在的地方。此时,www文件夹中默认已经有了基本的文件,但是相关

    2022年5月29日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号