SparkStreaming(源码阅读十二)

简介:   要完整去学习spark源码是一件非常不容易的事情,但是咱可以积少成多嘛~那么,Spark Streaming是怎么搞的呢?  本质上,SparkStreaming接收实时输入数据流并将它们按批次划分,然后交给Spark引擎处理生成按照批次划分的结果流:    SparkStreaming提供了表示连续数据流的、高度抽象的被称为离散流的Dstream,可以使用kafka、Flume和Kiness这些数据源的输入数据流创建Dstream,也可以在其他Dstream上使用map、reduce、join、window等操作创建Dsteram。

  要完整去学习spark源码是一件非常不容易的事情,但是咱可以积少成多嘛~那么,Spark Streaming是怎么搞的呢?

  本质上,SparkStreaming接收实时输入数据流并将它们按批次划分,然后交给Spark引擎处理生成按照批次划分的结果流:

  

  SparkStreaming提供了表示连续数据流的、高度抽象的被称为离散流的Dstream,可以使用kafka、Flume和Kiness这些数据源的输入数据流创建Dstream,也可以在其他Dstream上使用map、reduce、join、window等操作创建Dsteram。Dstream本质上呢,是表示RDD的序列。

  Spark Streaming首先将数据切分为一定时间范围(Duration)的数据集,然后积累一批(Batch)Duration数据集后单独启动一个任务线程处理。Spark核心提供的从DAG重新调度任务和并行执行,能够快速完成数据从故障中恢复的工作。

  那么下来就从SparkStreaming 的StreamingContext初始化开始:

  StreamingContext传入的参数:1、SparkContext也就是说Spark Streaming的最终处理实际是交给SparkContext。2、Checkpoint:检查点.3、Duration:设定streaming每个批次的积累时间。当然,也可以不用设置检查点。

  Dstream是Spark Streaming中所有数据流的抽象,这里对抽象类Dstream定义的一些主要方法:

  1、dependencies:Dstream依赖的父级Dstream列表。

  2、comput(validTime:Time):指定时间生成一个RDD。

  3、isInitialized:Dstream是否已经初始化。

  4、persist(level:StorageLevel):使用指定的存储级别持久化Dstream的RDD。

  5、persist:存储到内存

  6、cache:缓存到内存,与persisit方法一样。

  (这里详细说下cache与persist的不同点:cache只有一个默认的缓存级别MEMORY_ONLY ,而persist可以根据情况设置其它的缓存级别。)

  7、checkpoint(interval:Duration):设置Dstream及祖宗Dstream的DstreamGraph;

  8、getOrCompute(time:Time):从缓存generatedRDDs = new HashMap[Time,RDD[T]]中获取RDD,如果缓存不存在,则生成RDD并持久化、设置检查点放入缓存。

  9、generateJob(time:Time):给指定的Time对象生成Job.

  10、window(windowDuration:Duration):基于原有的Dstream,返回一个包含了所有在时间滑动窗口中可见元素的新的Dstream.

  ......

  Dsteam本质上是表示连续的一些列的RDD,Dstream中的每个RDD包含了一定间隔的数据,任何对Dstream的操作都会转化为底层RDD的操作。在Spark Streaming中,Dstream提供的接口与RDD提供的接口非常相似。构建完ReciverInputDStream后,会调用各种Dstream的接口方法,对Dstream进行各种转换,最后各个Dstream之间的依赖关系就形成了一张DStream Graph:

  整个流程所涉及的组件为:

  1、Reciever:Spark Streaming内置的输入流接收器或用户自定义的接收器,用于从数据源接收源源不断的数据流。

  2、currentBuffer:用于缓存输入流接收器接收的数据流。

  3、blockIntervalTimer:一个定时器,用于将CurrentBuffer中缓存的数据流封装为Block后放入blocksForPushing。

  4、blockForPushing:用于缓存将要使用的Block。

  5、blockPushingThread:此线程每隔100毫秒从blocksForPushing中取出一个Block存入存储体系,并缓存到ReceivedBlockQueue。

  6、Block Batch:Block批次,按照批次时间间隔,从RecievedBlockQueue中获取一批Block。

  7、JobGenerator:Job生成器,用于给每一批Blcok生成一个Job。

   下来继续回到StreamingContext,在StreamingContext中new了一个JobScheduler,它里面创了EventLoop,对这个名字是不是很熟悉?没错,就是在Netty通信交互时创建的对象,主要用于处理JobSchedular的事件。然后启动StrreamingListenerBus,用于更新Spark UI中的StreamTab的内容。 那么最重要的就是下来创建ReceiverTracker,它用于处理数据接收、数据缓存、Block生成等工作。最后启动JobGenerator,负责对DstreamGraph的初始化、Dstream与RDD的转换、生成JOB、提交执行等工作。

  

  曾经是用ReciverTrackerActor接收来自Reciver的消息,包括RegisterReceiver、AddBlock、ReportError、DeregisterReceiver等,现在不再使用Akka进行通信,而是使用RPC。

  回到launchReceivers,调用了SparkContext的makeRDD方法,将所有Receiver封装为ParallelCollectionRDD,并行度是receivers的数量,makeRDD方法实际调用了parallelize:

  

  今天到此为止。。明天再来会你这磨人的小妖精,玩别的去啦~~~

 

