Spark Streaming
Spark treaming简介
Spark Streaming是Spark中的一个组件,具有高吞吐量,容错能力强的特点,基于Spark Core进行构建,也能够与Spark core.Spark SQL进行混合编程,用于对流式进行处理,类似于Storm.
Spark Streaming的输入和输出
SS的输入输出如上图所示,Spark Streming是流式数据的一个主要处理组件,左边是数据源的输入,右边是数据源的输出,此外,Spark Streaming也能和MLlib(机器学习)以及Graphx完美融合
DStream
Spark Streaming有一个针对流式计算的组件,叫DStream,正如Spark core的组件RDD,Saprk SQL的组件DataFrame和DataSet.
DStream的源码在源码中DStream是通过HashMap来保存他所管理的数据流的。K是RDD中数据流的时间,V是包含数据流的RDD。
数据传输示意图DStream采用微批次架构处理,它是由一堆RDD组成的集合,它的工作原理是将输入的数据切割成一个个单位时间内的RDD,于是每个单位时间内都有一个RDD,然后每一个RDD又会通过Saprk
Core处理成新的流.,因此Spark Streaming输出的是单位时间内一节一节的流,然后递给Saprk
Core后,它输出的也是一节一节的流(RDD组成的序列)
Streaming的输入数据源
Streaming的数据源分为三种方式:文件数据源 / 自定义数据源 / RDD队列
文件数据源: Spark Streaming会监控一个目录,这个目录会是HDFS的目录,这个目录下面一旦有文件进入,Streaming就会处理这个文件的信息.,前提是这些文件具有相同的格式,可以通过移动来实现文件进入
自定义数据源:
自定义数据源通过继承Receiver,实现onStart.onStop方法来自定义数据源采集,具体步骤如下:
1. 新建一个class去继承Receiver,并给Receiver传入一个类型的参数,该类型参数是你需要接收的数据的类型.
2.重写Receiver的方法,onStart方法(在Receiver启动的时候调用的方法). onStop方法(在Receiver正常体制的情况下调用的方法)
3.在程序中通过streamingContext.receiverStream(new CustomeReceiver)来调用你的定制化Receiver.
代码代码写好后,打成jar包,在hadoop下启动发射语句 nc -lk 9999,再在spark下启动那个jar,就OK了
RDD队列
RDD队列是streamingContext()的实例,调用queuestream(RDD),里面传入一个RDD队列,代码如下:
RDD队列数据源Streaming和Kafka的对接
数据进入kafka输入端,形成一个kafka队列,队列依次进入streaming里,通过streaming的处理,在通过kafka的输出端输出来
先启动zookeeper,再启动kafka bin/kafka-server-start.sh-daemon ./config/server.properties
下次补充..
Streaming和Flume的对接
下次补充..