Hadoop 的 MapReduce 及 Spark SQL 等只能进行离线计算,无法满足实时性要求较高的业务 需求,例如实时推荐、实时网站性能分析等,流式计算可以解决这些问题。目前有三种比较 常用的流式计算框架,它们分别是 Storm,Spark Streaming 和 fink。
Spark Streaming,其实就是一种Spark提供的,对于大数据,进行实时计算的一种框架。它的底层,其实,也是基于我们之前讲解的Spark Core的。基本的计算模型,还是基于内存的大数据实时计算模型。而且,它的底层的核心组件还是我们在Spark Core中经常用到的RDD。针对实时计算的特点,在RDD之上,进行了一层封装,叫做DStream。其底层还是基于RDD的。所以,RDD是整个Spark技术生态中的核心。
Spark streaming支持的数据输入源很多,如:Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用spark的高度抽象语:map、reduce、join、window 等进行运算。而结果也能保存在很多地方。如HDFS, 数据库等。另外,spark streaming也能和MLlib(机器学习)以及 Graphx 完美融合。
易用
容错:
与spark体系无缝整合
接收实时输入数据流,然后将数据拆分成多个batch,比如每收集1秒的数据封装为一个batch,然后将每个batch交给Spark的计算引擎进行处理,最后会生产出一个结果数据流,其中的数据,也是由一个一个的batch所组成的。
离散流DStream:这是spark streaming对内部持续的实时数据流的抽象描述,即我们处理的一个实时数据,在sparkstreaming中对应一个DStream实例。
批数据:这是化整为零的第一步,将实时数据抽象,以时间片为单位进行分批,将流处理转化为时间片,数据的批处理,随着持续时间的推移,这些处理结果就形成了对应的结果数据流。
时间片或批处理时间间隔:人为地对流数据进行定量的标准,以时 间片作为我们拆分流数据的依据。一个时间片的数据对应一个 RDD 实例。
窗口长度:一个窗口覆盖的数据流的时间长度,必须是批处理时间间隔的倍数。
滑动周期:前一个窗口到后一个窗口所经过的时间长度,必须是批处理时间间隔的倍数。
InputDStream:一个 InputDStream 是一个特殊的 DStream,表示第一次被加载到实时数据流中的原始数据。
Discretized Stream 是 Spark Streaming 的基础抽象,代表持续性的数据流和经过各种 Spark 原 语操作后的结果数据流。在内部实现上,DStream 是一系列连续的 RDD 来表示。DStream 是 连续数据的离散化表示,DStream 中每个离散片段都是一个 RDD,DStream 可以变换成另一 个 DStream。
DStream对数据的操作也是按照RDD为单位来进行的:
DStream上的原语与RDD类似,分为:Transformations(转换)和Output Operations(输出,类似于action)。
由于DStream的操作与RDD极为类似,而且DStream底层就是封装的RDD,所以这里简单的介绍一下Transformations。
注意:Transformations操作中有几个极为重要的操作:updateStateByKey()、transform()、window()、foreachRDD()。以后的博文中为详细介绍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。