SparkStreaming简单介绍;SparkStreaming处理数据流程;SparkStreaming运行工作原理与简单优化

SparkStreaming简单介绍

流式数据处理(stream processing)
要处理的数据就像流水一样,源源不断的产生数据,需要实时进行处理
对SparkCore的高级API的封装,将流式的数据切分为小的批次batch(按照时间间隔)的数据,然后使用SparkCore进行处理
返回数据集合类型:DStream集合,List
StreamingContext:上下文对象,从实时流式数据源中接收数据

大数据技术框架中,对于流式数据的实时数据分析处理方案

一条一条的处理

来一条数据就处理一条数据

典型框架:Storm

	特点:
		实时性很高,亚秒级别,延迟性很低
	阿里巴巴
		将Storm改成成适合Java开发JStorm,将JStorm开源,
        2017开始放弃JStorm,改用Blink
        Storm ->JStorm
		2017:
	    link ->Blink

一批次一批次数据的处理

	按照时间间隔将数据划分,时间比较短,比如1s
	框架:Spark Streaming
		近实时流式数据处理框架,延迟性也很低,2.2.0以后开始,1ms以内

SparkStreaming处理数据流程

(1)数据源

从哪里读取数据,进程数据的处理
Kafka(多数)
Flume(少数):Flume可以实时采集数据,然后给Spark
TCP socket(开发测试)

(2)数据处理

	DStream#transfotmation
		调用转换函数,将一个DStream转成另外一个DStream
	针对不同的业务使用不同函数
	企业使用最多2种统计类型函数
		-实时累加统计
			比如 双十一,销售订单额,订单数统计
            DStream.updateStateByKey
		-实时统计某时段内数据
			比如:趋势分析,滴滴打车,最近10分钟路况,未来30分钟路况
				11:20~11:50 半小时内,订单未送达的量
			DStream#window

(3)存储数据

	就是就是调用RDD中API将数据存储,批次处理(core)
	console
		开发测试的时候,将实时分析的数据每次批次结果RDD数据打印在控制台
	redis
		基于内存的分布式Key/value数据库
	HBase
		存储到HBase表中
	RDBMS
		关系型数据

企业中典型技术架构

flume/SDK ->Kafka ->SparkStreaming/Storm/Flink   ->redis/HBase

SparkStreaming运行工作原理

batchInterval:批处理时间间隔

·通过创建StreamingContext实例对象的时候进行设置
表明每次处理数据时间间隔,RDD

blockInterval:每个Block时间间隔

启动Streaming应用的时候,将启动Receiver用于接收数据
按照blockInterval将数据划分为Block,
默认blockInterval为200ms

计算

如果一个batchInterval是1S,blockInterval为200ms,有几个block块
batchInterva/blockInterval  = 5

优化

对于SparkStreaming实时流式数据
	每个批次处理的时间 小于等于 batchInterval时间
如果大于,需要考虑优化程序
	每批次的数据RDD在执行,可以增加RDD分区数,增加Task数目,在资源充足的情况下,增加并行执行Task数目

优化点

	减少blockInterval的值,比如设置为100ms
	spark.streaming.blockInterval

你可能感兴趣的:(Spark)