分享

spark streaming知识总结2

本帖最后由 pig2 于 2017-6-15 09:11 编辑
问题导读

1.Spark Streaming提供了哪三种内置的数据源支持?
2.Receiver的作用是什么?
3.滑动窗体的本质是什么?




输入DStream和Receiver:

输入DStream代表了来自数据源的输入数据流。 在之前的wordcount例子中, lines就是一个输入DStream( JavaReceiverInputDStream) , 代表了从netcat( nc) 服务接收到的数据流。 除了文件数据流之外, 所有的输入DStream都会绑定一个Receiver对象, 该对象是一个关键的组件,用来从数据源接收数据, 并将其存储在Spark的内存中, 以供后续处理


Spark Streaming提供了三种内置的数据源支持;
1、 基础数据源: StreamingContext API中直接提供了对这些数据源的支持, 比如文件、 socket、Akka Actor等。
2、 高级数据源: 诸如Kafka、 Flume、 Kinesis、 Twitter等数据源, 通过第三方工具类提供支持。这些数据源的使用, 需要引用其依赖。
3、 自定义数据源: 我们可以自己定义数据源, 来决定如何接受和存储数据。


如果你想要在实时计算应用中并行接收多条数据流, 可以创建多个输入DStream。 这样就会创建多个
Receiver, 从而并行地接收多个数据流。 但是要注意的是, 一个Spark Streaming Application的Executor, 是一个长时间运行的任务, 因此, 它会独占分配给Spark Streaming Application的cpu core。从而只要Spark Streaming运行起来以后, 这个节点上的cpu core, 就没法给其他应用使用了。

使用本地模式, 运行程序时, 绝对不能用local或者local[1], 因为那样的话, 只会给执行输入DStream的executor分配一个线程。 而Spark Streaming底层的原理是, 至少要有两条线程, 一条线程用来分配给Receiver接收数据, 一条线程用来处理接收到的数据。 因此必须使用local[n], n>=2的模式。

如果不设置Master, 也就是直接将Spark Streaming应用提交到集群上运行, 那么首先, 必须要求集群节点上, 有>1个cpu core, 其次, 给Spark Streaming的每个executor分配的core, 必须>1, 这样, 才能保证分配到executor上运行的输入DStream, 两条线程并行, 一条运行Receiver, 接收数据; 一条处理数据。 否则的话, 只会接收数据, 不会处理数据。



DStream的transformation
  
Transformation
  
Meaning
map(func)
对 DStream 中的各个元素进行 func 函数操作, 然后返回一个新的 DStream.
flatMap(func)
与 map 方法类似, 只不过各个输入项可以被输出为零个或多个输出项
filter(func)
过滤出所有函数 func 返回值为 true 的 DStream 元素并返回一个新的 DStream
repartition(numPartitions)
增加或减少 DStream 中的分区数, 从而改变 DStream 的并行度
union(otherStream)
将源 DStream 和输入参数为 otherDStream 的元素合并,
  并返回一个新的 DStream.
count()
通过对 DStreaim 中的各个 RDD 中的元素进行计数, 然后返回只有一个元素
  的 RDD 构成的 DStream
reduce(func)
对源 DStream 中的各个 RDD 中的元素利用 func 进行聚合操作,
  然后返回只有一个元素的 RDD 构成的新的 DStream.
countByValue()
对于元素类型为 K 的 DStream, 返回一个元素为( K,Long) 键值对形式的
  新的 DStream, Long 对应的值为源 DStream 中各个 RDD 的 key 出现的次数
reduceByKey(func,
  [numTasks])
利用 func 函数对源 DStream 中的 key 进行聚合操作, 然后返回新的( K, V) 对
  构成的 DStream
join(otherStream,
  [numTasks])
