1.什么是Spark Streaming

Spark Streaming是基于Spark Core之间的实时计算框架,可以从很多数据源消费数据并对数据进行处理。它是Spark核心API的一个扩展与封装,可以实现高吞吐、可容错的实时流数据处理框架。支持从多种数据源获取数据,包括Kafka, Flume, Twitter, ZeroMQ, Kinesis以及TCP sockets, 从数据源获取到数据之后,可以使用像map, reduce, join,window等高级函数进行复杂的处理,最后通过OutputOperation类算子可以将处理结果存储到多种存储结构如hdfs,数据库,或直接输出到仪表盘。下面看Spark Streaming官方提供的数据处理流程图:

来自:Spark官方文档

Spark Streaming在内部的处理机制是,接收实时数据,并根据一定的时间间隔将流式数据拆分成一个个微批的数据,然后通过Spark Engine来处理这一批批的数据,最终得到处理后的一批批的结果数据。如下图所示:

来源:Spark官方文档

可以这样来理解,它把流数据按时间间隔分割成一批批的数据后,通过一个先进先出的队列,然后Spark Engine从该队列中依次取出一批批的数据,把批数据封装成一个个RDD依赖关系构成的DAG,然后进行处理,这非常类似于生产者消费者模型。

2.理解DStream

DStream(discretized stream)离散流,它代表一个连续的数据流,本质上就是一系列连续的RDD,DStream其实就是对RDD的封装,可以形象地把DStream看成是一个RDD的工厂,在一个DStream内部里面生产的都是具有相同计算逻辑的RDD,只不过是将来运行时里面要处理的数据是不相同的。DStream是Spark Streaming中的一个最基本的抽象,代表了一系列的连续的数据流,底层封装的就是一系列连续的RDD,对DStream进行操作,本质上就是对RDD进行操作。

DStream: 来自Spark官方

和RDD一样,DStream和DStream之间存在着依赖关系,在一个固定的时间点,多个存在依赖关系的DStream其底层的对应的RDD也存在着依赖关系,这些具有依赖关系的底层RDD构成了一个DAG, 周期性将这一个个的DAG提交到集群上运行。

来源:Spark官网

3.Spark Streaming的专业术语解释

  • batch: 这是化整为零的第一步,将实时的流数据以时间片为单位进行分批操作,将流处理转化为时间片数据的批处理。随着时间的推移,这些处理结果就形成了对应的结果数据流了。
  • batch interval: 这是人为对流数据进行定量的标准,以时间片作为我们拆分数据流的依据。一个时间片的数据对应一个RDD实例。
  • window length: 一个窗口涵盖的流数据的时间长度。必须是批处理时间间隔的倍数。
  • slide interval: 前一个窗口到后一个窗口所经过的时间长度。必须是批处理间隔的倍数。

4.Spark Streaming架构与编程模型

Spark Streaming是一个对实时数据流进行高吞吐、容错处理机制的流式处理系统。它的计算流程与编程模型如下:

  • Spark Streaming将流式计算分解成一系列小批处理作业。这里的用到的批处理引擎是Spark Core, 也就是把Spark Streaming的源输入数据按照batch interval分成一段段的数据(DStream);
  • 每段数据底层上都是封装的RDD, 然后对DStream进行Transformation操作,本质上就是针对RDD的Transformation操作,将RDD经过转换将中间结果保存在内存中。
  • 最后对它进行OutputOperation操作,将结果输出或存储;

Spark Streaming编程模型

5.快速示例

在了解了Spark Streaming的概念及运行原理后,让我们通过一个编写一个快速示例来体会Spark Streaming的处理过程,这个示例是网络版的wordcount, 是通过接收TCP socket端发过来的文本来实时统计单词的个数。

在编写程序前,先要在pom.xml添加Spark Streaming的依赖:

        org.apache.spark            spark-streaming_2.12            ${spark.version}

使用的IDEA工具

程序代码及说明

