========== Spark Streaming 是什么 ==========
1、SPark Streaming 是 Spark 中一个组件,基于 Spark Core 进行构建,用于对流式进行处理,类似于 Storm。
2、Spark Streaming 能够和 Spark Core、Spark SQL 来进行混合编程。
3、Spark Streaming 我们主要关注:
  (1)Spark Streaming 能接受什么数据? kafka、flume、HDFS、Twitter 等。
  (2)Spark Streaming 能怎么处理数据? 无状态的转换(前面处理的数据和后面处理的数据没啥关系)、有转换转换(前面处理的数据和后面处理的数据是有关系的,比如 叠加关系)。

========== Spark Streaming 是怎么实现的 ==========
1、Spark Streaming 采用【微批次】架构。
2、对于整个流式计算来说,数据流可以想象成水流,微批次架构的意思就是将水流按照用户设定的时间间隔分割为多个水流段。一个段的水会在 Spark 中转换成为一个 RDD,所以对水流的操作也就是对这些分割后的 RDD 进行单独的操作。每一个 RDD 的操作都可以认为是一个小的批处理(也就是离线处理)。

========== Spark Streaming DStream 是什么 ==========
1、DStream 是类似于 RDD 和 DataFrame 的针对流式计算的抽象类。在源码中 DStream 是通过 HashMap 来保存所管理的数据流的。K 是 RDD 中数据流的时间,V 是包含数据流的 RDD。
2、对于 DStream 的操作也就是对于 DStream 所包含的所有以时间序列排序的 RDD 的操作。

========== Spark Streaming 怎么用 ==========
1、通过 StreamingContext 来进入 Spark Streaming。可以通过已经创建好的 SparkContext 来创建 StreamingContext。
val ssc = new StreamingContext(sc, Seconds(1))

========== Spark Streaming 的输入 ==========
1、 文件数据源
(1)Spark Streaming 通过 streamingContext.fileStream[KeyClass, ValueClass, InputFormatClass](dataDirectory), 这个方法提供了对目录下文件数据源的支持。
(2)如果文件是比较简单的文本文件,可以使用 streamingContext.textFileStream(dataDirectory) 来代替。
(3)文件数据源目前不支持嵌套目录:
  1)文件需要有相同的数据格式。
  2)文件进入 dataDirectory 的方式需要通过移动或者重命名来实现。
  3)一旦文件移动进目录,则不能再修改,即便修改了也不会再读取新的数据。

2、自定义的 Receiver
(1)需要新建一个 Class 去继承 Receiver,并给 Receiver 传入一个类型参数,该类型参数是需要接收的数据的类型。
(2)需要去复写 Receiver 的方法: onStart 方法(在 Receiver 启动的时候调用的方法)、onStop 方法(在 Receiver 正常停止的情况下调用的方法)。
(3)在程序中通过 streamingContext.receiverStream(new CustomeReceiver) 来调用自定义的 Receiver。

3、RDD 数据源
(1)可以通过 StreamingContext.queueStream(rddQueue) 这个方法来监控一个 RDD 的队列,所有加入到这个 RDD 队列中的新的 RDD,都会被 Streaming 去处理。

4、Spark Streaming 与 Kafka 的集成
(1)启动 zookeeper 集群和 kafka 集群。

[atguigu@hadoop102 zookeeper-3.4.10]$ pwd
/opt/module/zookeeper-3.4.10
[atguigu@hadoop102 zookeeper-3.4.10]$ /bin/zkServer.sh start
[atguigu@hadoop103 zookeeper-3.4.10]$ /bin/zkServer.sh start
[atguigu@hadoop104 zookeeper-3.4.10]$ /bin/zkServer.sh start [atguigu@hadoop102 kafka]$ pwd
/opt/module/kafka
[atguigu@hadoop102 kafka]$ bin/kafka-server-start.sh -daemon ./config/server.properties
[atguigu@hadoop103 kafka]$ bin/kafka-server-start.sh -daemon ./config/server.properties
[atguigu@hadoop104 kafka]$ bin/kafka-server-start.sh -daemon ./config/server.properties

(2)创建两个 topic,一个为 source,一个为 target

bin/kafka-topics.sh --create \
--zookeeper 192.168.25.102:2181,192.168.25.103:2181,192.168.25.104:2181 \
--replication-factor 2 \
--partitions 2 \
--topic source bin/kafka-topics.sh --create \
--zookeeper 192.168.25.102:2181,192.168.25.103:2181,192.168.25.104:2181 \
--replication-factor 2 \
--partitions 2 \
--topic targe

