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

实时任务场景介绍

2014年的大数据的三剑客

  • Hadoop 必须会使用Java

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

  • Storm 人性是贪婪的,Hadoop和Hive都是计算的离线的、历史的数据

后来的大数据的三剑客

  • Spark 使用SparkCore内存计算提高了MapReduce的计算效率 Scala、Python、Java

  • SparkSQL Sql => Spark Core任务

  • SparkStreaming/Flink

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

This is a picture without description

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

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

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

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

特点

  • 处理的是离线的数据

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

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

This is a picture without description

扶梯

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

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

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

This is a picture without description

数据流

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

This is a picture without description

SparkStreaming程序入口剖析

SparkCore

核心抽象:RDD Resiliennt 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 1个block对应1个partition对应1个task任务

Driver将Block封装成RDD的时间间隔是?

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

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

时间间隔:

  • Batch interval

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

    • 默认是200ms

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

RDD流 = DStream

This is a picture without description

快速上手

引入类库

1
2
3
4
5
6
7
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:等待任务结束

留言区

This is a picture without description
This is a picture without description