(一)SparkStreaming

1、数据的输入 kafka、flume、hdfs、Socket

2、数据的处理 storm(很少)、SparkStreamingflink

3、数据的输出 kafka、hbase、redis(codis)、mysql

4、springboot 大屏

===============================================

1、提交任务

2、Driver服务会发送receiver(接收器)对象到Executor上面,receiver

说白了就是用来接收数据的,receiver默认就只有一个,但是我们可以

通过代码设置多个

3、receiver启动起来之后,其实就是一task任务,然后这个任务就不断的接收数据

但是它把接收到的这些数据都封装成一个个block(每200ms之后的数据就是一个block),然后把这些block写到Executor的内存中

4、receiver会把这些blcok的信息高速给Driver

5、Driver会根据一定的时间间隔(初始化时设置的Seconds(2)),把这些block组织成一个rdd(其实一个block就是一个parititon)

然后对这些rdd进行处理

SparkStreaming的运行流程里面:

1、block interval

  默认是200s

2、batch interval

  val ssc = new StreamingContext(conf,Seconds(2))

  由我们的用户自己去控制的,你写了多少就是多少

******************水一篇,SparkStreaming挺好玩的*********************************

 

实时任务:

1. 数据的输入

1.1 socket (讲课的时候,练习使用,方便)

1.2 HDFS的数据源(这个应用场景不是很多,了解)

1.3 flume(不讲,了解)

1.4 kafka 最最核心的一个数据源,只不过我们现在还不讲,因为非常重要,下一次课

1.5 自定义数据源

  用户不是特别的多,有时会用

2. 数据的处理

2.1 updateStateBykey

  updateFunc:(Seq[V],Option[S])=>Option[S]

  这个常用

2.2 mapWithState

  这个算子在官方没有介绍,spark源码里面

  kafka:

    examples:里面演示的consumer producer如何使用?

  spark:

    examples:里面演示了一个算子mapWithState

    这个算子在spark1.6以后出现,我们可以理解就是对updateStateBykey的优化,

    性能要比updateStateBykey要好,好很多倍。所以spark的官方博客推荐使用的是mapWithState

2.3 transform 

  最大的意义在于可以把DStream =>RDD=>SparkSQL

  DStream=>RDD=>DataSet/DataFrame=>Table =>SQL

  DStream RDD DataFrame/DataSet 之间可以进行无缝的切换

  着啊用哪个的一个架构设计就比较牛了

2.4 window窗口操作

  我们现在能解决的问题就是:

  a 对当前批次进行处理,统计,计算

  b 对历史的结果的进行累积,累加

  如果现在有这样的一个需求:

  每隔4秒统计一下最近6秒的单词出现的次数

3 数据输出

  3.1 测试的时候打印print

  3.2 saveAsxxx

    基本不会用,不会存储到文件系统里面

  3.3 foreachRDD(企业里面就使用这个)

    RDD:

      transform:

      map

      mapPartition

      action:

      foreach

      foreachPartition

    DStream:

      transform操作:

        transform(rdd)=》mapPartition 

      action的操作:

        foreachRDD(rdd)=》foreachPartition

原文地址:https://www.cnblogs.com/hanchaoyue/p/13363583.html