(3)启动 kafka console producer 写入 source topic

bin/kafka-console-producer.sh \
--broker-list 192.168.25.102:9092,192.168.25.103:9092,192.168.25.104:9092 \
--topic source

(4)启动 kafka console consumer 监听 target topic

bin/kafka-console-consumer.sh \
--bootstrap-server 192.168.25.102:9092,192.168.25.103:9092,192.168.25.104:9092 \
--topic target

(5)启动 kafka Streaming 程序

[atguigu@hadoop102 ~]$ /opt/module/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \
--class com.atguigu.streaming.KafkaStreaming \
/opt/software/sparkjars/kafkastreaming-jar-with-dependencies.jar

========== Spark Streaming 的转换 ==========
1、这些方法定义在哪儿?
  (1)在 DStream 的类定义中,主要提供对于值类型的 DStream 的操作。
  (2)在 PairDStreamFunctions 的类定义中,主要提供对于 K-V 对形式的 DStream 的操作。

2、无状态装换

3、有状态装换
(1)updateStateByKey 函数

  def updateStateByKey[S: ClassTag](
      updateFunc: (Seq[V], Option[S]) => Option[S]
    ): DStream[(K, S)] = ssc.withScope {
    updateStateByKey(updateFunc, defaultPartitioner())
  } S 表示的是需要保存的状态的类型。
updateFunc 是定义了每一批次 RDD 如何来更新的状态值的方法。 
Seq[V] 是当前批次相同 key 的值的集合。Option[S] 是框架自动提供的,存储的是上一次保存的状态的值。
updateStateByKey 会返回一个新的 DStream,该 DStream 中保存了 (Key,State) 的序列。

(2)window 函数

4、检查点机制
  (1)StreamingContext 是能够从检查点中恢复数据的,可以通过 StreamingContext.getOrCreate(checkpointDirectory, functionToCreateContext) 来创建。
  (2)Streaming 中的累加器和广播变量是不能够从检查点中恢复。

========== Spark Streaming 的输出 ==========

========== Spark Streaming 与 Storm 的比较 ==========
Spark Streaming:
  SPark Streaming 用于对流式进行处理,类似于 Storm。
  Spark Streaming 绝对谈不上比 Storm 优秀。这两个框架在实时计算领域中,都很优秀,只是擅长的细分场景并不相同。

Spark Streaming 吞吐量高、良好的 spark 的扩展性、和 Spark Core、Spark SQL 无缝整合,实时处理出来的中间数据
Storm 支持事务机制、健壮性 / 容错性、动态调整并行度等特性。

Storm --> 纯实时
Spark Streaming --> 准实时(RDD 转换)

应用场景:
对于 Storm 来说:
  1、纯实时 --> 实时金融系统,金融交易和分析。
  2、事务机制和可靠性机制。
  3、如果还需要针对高峰低峰时间段,动态调整实时计算程序的并行度,以最大限度利用集群资源(通常是在小型公司,集群资源紧张的情况),也可以考虑用 Storm。
  4、不需要在中间执行 SQL 交互式查询、复杂的 Transformation 算子等,那么用 Storm 是比较好的选择。

对于 Spark Streaming 来说:
  1、还包括了离线批处理、交互式查询等业务功能。
  2、涉及到高延迟批处理、交互式查询等功能。

