RDD
RDD five main properties | Method | Location | Input | Output |
---|---|---|---|---|
A list of partitions | getPartitions | ? | - | [Partition] |
A function for computing each split | compute | ? | Partition | Iterable |
A list of dependencies on other RDD | getDependencies | ? | - | [Dependency] |
(Optional)A partitioner for key-value RDDS | ||||
(Optional)A list of preferred lications to compute each split |


RDD: transformation action
cache
JMM: Java Memory Model (Java内存模型)
计算,我们通过CPU来的;数据是在内存里面的;现在信息技术这么发达,CPU的速度比你从内存/磁盘读数据的速度快的多,所以会导致CPU很多地方就消耗了. 一般会在,读内存上面 在组内存和CPU之间会有一个三层缓冲区(L1、L2、L3),先把数据加载到内存里面,CPU在处理的时候,就会去内存里面找,然后改完之后,再刷到内存里面.
当然,这样就会产生一系列的问题,你的数据一致性,就有问题了.
三层缓冲区L1、L2、L3,会产生数据一致性(数据一致性 -> 很难保证,多线程,每一个core都有自己的线程运行,每个线程都有自己的缓冲区,多线程去访问共享资源的时候,肯定会有问题.)
数据一致性: 原子性、可见性、顺序性
=> volatile(保证可见性,顺序性, i++ 在多线程中存在线程安全)
把数据集放到内存里面 ,放到executor里面
cache lazy 需要Action来触发
Spark Core: MEMORY_ONLY MEMORY_ONLY_SER
Dependency
Narrow: 一个父RDD的partition只能被子RDD的某个partition使用一次
Wide(shuffle): 一个父RDD的partition只能被子RDD的某个partition使用多次
action --> Job --> n stages --> n task
注意: **遇到join,要分情况**


上图中,黑色的部分,就代表丢失的数据
中间丢了,要从头开始算
MR: 1+1+1+1
1+1 -> 2
2+1 -> 3
3+1 -> 4
pipeline 一个partition就是一个task
窄依赖中,一个stage,可以干到死
Spark on YARN Overview
MR: base-process
each task in its own process: MapTask ReduceTask proces
when a task completes, the process goes away
Spark: base-thread
many tasks can run concurrently in a single process
this process sticks around for the lifetime of the Spark Application
enen no jobs are running
advantage:
speed, tasks can start up very quickly
in-memory
Cluster Manager
Spark Application ==> CM
Local standalone YARN Mesos K8s ==> Pluggable
ApplicationMaster: AM
YARN Application ==> AM(first container)
Worker:
YARN X executor runs in container(memory of container > executor memory)
Standalone(Not concerned)
Spark仅仅只是一个客户端而已
Spark on YARN Submitting
Deploy Mode:
client: Driver local
cluster: Driver Cluster
慢?能不能解决? ==> production(生产上的优化点)
3 3 5120
1 job == n stage == n task

Driver跑到集群里面,看日志怎么看?
节点很多, 你不知道Driver运行在哪个节点上?

Container的内存要大于spark的内存,spark的内存有哪些,executor内存、AM内存,AM跑在Container里面也是占内存的,占512M,如果你需要,还可以调整

Spark on YARN总结:
1) Driver: Local/Cluster
2) Client: (很多场景下还是用Client)
AM: requesting resources
Cluster: (用这个也没有问题)
AM: requesting resources
task schedule(本来是由Driver来做的,但是Driver跑在Cluster上,所以两个在一块)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南