大数据技术之_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 ...
随机推荐
- 2018.10.14 NOIP训练 直线(二分答案+st表+切比雪夫距离转化)
传送门 二分答案好题. 这已经是当年普及组模拟时挖的坑了233. 这道题还是很不错的. 考虑把坐标系转个45度再操作. 为了不爆精度可以直接转切比雪夫距离. 然后就直接二分答案. 其中竖线就按二分的答 ...
- Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from resource Caused by: org.hibernate.DuplicateMappingException: duplicate import: Person refers to both cn.itcast.
此错误是说有两个相同的名字的配置文件,所以不知道查找哪个.解决方法就是把不需要的那个配置文件删除. 删除mapping中不需要的那个xml文件即可
- UVa 10340 All in All (水题,匹配)
题意:给定两个字符串,问第一个串能不能从第二个串通过删除0个或多个字符得到. 析:那就一个字符一个字符的匹配,如果匹配上了就往后走,判断最后是不是等于长度即可. 代码如下: #include < ...
- CentOS7查看网络的相关命令
转载自:https://www.linuxidc.com/Linux/2015-07/119555.htm 1.切换到超级用户 [Oscar@localhost 桌面]$ su root 2.查询可用 ...
- (能被11整除的数的特征)The shortest problem --hdu
链接: http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=595 若一个整数的个位数字截去,再从余下的数中 ...
- 20155225 2016-2017-2 《Java程序设计》第九周学习总结
20155225 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC入门 了解JDBC架构 使用JDBC API JDBC是用于执行SQL的解决方案,开 ...
- PAT甲 1006. Sign In and Sign Out (25) 2016-09-09 22:55 43人阅读 评论(0) 收藏
1006. Sign In and Sign Out (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...
- El中调用java静态方法
最近在项目中遇到需要调用静态方法的问题,形如: <c:forEach items="beans" var="bean"> <p>总数:$ ...
- H2内存数据库支持存储到文件
准备工作 1.下载JDK(本人下载的版本为JDK1.7).设置环境变量JAVA_HOME,设置PATH(%JAVA_HOME%\bin%). 2.下载并解压:h2-2014-07-13.zip 官网下 ...
- SQL SERVER 2008 附加数据库出现只读问题。
问题描述 在附加数据库时出现的图片: 解决办法 步骤一,修改文件夹的 1.打开该数据库文件存放的目录或数据库文件的属性窗口,选择"属性"菜单->选择"安全&qu ...