SparkStreaming
四、掌握spark streaming的工作原理、离散化流、实时数据获取(套接字和文件夹)等内容,掌握Dstream的各种转换(具体到代码的编写使用);
1、流数据
(1)流数据的概念
流数据是一组顺序、大量、快速、连续到达的数据序列,一般情况下,数据流可被视为一个随时间延续而无限增长的动态数据集合。
(2)流数据的特点
实时到达、次序独立、规模宏大、不易提取
2、Spark Streaming介绍
Spark Streaming 使得构建可扩展的容错流应用变得容易。它是Spark核心API的一个扩展,能够满足除对实时性要求非常高(如高频实时交易)之外的所有流式准实时计算场景
通过SparkStreaming处理后的结果还可以存储在数据库中,分布式文件系统HDFS中,还可以实时展现在数据大屏幕中等。
SparkStreaming能和机器学习库(MLlib)以及图计算库(Graphx)进行无缝衔接实现实时在线分析,以及使用DataFrame和SQL进行操作
SparkStreaming特点:
具有易于使用,高容错性,高吞吐量等特点使其能够胜任实时的流计算.
3、SparkStreaming工作原理——分批次进行处理
Spark Streaming接收实时输入数据流并将数据分成批处理,然后由Spark引擎处理以批量生成最终结果流。

先接收实时输入的数据流,然后将数据拆分成多个batch(批),比如每收集1秒的数据封装为一个batch,然后将每个batch交给Spark的计算引擎进行处理,最后会生产出一个结果数据流,结果中的数据也是由一个一个的batch所组成的。
4、离散流
离散流(discretized stream)简称“Dstream”,这是Spark Streaming对内部持续的实时数据流的抽象描述,也就是我们处理的一个实时数据流,在Spark Streaming中对应于一个DStream 实例。
(1)离散化流(Discretized Stream)
Discretized Stream或DStream是Spark Streaming提供的基本抽象。
它表示连续的数据流,可以是从源接收的输入数据流,也可以是通过转换输入流生成的已处理数据流。 在内部,DStream由一系列连续的RDD表示,这是Spark对不可变分布式数据集的抽象。
DStream中的每个RDD都包含来自特定时间间隔的数据。
DStram很好理解,就是按时间间隔组合的一系列RDD,其特点就是离散且持续。

(2)使用套接字socket获取DStream
使用ssc对象的socketTextStream方法获取DStream
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
sc = SparkContext(master="local[4]") # 指定以4个线程的本地模式运行Spark
ssc = StreamingContext(sc, 5) # 实例化一个StreamingContext对象,生成流数据的时候是每5秒一个批次
lines = ssc.socketTextStream("10.2.87.2", 9999) # 从指定的ip和端口号获取数据
counts = lines.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a+b)
counts.pprint() # 统计各个时间段内每个单词出现的次数
ssc.start() # 启动流数据的执行
ssc.awaitTermination() # 等待执行停止
(3)使用文件系统中的文件获取DStream
ssc对象的textFileStream方法
sc = SparkContext(master="local[4]")
ssc = StreamingContext(sc, 5)
ssc.checkpoint(r"/home/ubuntu/test_checkpoit")
lines = ssc.socketTextStream("10.2.87.2", 9999)
counts.pprint()
ssc.start()
ssc.awaitTermination()
文件夹里的文件必须是文本文件(txt,csv,json),且只有新增的文件才会被处理,在已经处理过的原有文件中添加新内容是无法获取到的,新增的文件最后修改日期也必须是最新的时间(修改时间大于程序的执行时间),且不能与已经处理过的文件同名,否则也无法获取。

浙公网安备 33010602011771号