import org.apache.spark.SparkConfimport org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}import org.apache.spark.streaming.{Seconds, StreamingContext}object ScalaNetworkWordCount {  def main(args: Array[String]): Unit = {    //local[2]:由于程序执行SparkStreaming应用需要至少一个线程,用于接收网络端口的数据也至少需要一个task,所以,这里至少需要2个工作线程    val conf: SparkConf = new SparkConf().setMaster("local[2]").setAppName(ScalaNetworkWordCount.getClass.getSimpleName)    //将数据流切分批次的时间间隔设置为10s, 也就是说对于数据流,每10s切一下, 将来的每个批次就是处理10s的批次数据    //ssc是接入流数据的入口,它提供了从外部数据源接入数据流的方法    val ssc = new StreamingContext(conf, Seconds(10))    //读取hostname为"localhost"的9999端口的socket文本数据    //数据读取过来的默认的存储是default: StorageLevel.MEMORY_AND_DISK_SER_2    //即存在内存和磁盘,序列化,有两个副本,这是容错机制的一种应用    //ReceiverInputDStream是DStream的一个具体实现类,它代表从socket的9999端口读取的一行行的文本数据流    val lines: ReceiverInputDStream[String] = ssc.socketTextStream("localhost", 9999)    //每行的文本数据流按空格切分单词,压平    //flatMap是DStream的转换算子,是一对多,对于每一行文件,切分多个单词    //由这些单词组成了新的DStream    val words: DStream[String] = lines.flatMap(_.split(" "))    //对每个单词计数1,组成一个(word,1)的键值对,转换为新的DStream    val pairs: DStream[(String, Int)] = words.map((_, 1))    //计算每个批次中单词的数据    //通过上步的转换,假如10s内的批次有以下数据:(a,1)(b,1),(a,1),(a,1),(a,1),(b,1),(c,1)    //经过聚合,可以得到聚合后的单词与数量组成的键值对DStream: (a,4), (b,2), (c,1)    val reducedWords: DStream[(String, Int)] = pairs.reduceByKey(_ + _)    //打印该批次的数据, print()是一个OutputOperations算子,是触发执行的    reducedWords.print()    //启动计算    ssc.start()    //等待被终止    ssc.awaitTermination()  }}

你需要运行NetCat来启动9999端口(在unix-like操作系统上的小工具):

启动:nc -lk 9999

在socket端输入文件数据

Spark Streaming就可以获取这一批次的数据:

sparkstreaming监听hdfs目录如何终止_四十六、Spark Streaming简介及入门相关推荐

  1. sparkstreaming监听hdfs目录如何终止_Spark笔试题:Spark Streaming 反压机制

    Spark Streaming 反压机制是1.5版本推出的特性,用来解决处理速度比摄入速度慢的情况,简单来讲就是做流量控制.当批处理时间(Batch Processing Time)大于批次间隔(Ba ...

  2. sparkstreaming监听hdfs目录如何终止_HDFS—HA高可用详解

    一.HA概述 1)所谓HA(high available),即高可用(7*24小时不中断服务). 2)实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA 机制:HDFS的HA和Y ...

  3. sparkstreaming监听hdfs目录_flume kafka和sparkstreaming整合

    本文介绍Flume.Kafka和Sparkstreaming的整合.代码流程是,我们通过shell脚本重播测试轨迹数据到指定轨迹文件中,使用Flume监听该轨迹数据文件,实时将轨迹数据发送到Kafka ...

  4. sparkstreaming监听hdfs目录_大数据系列之Spark Streaming接入Kafka数据

    Spark Streaming官方提供Receiver-based和Direct Approach两种方法接入Kafka数据,本文简单介绍两种方式的pyspark实现. 1.Spark Streami ...

  5. sparkstreaming监听hdfs目录_Spark Streaming消费Kafka数据的两种方案

    下午的时候翻微信看到大家在讨论Spark消费Kafka的方式,官网中就有答案,只不过是英文的,当然很多博客也都做了介绍,正好我的收藏夹中有一篇文章供大家参考.文章写的通俗易懂,搭配代码,供大家参考. ...

  6. 打怪升级之小白的大数据之旅(四十六)<HDFS各模块的原理>

    打怪升级之小白的大数据之旅(四十六) HDFS各模块的原理 上次回顾 上一章,我们学习了HDFS的基本知识以及一些常用的操作,本章,我们对HDFS各模块的原理进行讲解,了解清楚这些,可以更好的辅助我们 ...

  7. pdfstamper生成pdf无法显示汉字_正点原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验...

    1)实验平台:正点原子水星 STM32F4/F7 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载 ...

  8. 光盘显示0字节可用_正点原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验

    1)实验平台:正点原子水星 STM32F4/F7 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载 ...

  9. Spark Streaming之:Flume监控目录下文件内容变化,然后Spark Streaming实时监听Flume,然后从其上拉取数据,并计算出结果

    1.安装flume 2.到Spark-Streaming官网下载poll方式的Sink 3.将sink放入到flume的lib包里面 4.先启动flume(多个),然后在启动Streaming程序 下 ...

最新文章

  1. 石英晶体振荡器的结构
  2. 全球数字孪生市场大预测:2025 年的 358 亿美元,年复合增长率(CAGR)高达 37.8%...
  3. Cacti 插件中setup.php 文件的编写
  4. Java 洛谷 提交完题目的代码之后一直停留在 ( 正在等待编译……),刷新页面之后 ,显示 Unaccepted 0分
  5. 2021-07-09
  6. hook java_Java 实现 Hook 对鼠标键盘监听 - 沐早'S NOTEBOOK - CSDN博客
  7. Fiori Launchpad Tile点击后跳转的调试技巧
  8. pidof -x 不管用_专业摄影师最佳助手富士X-T200评测
  9. http://bbs.winos.cn/viewthread.php?tid=1147extra=page=2
  10. RestTemplate返回List类型,用数组接收
  11. php pop3,php使用smtp,pop3协议收发邮件代码
  12. 一定质量的封闭气体被压缩后_螺杆压缩机转子型线设计原则及发展过程
  13. 如何在Mac禁用NTFS for Mac 15
  14. 灵光一闪-(面对对象实践)
  15. 古今地名对照总表 (按笔划数排序,强烈推荐的资料)
  16. mysql 无法创建sock,mysql.sock无法打开的问题
  17. 硅谷创业天堂的启示!
  18. 读后感:《走出软件作坊》51:幽幽一缕香
  19. Filtered off site request to
  20. 本土回忆! 即使你走的再远,也不能忘了让你生长的老家文化~

热门文章

  1. @程序员,区块链开发平台避坑指南!
  2. 华为腾讯众安微众360大咖齐聚,2019中国区块链开发者大会首批议程曝光!
  3. 开源项目到底归谁管?
  4. 微信支付宝关闭三星Galaxy指纹支付;乐视网回应贾跃亭破产;Chrome 78发布|极客头条...
  5. 搜索引擎难做,为什么微软必应活了下来?
  6. 一流程序员都有哪些高效编程习惯?
  7. 再见 Python!Yann LeCun 警告:深度学习需要新编程语言
  8. 美检方或起诉刘强东;百度对呛微信规则;澳洲调查 Facebook | 极客头条
  9. 从技术上解读大数据的应用现状和开源未来! | 技术头条
  10. 硅谷还是程序员的“圣地”吗?