Spark Streaming详解

2019-10-31  本文已影响0人  SUSUR_28f6

内容

Spark Streaming

1228818-20180510200107994-1902710699

SparkStreaming与Storm的区别

SparkStreaming初始


SparkStreaming初始理解

Spark的各个子框架,都基于核心Spark的,SparkStreaming在内部的机制如下:SparkStreaming接收到实时input数据流,并将数据分批成batch,然后由Spark Engine进行处理最后生成batch的输出结果流

streaming-flow

Spark Streaming将产生高度分离的数据流叫DStream(discretized Stream);DStream既可以从输入数据源创建得来,(如Kafka、Flume或者Kinesis)也可以从其他DStream经过一些算子操作得来;

在内部,一个DStream就包含一系列的RDDs
(对python来说,有部分API尚不支持,或者和Scala、Java不同

图片1

DStream 它表示的事连续数据流,可以是源数据接收的输入流,也可以事通过转换输入流生成的已处理的数据流;在内部,DStream由一系列的RDD组成;DStream中的每个RDD都包含来自特定间隔的数据


streaming-dstream

任何作用于DStream的算子,其实都会被转化为对其内部RDD的操作。例如,我们将 lines 这个DStream转成words DStream对象,其实作用于lines上的flatMap算子,会施加于lines中的每个RDD上,并生成新的对应的RDD,而这些新生成的RDD对象就组成了words这个DStream对象。其过程如下图所示

streaming-dstream-ops

Spark Streaming主要的两种内建的流式数据源:

SparkStreaming算子


窗口操作(Window Operations)

Spark Streaming提供了窗口操作,你可以在滑动的窗口对数据使用transformations算子进行操作

streaming-dstream-window

每次窗口滑动时,DStream中落入窗口的RDD就会被合并计算成新的windowed DStream

窗口优化

图片2

优化后的window操作要保存状态所以要设置checkpoint路径,没有优化的window操作可以不设置chekpoint路径

//Reduce last 30 seconds of data, every 10 seconds

val windowedWordCounts = pairs.reduceByKeyAndWindow((a:Int,b:Int) => (a + b), Seconds(30), Seconds(10))

Driver HA(Standalone或者Mesos)

因为SparkStream是7*24小时运行的,Driver只是一个简单的进程,有可能挂掉,所以实现Driver的HA就又必要(如果使用Client模式就无法实现DriverHA)Yarn平台cluster模式提交任务,AM(AplicationMaster)相当于Driver,如果挂掉会自动启动AM。这里所说的DriverHA针对的是Spark standalone和Mesos资源调度的情况下。实现Driver的高可用有两个步骤:

SparkStreaming2.2以前+Kafka


receiver模式

在SparkStreaming程序运行后,Executor中会又receiver task接收kafka推送过来的数据,数据会被持久化,默认级别为MEMORY_AND_DISK_SER_2,这个级别可以修改;receiver task对接收到的数据进行存储和备份,这个过程会又节点之间的数据传输,备份完成后zookeeper中更新偏移量,然后向Driver中的receiver tracket汇报数据的位置,最后Driver根据数据本地化将task分发到不同节点上执行;

kafka receiver

Direct模式

kafka receiver

无接收器(receiver-less)的直接(driect)方式,以确保更强的端对端传输;该方法不需要接收器来接收数据,而是定期向kafka查询每个topic和partition中的最新偏移量,并且相应定义了每个批次要处理的偏移量范围;

Kafka0.11

kafka0.8.2消费者offset存储在zookeeper中,对于zookeeper而言每次操作代价很昂贵的,而且zookeeper集群实不能扩展写能力,kafka0.11版本默认使用新等消费者api,消费者offset会更新到一个kafka自带等topic[__consumer_offsets]中

SparkStream2.3 + Kafka0.11

LocationStrategies(路由策略):

消费者策略(ConsumerStrategies.Subscribe)

即使从checkpoint重新启动,spark也可以获取正确配置等消费者

偏移量(Offset)

上一篇 下一篇

猜你喜欢

热点阅读