大数据技术之_19_Spark学习_04_Spark Streaming 应用解析小结
========== 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 应用解析小结的更多相关文章
- 大数据技术之_19_Spark学习_04_Spark Streaming 应用解析 + Spark Streaming 概述、运行、解析 + DStream 的输入、转换、输出 + 优化
第1章 Spark Streaming 概述1.1 什么是 Spark Streaming1.2 为什么要学习 Spark Streaming1.3 Spark 与 Storm 的对比第2章 运行 S ...
- 大数据技术之_19_Spark学习_02_Spark Core 应用解析小结
1.RDD 全称 弹性分布式数据集 Resilient Distributed Dataset它就是一个 class. abstract class RDD[T: ClassTag]( @tra ...
- 大数据技术之_19_Spark学习_03_Spark SQL 应用解析小结
========== Spark SQL ==========1.Spark SQL 是 Spark 的一个模块,可以和 RDD 进行混合编程.支持标准的数据源.可以集成和替代 Hive.可以提供 J ...
- 大数据技术之_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 ...
- 大数据技术之_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 图存储模式 ...
- 大数据技术之_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 ...
- 大数据技术之_19_Spark学习_01_Spark 基础解析小结(无图片)
1.准备安装包 2.Spark Standalone 即独立模式 2.1.解压安装包到你安装的目录. 2.2.拷贝 conf 目录下的 slaves 文件,将 slave 节点的 hostname ...
- 大数据技术之_16_Scala学习_01_Scala 语言概述
第一章 Scala 语言概述1.1 why is Scala 语言?1.2 Scala 语言诞生小故事1.3 Scala 和 Java 以及 jvm 的关系分析图1.4 Scala 语言的特点1.5 ...
- 大数据技术之_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 ...
随机推荐
- java中配置自定义拦截器中exclude-mapping path是什么意思?
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/>//过滤全部请求 & ...
- 2018.06.29 NOIP模拟 旅馆(线段树)
旅馆 [问题描述] OIEROIEROIER 们最近的旅游计划,是到长春净月潭,享受那里的湖光山色,以及明 媚的阳光.你作为整个旅游的策划者和负责人,选择在潭边的一家著名的旅馆住 宿.这个巨大的旅馆一 ...
- 信息管理代码分析<一>登录密码
题解:这段代码的要求如下,输入一段字符密码(长度<=8)以二进制的形式存放在磁盘中,在输入时需要验证两次输入是否正确.第二个,登录.从磁盘中读取这个文件,然后再输入密码,看两者是否相同. 登录密 ...
- JVM,Java虚拟机基础知识新手入门教程(超级通熟易懂)
作者:请叫我红领巾,转载请注明出处http://www.cnblogs.com/xxzhuang/p/7453746.html,简书地址:http://www.jianshu.com/p/b963b3 ...
- MSDN Webcast 跟我一起从零开始学WCF系列课程
系列课程 >跟我一起从零开始学WCF系列课程 跟我一起从零开始学WCF系列课程(1):WCF概述 (Level 200) 讲 师:徐长龙 课程简介:从 本堂课开始我们将开启一个新的 ...
- VMware Workstation 12 OpenGL ES版本支持情况与设置
概述 开始学习Opengl时,发现VMware Workstation虚拟机无法运行Opengl ES2.0的程序.后来,经过查找最终得知,是因为VMware Workstation11及之前的版本对 ...
- java基础-day4
第04天 java基础语法 今日内容介绍 u Random u 数组 第1章 Random 1.1 产生整数随机数 1.1.1 Random的使用步骤 我们想产生1~100(包含1 ...
- 四则运算 Java (于泽浩,袁浩越)
GitHub 地址 一. 项目要求 题目 实现一个自动生成小学四则运算题目的命令行程序. 需求(全部完成) 使用 -n 参数控制生成题目的个数 Myapp.exe -n 10 使用 -r 参数控制题目 ...
- jvm linux 时区设置
# 背景 在接入集团一个平台的时候,发现录制某个接口到测试环境回放,发现接口入参一致,一个start_day 一个end_day,但回放的时候会多调用一次数据库查询,很是奇怪: 查阅业务代码,发现确实 ...
- C# 读取Excel,一波华丽的操作
C# 读取Excel,其实有很多方法.但是今天要来一波华丽的操作. 先看效果: 以上这波操作使用了 ExcelDataReader 和 ExcelDataReader.DataSet 完成的. Exc ...