环球ug网址:Spark学习条记(三)-Spark Streaming

admin 3个月前 (06-25) 科技 32 0

Spark Streaming支持实时数据流的可扩展(scalable)、高吞吐(high-throughput)、容错(fault-tolerant)的流处置(stream processing)。

&NBsp;

                                                    架构图

 

特征如下:

 

  • 可线性伸缩至跨越数百个节点;

  • 实现亚秒级延迟处置;

  • 可与Spark批处置和交互式处置无缝集成;

  • 提供简朴的API实现庞大算法;

  • 更多的流方式支持,包罗Kafka、Flume、Kinesis、Twitter、ZeroMQ等。

 

原理

 

Spark在吸收到实时输入数据流后,将数据划分成批次(divides the data into batches),然后转给Spark Engine处置,按批次天生最后的效果流(generate the final stream of results in batches)。 

 

 

API

 

DStream

 

DStream(Discretized Stream,离散流)是Spark Stream提供的高级抽象延续数据流。

 

  • 组成:一个DStream可看作一个RDDs序列。

  • 焦点头脑:将盘算作为一系列较小时间距离的、状态无关的、确定批次的义务,每个时间距离内吸收的输入数据被可靠存储在集群中,作为一个输入数据集。

 

 

  • 特征:一个高条理的函数式编程API、强一致性以及高校的故障恢复。

  • 应用程序模板:

  • 模板1

环球ug网址:Spark学习条记(三)-Spark Streaming 第1张

  • 模板2

环球ug网址:Spark学习条记(三)-Spark Streaming 第2张

 

WorDCount示例

 

环球ug网址:Spark学习条记(三)-Spark Streaming 第3张

 

Input DStream

 

Input DStream是一种从流式数据源获取原始数据流的DStream,分为基本输入源(文件系统、Socket、Akka Actor、自界说数据源)和高级输入源(Kafka、Flume等)。

 

  • Receiver:
  • 每个Input DStream(文件流除外)都市对应一个单一的Receiver工具,卖力从数据源吸收数据并存入Spark内存举行处置。应用程序中可建立多个Input DStream并行吸收多个数据流。

  • 每个Receiver是一个历久运行在Worker或者Executor上的Task,所以会占用该应用程序的一个核(core)。若是分配给Spark Streaming应用程序的核数小于或即是Input DStream个数(即Receiver个数),则只能吸收数据,却没有能力所有处置(文件流除外,由于无需Receiver)。

  • Spark Streaming已封装种种数据源,需要时参考官方文档。

 

Transformation Operation

 

  • 常用Transformation

 

* map(func) :对源DStream的每个元素,接纳func函数举行转换,获得一个新的DStream;

* flatMap(func):与map相似,然则每个输入项可用被映射为0个或者多个输出项;

* filter(func):返回一个新的DStream,仅包罗源DStream中知足函数func的项;

* repartition(numPartitions):通过建立更多或者更少的分区改变DStream的并行水平;

* union(otherStream):返回一个新的DStream,包罗源DStream和其他DStream的元素;

* count():统计源DStream中每个RDD的元素数目;

* reduce(func):行使函数func群集源DStream中每个RDD的元素,返回一个包罗单元素RDDs的新DStream;

* countByValue():应用于元素类型为K的DStream上,返回一个(K,V)键值对类型的新DStream,每个键的值是在原DStream的每个RDD中的泛起次数;

* reduceByKey(func, [numTasks]):当在一个由(K,V)键值对组成的DStream上执行该操作时,返回一个新的由(K,V)键值对组成的DStream,每一个key的值均由给定的recuce函数(func)群集起来;

* join(otherStream, [numTasks]):当应用于两个DStream(一个包罗(K,V)键值对,一个包罗(K,W)键值对),返回一个包罗(K, (V, W))键值对的新DStream;

* cogroup(otherStream, [numTasks]):当应用于两个DStream(一个包罗(K,V)键值对,一个包罗(K,W)键值对),返回一个包罗(K, Seq[V], Seq[W])的元组;

* transform(func):通过对源DStream的每个RDD应用RDD-to-RDD函数,建立一个新的DStream。支持在新的DStream中做任何RDD操作。

 

  • updateStateByKey(func)

  • updateStateByKey可对DStream中的数据按key做reduce,然后对各批次数据累加

  • WordCount的updateStateByKey版本

环球ug网址:Spark学习条记(三)-Spark Streaming 第4张

 

  • transform(func)

  • 通过对原DStream的每个RDD应用转换函数,建立一个新的DStream。

  • 官方文档代码举例

环球ug网址:Spark学习条记(三)-Spark Streaming 第5张

 

  • Window operations

  • 窗口操作:基于window对数据transformation(个人认为与Storm的tick相似,但功效更壮大)。

  • 参数:窗口长度(window length)和滑动时间距离(slide interval)必须是源DStream批次距离的倍数。

  • 举例说明:窗口长度为3,滑动时间距离为2;上一行是原始DStream,下一行是窗口化的DStream。

环球ug网址:Spark学习条记(三)-Spark Streaming 第6张

  • 常见window operation

有状态转换包罗基于滑动窗口的转换和追踪状态转变(updateStateByKey)的转换。

基于滑动窗口的转换

* window(windowLength, slideInterval) 基于源DStream发生的窗口化的批数据,盘算获得一个新的DStream;

* countByWindow(windowLength, slideInterval) 返回流中元素的一个滑动窗口数;

* reduceByWindow(func, windowLength, slideInterval) 返回一个单元素流。行使函数func群集滑动时间距离的流的元素建立这个单元素流。函数func必须知足结律,从而可以支持并行盘算;