参考文献:《深入理解Spark:核心思想与源码分析》

目录
相关文章
|
1月前
|
存储 人工智能 C++
Agent的记忆:事件,经验与性格塑造
本文提出面向AI Agent的分层记忆协议,突破日志式存储局限,以“来源—层级—晋升”三重机制重构记忆架构:严格区分事件、经验、知识与性格;建立五阶塑造阶梯(事件→经验→稳定经验→技能→性格);通过写入四问、定时归档与激活检索,实现记忆“不失忆、不爆炸、能生长”。让Agent真正从“记得多”走向“长得像人”。
313 1
|
1月前
|
Java API 开发工具
阿里云百炼如何使用?首次调用千问API教程参考
本文为阿里云百炼调用千问大模型API的完整入门指南。文章首先指导用户完成账号注册、百炼开通、API Key与业务空间ID的获取,并详细演示了在Linux、macOS、Windows三大系统中配置API Key至环境变量的方法。随后,文章分步详解了通过Python、Node.js、Java、curl及Go/PHP/C#等主流语言调用qwen3.8-max模型的完整代码示例与关键配置,涵盖SDK安装、客户端初始化、请求发送与响应解析。
|
2月前
|
应用服务中间件 数据库 nginx
从 localhost 到公网服务:Web 项目开发、部署与上线完整流程
为vibecoding小白提供了从本地AI写代码到部署网站上线的完整流程
1262 0
|
3月前
|
人工智能 NoSQL 开发工具
AI 还在装失忆?1 万 Star 开源 EverOS 有点东西,把 Agent 记忆塞进 Markdown
EverOS 是 EverMind-AI 开源的 local-first Agent 记忆运行时,将会话和 Agent 经验保存为可读、可编辑、可迁移的 Markdown 资产。
285 4
|
4月前
|
人工智能 算法 数据可视化
GEO管道网络策略:从单点突破到生态增长——专访GEO高级优化师罗长才
AI搜索时代,单篇内容难获稳定流量。GEO高级优化师罗长才提出“管道网络”理念:以自建站为主基地,多平台为前哨站,通过风险分散、交叉引流与复利叠加,构建可持续的GEO流量系统。
315 2
|
3月前
|
JSON 前端开发 测试技术
计算巢支持一键部署GLM-5.2
GLM-5.2是智谱推出的旗舰级MoE大模型(744B总参,激活仅40B),支持真正无损1M上下文与128K输出,长程任务能力开源SOTA,编程与工程规范遵循能力卓越,原生支持结构化输出与工具调用,已在计算巢模型市场开放FP8版一键部署。
|
4月前
|
人工智能 前端开发 安全
09|如何评价一个 Agent Harness:效率、稳定性和可控性
本文提出评估AI编程Agent(如Agent Harness)的六大工程化指标:任务完成率、探索成本、验证能力、改动质量、可控性与团队适配度,强调摒弃“炫技式”评测,转向真实研发场景下的可量化、可复盘、可改进的系统性评价体系。(239字)
367 0
|
存储 安全 算法
Htpasswd在线生成工具
快速生成安全的Apache Htpasswd认证文件,支持多种加密算法
674 3
|
Java Linux 网络安全
基于云服务器的数仓搭建-服务器配置
本文介绍了购置并配置三台云服务器的详细步骤。使用FinalShell连接服务器,并安装了必要的工具如epel-release、net-tools和vim。关闭防火墙后,在/opt目录下创建module和software文件夹,卸载默认JDK并修改主机名。添加环境变量路径/home/alpfree/bin,编写集群分发脚本xsync实现文件同步,配置无密登录,安装并分发JDK。参考资料来自海波老师的电商数仓课程。

热门文章

最新文章