zoukankan      html  css  js  c++  java
  • (一)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

  • 相关阅读:
    文件权限
    文件权限
    Nginx SSL/HTTPS 配置
    Nginx SSL/HTTPS 配置
    Nginx SSL/HTTPS 配置
    安装opencv3.3.0方法
    安装opencv3.3.0方法
    安装opencv3.3.0方法
    安装opencv3.3.0方法
    阿里巴巴的体量到底有多大?
  • 原文地址:https://www.cnblogs.com/hanchaoyue/p/13363583.html
Copyright © 2011-2022 走看看