* reduceByKeyAndWindow(func, windowLength, slideInterval, [numTasks]) 应用到一个(K,V)键值对组成的DStream上时,会返回一个由(K,V)键值对组成的新的DStream。每一个key的值均由给定的reduce函数(func函数)举行聚合盘算。注重:在默认情况下,这个算子行使了Spark默认的并发义务数去分组。可以通过numTasks参数的设置来指定差别的义务数;

* reduceByKeyAndWindow(func, invFunc, windowLength, slideInterval, [numTasks]) 加倍高效的reduceByKeyAndWindow,每个窗口的reduce值,是基于先前窗口的reduce值举行增量盘算获得的;它会对进入滑动窗口的新数据举行reduce操作,并对脱离窗口的老数据举行“逆向reduce”操作。然则,只能用于“可逆reduce函数”,即那些reduce函数都有一个对应的“逆向reduce函数”(以InvFunc参数传入);

* countByValueAndWindow(windowLength, slideInterval, [numTasks]) 当应用到一个(K,V)键值对组成的DStream上,返回一个由(K,V)键值对组成的新的DStream。每个key的值都是它们在滑动窗口中泛起的频率。

  • 官方文档代码举例 

环球ug网址:Spark学习条记(三)-Spark Streaming 第7张

 

  • join(otherStream, [numTasks])

  • 毗邻数据流

  • 官方文档代码举例1

环球ug网址:Spark学习条记(三)-Spark Streaming 第8张

  • 官方文档代码举例2

环球ug网址:Spark学习条记(三)-Spark Streaming 第9张

 

Output Operation

 

环球ug网址:Spark学习条记(三)-Spark Streaming 第10张

 

缓存与持久化

 

  • 通过persist()将DStream中每个RDD存储在内存。

  • Window operations会自动持久化在内存,无需显示挪用persist()。

  • 通过网络吸收的数据流(如Kafka、Flume、Socket、ZeroMQ、RocketMQ等)执行persist()时,默认在两个节点上持久化序列化后的数据,实现容错。

 

Checkpoint

 

  • 用途:Spark基于容错存储系统(如HDFS、S3)举行故障恢复。

  • 分类:

  • 元数据检查点:保留流式盘算信息用于Driver运行节点的故障恢复,包罗建立应用程序的设置、应用程序界说的DStream operations、已入队但未完成的批次。

  • 数据检查点:保留天生的RDD。由于stateful transformation需要合并多个批次的数据,即天生的RDD依赖于前几个批次RDD的数据(dependency chAIn),为缩短dependency chain从而削减故障恢复时间,需将中心RDD定期保留至可靠存储(如HDFS)。

  • 使用时机:

  • Stateful transformation:updateStateByKey()以及window operations。

  • 需要Driver故障恢复的应用程序。

  • 使用方式

  • Stateful transformation

streamingContext.checkpoint(checkpointDirectory)

 

  • 需要Driver故障恢复的应用程序(以WordCount举例):若是checkpoint目录存在,则凭据checkpoint数据建立新StreamingContext;否则(如首次运行)新建StreamingContext。

环球ug网址:Spark学习条记(三)-Spark Streaming 第11张

 

  • checkpoint时间距离

  • 方式:

dstream.checkpoint(checkpointInterval)

 

  • 原则:一样平常设置为滑动时间距离的5-10倍。

  • 剖析:checkpoint会增添存储开销、增添批次处置时间。当批次距离较小(如1秒)时,checkpoint可能会减小operation吞吐量;反之,checkpoint时间距离较大会导致LINEage和task数目增进。

 

性能调优

 

降低批次处置时间

 

  • 数据吸收并行度

  • 增添DStream:吸收网络数据(如Kafka、Flume、Socket等)时会对数据反序列化再存储在Spark,由于一个DStream只有Receiver工具,若是成为瓶颈可思量增添DStream。

环球ug网址:Spark学习条记(三)-Spark Streaming 第12张

  • 设置“spark.streaming.blockInterval”参数:吸收的数据被存储在Spark内存前,会被合并成block,而block数目决议了Task数目;举例,当批次时间距离为2秒且block时间距离为200毫秒时,Task数目约为10;若是Task数目过低,则浪费了CPU资源;推荐的最小block时间距离为50毫秒。

  • 显式对Input DStream重新分区:在举行更深条理处置前,先对输入数据重新分区。

inputStream.repartition(<number of partitions>)

 

  • 数据处置并行度:reduceByKey、reduceByKeyAndWindow等operation可通过设置“spark.default.parallelism”参数或显式设置并行度方式参数控制。

  • 数据序列化:可设置更高效的Kryo序列化。

 

设置合理批次时间距离

 

  • 原则:处置数据的速率应大于或即是数据输入的速率,即批次处置时间大于或即是批次时间距离。

  • 方式:

  • 先设置批次时间距离为5-10秒以降低数据输入速率;

  • 再通过查看log4j日志中的“Total delay”,逐步调整批次时间距离,保证“Total delay”小于批次时间距离。

 

内存调优

 

  • 持久化级别:开启压缩,设置参数“spark.rdd.compress”。

  • GC计谋:在Driver和Executor上开启CMS。

,

Allbet电脑版下载

欢迎进入Allbet电脑版下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

皇冠体育声明:该文看法仅代表作者自己,与本平台无关。转载请注明:环球ug网址:Spark学习条记(三)-Spark Streaming

网友评论

  • (*)

最新评论

文章归档

站点信息

  • 文章总数:528
  • 页面总数:0
  • 分类总数:8
  • 标签总数:995
  • 评论总数:161
  • 浏览总数:5214