大数据技术之_19_Spark学习_04_Spark Streaming 应用解析小结的更多相关文章

  1. 大数据技术之_19_Spark学习_04_Spark Streaming 应用解析 + Spark Streaming 概述、运行、解析 + DStream 的输入、转换、输出 + 优化

    第1章 Spark Streaming 概述1.1 什么是 Spark Streaming1.2 为什么要学习 Spark Streaming1.3 Spark 与 Storm 的对比第2章 运行 S ...

  2. 大数据技术之_19_Spark学习_02_Spark Core 应用解析小结

    1.RDD 全称 弹性分布式数据集 Resilient Distributed Dataset它就是一个 class. abstract class RDD[T: ClassTag](    @tra ...

  3. 大数据技术之_19_Spark学习_03_Spark SQL 应用解析小结

    ========== Spark SQL ==========1.Spark SQL 是 Spark 的一个模块,可以和 RDD 进行混合编程.支持标准的数据源.可以集成和替代 Hive.可以提供 J ...

  4. 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器

    第1章 Spark SQL 概述1.1 什么是 Spark SQL1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 DataFrame1.2.3 DataS ...

  5. 大数据技术之_19_Spark学习_05_Spark GraphX 应用解析 + Spark GraphX 概述、解析 + 计算模式 + Pregel API + 图算法参考代码 + PageRank 实例

    第1章 Spark GraphX 概述1.1 什么是 Spark GraphX1.2 弹性分布式属性图1.3 运行图计算程序第2章 Spark GraphX 解析2.1 存储模式2.1.1 图存储模式 ...

  6. 大数据技术之_19_Spark学习_01_Spark 基础解析 + Spark 概述 + Spark 集群安装 + 执行 Spark 程序

    第1章 Spark 概述1.1 什么是 Spark1.2 Spark 特点1.3 Spark 的用户和用途第2章 Spark 集群安装2.1 集群角色2.2 机器准备2.3 下载 Spark 安装包2 ...

  7. 大数据技术之_19_Spark学习_01_Spark 基础解析小结(无图片)

    1.准备安装包 2.Spark Standalone 即独立模式  2.1.解压安装包到你安装的目录.  2.2.拷贝 conf 目录下的 slaves 文件,将 slave 节点的 hostname ...

  8. 大数据技术之_16_Scala学习_01_Scala 语言概述

    第一章 Scala 语言概述1.1 why is Scala 语言?1.2 Scala 语言诞生小故事1.3 Scala 和 Java 以及 jvm 的关系分析图1.4 Scala 语言的特点1.5 ...

  9. 大数据技术之_09_Flume学习_Flume概述+Flume快速入门+Flume企业开发案例+Flume监控之Ganglia+Flume高级之自定义MySQLSource+Flume企业真实面试题(重点)

    第1章 Flume概述1.1 Flume定义1.2 Flume组成架构1.2.1 Agent1.2.2 Source1.2.3 Channel1.2.4 Sink1.2.5 Event1.3 Flum ...

随机推荐

  1. 2018.09.02 bzoj1003: [ZJOI2006]物流运输(dp+最短路转移)

    传送门 dp好题. 每一天要变更路线一定还是走最短路. 所以l~r天不变更路线的最优方案就是把l~r天所有不能走的点都删掉再求最短路.显然是可以dp的. 设f[i]表示第i天的最优花销.那么我们枚举在 ...

  2. Mac pro 安装IntelliJ IDEA 2017版

    1.官网下载这个版本https://www.jetbrains.com 2.点击下载即可 3.下载好后放入本地 4.启动mac终端进行破解 输入命令:sudo vim /private/etc/hos ...

  3. mysql 经典错误解决方案 :Incorrect string value 'xE6x95x85xE4xBAx8B...' for column

    1.关闭当前服务器2.删除正在使用的数据库drop database 数据库名字;3.查看字符集, SHOW VARIABLES LIKE 'character_set_%'; 把所有latin1的都 ...

  4. HDU1045 Fire Net(DFS枚举||二分图匹配) 2016-07-24 13:23 99人阅读 评论(0) 收藏

    Fire Net Problem Description Suppose that we have a square city with straight streets. A map of a ci ...

  5. win7 环境安装Python + IDE(vs2010)开发

    1.下载python安装文件 python-2.7.10.msi 网址:https://www.python.org/downloads/release/python-2710/ ,根据自己环境,选择 ...

  6. web问题

    模拟form提交过程中form(hidden)时:The frame requesting access has a protocol of "http", the frame b ...

  7. 关于Java_Web连接Oracle数据库

    1.前提条件 1>装有Oracle数据库(因为连接的时候需要开启两项服务) 2>myeclipse或eclipse(支持WebProject的版本)开发环境,本机以myeclipse为例, ...

  8. asp.net—策略模式

    一.什么是策略模式 定义:定义一系列算法,把一个个算法封装成独立类并实现同一个接口,使得它们之间可以相互替换. 二.怎么使用策略模式 首先模拟一个场景:有一个用户想买车.  可以有多种方式买车: (1 ...

  9. dorado7-发布

    1.首先将configure.properties中Debug删除 2.eclipse自带的打包方式进行打包 2.1 next==>选择打包文件存放的路径==>finish==>xx ...

  10. String-680. Valid Palindrome II

    Given a non-empty string s, you may delete at most one character. Judge whether you can make it a pa ...