概述
什么是 Spark Streaming?
Spark Streaming is an extension of the core Spark API that enables scalable, high-throughput, fault-tolerant stream processing of live data streams.
根据官网的解释,Spark Streaming是一个基于Spark Core的一个高扩展,高吞吐量,容错的一个处理实时流数据的 工具(流处理).
数据的流处理
Data can be ingested from many sources like Kafka, Flume, Kinesis, or TCP sockets, and can be processed using complex algorithms expressed with high-level functions like map, reduce, join and window. Finally, processed data can be pushed out to filesystems, databases, and live dashboards.
官网说明中,可以发现,数据可以是Kafka,Flume等数据源头,经过相应的转化处理,可以将处理的结果push到外部文件系统,数据库等
处理流程图
一句话总结:将不同的数据源经过Spark Streaming处理,接着将处理的结果输出到外部文件系统
其中,Spark Streaming拥有下面几个特性:
- 高度容错(能够从错误中快速恢复过来)
- 能够运行在成百上千的机器节点上
- 具有低延时
- 可以结合机器学习,图计算等同层框架做相应处理
上面的第四点,想强调一下,这个特性很重要的,这样我们就可以结合其余的子框架来做更复杂的处理.这点也体现了
One Stack to rule them all.
"一栈式解决不同场景"
工作原理
Internally, it works as follows. Spark Streaming receives live input data streams and divides the data into batches, which are then processed by the Spark engine to generate the final stream of results in batches.
官网说明中,可以发现,Spark Streaming会去接收实时输入的数据流,将接收的数据流按照要求分成一些小批次数据,将拆分的每一个小批次数据交给Spark Engine去处理,最终,也会得到一些小批次的处理结果
如图所示:
Spark Streaming应用场景
简单举个大家熟悉的例子:
Spark Streaming可以用来做电商网站的实时推荐商品系统
,想想,现在,当你在购物网站上搜索浏览了某个数据,那么,马上它就会为你实时推荐相应的商品,供你选择,这样,可以加大网站的盈利
再次理解Spark Streaming的工作原理
工作原理(粗粒度)
Spark Streaming接收到实时数据流,将数据按照指定的时间切成一些小的数据块,然后将一系列的小的数据库传给Spark Engine去处理.最后,将处理的结果,push到外部文件系统数据库等.
工作原理(细粒度)
先理解一下有一个叫做Context上下文的概念;
Spark SQL中有:
SQL Context/HiveContext
Spark Core中有:
SparkContext
Spark Streaming中有:
Streaming Context等概念
Receiver:Driver端启动的,用于接收数据
一个Spark应用程序中存在SparkContext和SparkContext
[上图,来自慕课网Michael__PK老师]
处理步骤:
- Driver会在Executor端中启动一些Receiver的接收器,
- 接收器启动之后,会把Input data Stream拆分为一些blocks存放在内存里面(多副本的话,会把blocks拷贝到相应的Executor中去),
- 之后,我们的Receiver会把我们blocks块信息告诉StreamingContext
- ,每个周期到了,我们的StreamingContex会通知SparkContext启动一些jobs,
- SparkContext会把job分发到Executor上执行
好的,到这里,Spark Streaming的基本介绍就完成了,接下来我们队核心概念进行理解
原文地址:https://www.cnblogs.com/liuge36/p/9882968.html