抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >


SparkStreaming

实时任务场景介绍

2014 年的大数据的三剑客

  • Hadoop: 必须会使用 Java

  • Hive: 大数据中使用最广泛的一个技术 Sql => MapReduce

  • Storm : 人性是贪婪的,HadoopHive 都是计算的离线的、历史的数据

后来的大数据的三剑客

  • Spark : 使用 SparkCore 内存计算提高了 MapReduce 的计算效率 ScalaPythonJava

  • SparkSQL: Sql => Spark Core 任务

  • SparkStreaming/Flink

实时的应用场景:2020 淘宝双 11 成交额 4892 亿

2020淘宝双11成交额4892亿

实时计算就是来一个订单计算一个订单,每时每刻每秒都在统计

离线计算就是统计某个已经发生的时间段内的数据

  • 例:淘宝在年底的时候计算 1.1-12.31 号的所有订单

坐电梯的时候需要凑够一波人坐电梯上去,把每一个人看作一个数据集攒了一定的人数之后一起坐电梯上去,我们会等待一定的时间统一处理数据,这个时候我们处理的就是历史数据了

特点

  • 处理的是离线的数据

  • 每次处理的数据量比较大

  • 处理的时间比较长,比较慢

电梯

扶梯

  • 1、处理的是实时的数据

  • 2、每次处理的数据量不大

  • 3、处理的时间比较短、比较快

扶梯

数据流

  • 实时任务处理的就是数据流,数据流其实只是一个形象的说法,指的是任务处理的数据像流水一样源源不断的过来,就像水龙头里面的水一样

水龙头

SparkStreaming 程序入口剖析

SparkCore

核心抽象:RDDResiliennt Distributed Datasets

程序入口:val sc = new SparkContext(conf)

算子的操作:Transformation/Action

SparkSQL

核心抽象:DataFrame/DataSet

程序入口:

Spark 1.x:new SQLContext(conf)new HiveContext(conf)

Spark 2.x/3.x:val ss = new SparkSession(conf)

算子的操作 / SQL

SparkStreaming

核心抽象:DStream

程序入口:

val conf = new SparkConf().setAppName("SS").setMaster("local[2]")

val sc = new SparkContext(conf)

val ssc = new StreamingContext(sc,Seconds(1))

算子操作(RDD 的算子操作在 SparkStreaming 上都可以用)

DStream 核心抽象深度剖析

1、SparkStreaming 的任务是基于 SparkCore,然后我们任务启动的时候,或者是初始化的时候都会有一个 Driver 的服务

2、Driver 端会发送 Receivers 到 Worker 里面,Receiver 其实说白了就是一个接收器,接收数据,这个 Receiver 具体就是表现为一个 Task 任务,默认情况下只有一个 Receiver 可以通过配置多个

3、Receiver 会接收数据,并且会把数据生成 block 块(1、生成文件块的依据是啥?)接着就把这些文件块(block)存入到 Executor 的内存里面,为了保证数据安全,默认这些数据是有副本的,在其它的 Executor 上存储副本

4、receiver 会把 block 的信息(元数据的信息)发送给 Driver 端

5、Driver 端会根据一定的时间间隔(2、封装 RDD 时间间隔是多少?)把这些 block 封装成为一个 RDD,然后进行计算

Receiver 把数据合并成 block 块的依据?

200ms 生成一个 Block 1block 对应 1partition 对应 1task 任务

DriverBlock 封装成 RDD 的时间间隔是?

根据程序入口中的时间参数,如 ssc = new StreamingContext(sc,Seconds(1)) 就是每隔 1s 中将 block 块合封装成一个 RDD

SparkStreaming 不是真正意义上的实时计算,不是真的来一条数据就处理一条数据;微批处理,只不过间隔较短,每次数据里的数据量不大,然后又比较快,所以我们就把它认为实时处理了!!!准实时处理

时间间隔:

  • Batch interval

    • 指的就是我们的这个实时任务多久运行一次,这个是我们获取程序入口的时候自己指定的
  • block interval

    • 默认是 200 ms

一个一个的 RDD 的流就被 Spark 抽象为 DStream

RDD 流 = DStream

DStream

快速上手

引入类库

import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}

import org.apache.spark.streaming.{Seconds, StreamingContext}

import org.apache.spark.{SparkConf, SparkContext}

import org.apache.log4j.{Level, Logger}

步骤 1:初始化程序入口

步骤 2:通过数据源获取数据(数据输入)

步骤 3:进行算子的操作,实现业务(数据处理)

步骤 4:数据的输出

步骤 5:启动任务

步骤 6:等待任务结束

推荐阅读
Spark RDD 编程 Spark RDD 编程 大数据处理技术-Hadoop-MapReduce 大数据处理技术-Hadoop-MapReduce 大数据技术概述 大数据技术概述 SparkStreaming 整合 Kafka SparkStreaming 整合 Kafka 大数据架构演变 大数据架构演变 Flink 概述 Flink 概述

留言区

Are You A Robot?