sparkStreaming处理数据流程

数据源

从哪里读取数据,进程数据的处理

       Kafka(多数)

       Flume(少数):Flume可以实时采集数据,然后给Spark

       TCP socket(开发测试)

数据处理

DStream#transfotmation

                     调用转换函数,将一个DStream转成另外一个DStream

              针对不同的业务使用不同函数

              企业使用最多2种统计类型函数

                     -实时累加统计

                            比如 双十一,销售订单额,订单数统计

DStream.updateStateByKey

                     -实时统计某时段内数据

                            比如:趋势分析,滴滴打车,最近10分钟路况,未来30分钟路况

                                   11:20~11:50 半小时内,订单未送达的量

                            DStream#window

存储数据

就是就是调用RDD中API将数据存储,批次处理(core)

              console

                     开发测试的时候,将实时分析的数据每次批次结果RDD数据打印在控制台

              redis

                     基于内存的分布式Key/value数据库

              HBase

                     存储到HBase表中

              RDBMS

                     关系型数据

企业中典型技术架构

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

sparkStreaming处理数据流程_第1张图片

需要了解的几个类

1.StreamingContext

       如何读取数据

2.DStream

       处理数据函数

       DStream里面存储着很多RDD

3.PairDStreamFunctions

       当处理的数据类型是二元组的时候,

DStream自动隐式转换为PairDStreamFunctions

4.RDD

输出函数,将结果保存到外部系统

def foreachFunc: (RDD[T], Time) => Unit = {

      (rdd: RDD[T], time: Time) => {

              ….

}}

spark运行工作原理

batchInterval:批处理时间间隔

       ·通过创建StreamingContext实例对象的时候进行设置

       表明每次处理数据时间间隔,RDD

blockInterval:每个Block时间间隔

       启动Streaming应用的时候,将启动Receiver用于接收数据

       按照blockInterval将数据划分为Block,

       默认blockInterval为200ms

优化

对于SparkStreaming实时流式数据

              每个批次处理的时间 小于等于 batchInterval时间

       如果大于,需要考虑优化程序

              每批次的数据RDD在执行,可以增加RDD分区数,增加Task数目,在资源充足的情况下,增加并行执行Task数目优化点

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

 

 

 

 

 

你可能感兴趣的:(sparkStreaming处理数据流程)