spark streaming 每batch处理的数据量_Spark从入门到放弃系列-1.0-Spark Streaming实现原理...

一、Spark Streaming 的实现思路

Spark Streaming 与 Spark Core 的关系可以用下面的经典部件图来表述

e19a4fb76a90d4515d3984b16801aafb.png

Spark Streaming运行核心:**Spark RDD加上TimeLine,无论是从概念还是数据接收、数据处理,Time是驱动力,不断的循环事件、消息,时间的确定、数据、RDD接着就转到Spark Core上**

4def73d306dc80c6d77170d5da732504.png

1. 假设我们有一小块数据,那么通过 RDD API,我们能够构造出一个进行数据处理的 RDD DAG(如下图所示)

884caa90abf5f83622cca239ea901c7e.png

2. 第二步,我们对连续的 streaming data 进行切片处理 —— 比如将最近 200ms 时间的 event 积攒一下--每个切片就是一个 batch,然后使用第一步中的 RDD DAG 对这个 batch 的数据进行处理

所以,针对连续不断的 streaming data 进行多次切片,就会形成多个 batch,也就对应出来多个 RDD DAG(每个 RDD DAG 针对一个 batch 的数据)。如此一来,这多个 RDD DAG 之间相互同构,却又是不同的实例

c495eca4436984aefdf77c17e20bb421.png

整个过程需要四个步骤:

(1) 一个静态的 RDD DAG 的模板,来表示处理逻辑;

一个静态的 RDD DAG 的模板,来表示处理逻辑;

(2)一个动态的工作控制器,将连续的 streaming data 切分数据片段,并按照模板复制出新的RDD DAG的实例,对数据片段进行处理;

(3)Receiver进行原始数据的产生和导入;Receiver将接收到的数据合并为数据块并存到内存或硬盘中,供后续batch RDD进行消费;

(4)对长时运行任务的保障,包括输入数据的失效后的重构,处理任务的失败后的重调。

二、Spark Streaming的源码解析

- 我们从官网的Quick Example入手:

import org.apache.spark._

import org.apache.spark.streaming._

// 首先配置一下本 quick example 将跑在本机,app name 是 NetworkWordCount

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

// batchDuration 设置为 1 秒,然后创建一个 streaming 入口

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

// ssc.socketTextStream() 将创建一个 SocketInputDStream;这个 InputDStream 的 SocketReceiver 将监听本机 9999 端口

val lines = ssc.socketTextStream("localhost

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值