输入为( K,V)、 ( K,W) 类型的 DStream, 返回一个新的( K, ( V, W) 类型的
  DStream
cogroup(otherStream,
  [numTasks])
输入为( K,V)、 ( K,W) 类型的 DStream, 返回一个新的 (K, Seq[V], Seq[W])
  元组类型的 DStream
transform(func)
通过 RDD-to-RDD 函数作用于源码 DStream 中的各个 RDD,可以是任意的 RDD 操作, 从而返回一个新的 RDD
updateStateByKey(func)
根据于 key 的前置状态和 key 的新值, 对 key 进行更新,
  返回一个新状态的 DStream
window
对滑动窗口数据执行操作


windows滑动窗体
滑动窗体的本质是什么?
我们知道spark streaming的数据流是Dstream,而Dstream由RDD组成,但是我们将这些RDD进行有规则的组合,比如我们以3个RDD进行组合,那么组合起来,我们需要给它起一个名字,就是windows滑动窗体

滑动窗体详解

Spark Streaming提供了滑动窗口操作的支持, 从而让我们可以对一个滑动窗口内的数据执行计算
操作。
每次掉落在窗口内的RDD的数据, 会被聚合起来执行计算操作, 然后生成的RDD, 会作为window
DStream的一个RDD。 比如下图中, 就是对每三秒钟的数据执行一次滑动窗口计算, 这3秒内的3个RDD会被聚合起来进行处理, 然后过了两秒钟, 又会对最近三秒内的数据执行滑动窗口计算。 所以每个滑动窗口操作, 都必须指定两个参数, 窗口长度以及滑动间隔, 而且这两个参数值都必须是batch间隔的整数倍。
( Spark Streaming对滑动窗口的支持, 是比Storm更加完善和强大的)

window.png

上图中, 红色实线表示窗口当前的滑动位置, 虚线表示前一次窗口位置, 窗口每滑动一次,
落在该窗口中的 RDD 被一起同时处理, 生成一个窗口 DStream( windowed DStream) , 窗口
操作需要设置两个参数:
( 1) 窗口长度( window length) , 即窗口的持续时间, 上图中的窗口长度为 3
( 2) 滑动间隔( sliding interval) , 窗口操作执行的时间间隔, 上图中的滑动间隔为 2
这两个参数必须是原始 DStream 批处理间隔( batch interval) 的整数倍( 上图中的原始
DStream 的 batch interval 为 1)



Transform  
意义
window
对每个滑动窗口的数据执行自定义的计算
countByWindow
对每个滑动窗口的数据执行count操作
reduceByWindow
对每个滑动窗口的数据执行reduce操作
reduceByKeyAndWindow
对每个滑动窗口的数据执行reduceByKey操作
countByValueAndWindow
对每个滑动窗口的数据执行countByValue操作



上一篇spark streaming知识总结1
http://www.aboutyun.com/forum.php?mod=viewthread&tid=21307



更多可参考


Spark中文手册1-编程指南
http://www.aboutyun.com/thread-11413-1-1.html

Spark中文手册2:Spark之一个快速的例子
http://www.aboutyun.com/thread-11484-1-1.html

Spark中文手册3:Spark之基本概念
http://www.aboutyun.com/thread-11502-1-1.html

Spark中文手册4:Spark之基本概念(2)
http://www.aboutyun.com/thread-11516-1-1.html


Spark中文手册6:Spark-sql由入门到精通
http://www.aboutyun.com/thread-11562-1-1.html


Spark中文手册7:Spark-sql由入门到精通【续】
http://www.aboutyun.com/thread-11575-1-1.html


Spark中文手册8:spark GraphX编程指南(1)
http://www.aboutyun.com/thread-11589-1-1.html

Spark中文手册9:spark GraphX编程指南(2)
http://www.aboutyun.com/thread-11601-1-1.html

Spark中文手册10:spark部署:提交应用程序及独立部署模式
http://www.aboutyun.com/thread-11615-1-1.html


Spark中文手册11:Spark 配置指南
http://www.aboutyun.com/thread-10652-1-1.html





本帖被以下淘专辑推荐:

已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条