物理执行图
-
物理图的作用是什么?
问题一: 物理图的意义是什么?
物理图解决的其实就是 RDD 流程生成以后, 如何计算和运行的问题, 也就是如何把 RDD 放在集群中执行的问题
问题二: 如果要确定如何运行的问题, 则需要先确定集群中有什么组件
- 首先集群中物理元件就是一台一台的机器
- 其次这些机器上跑的守护进程有两种: Master, Worker
- 每个守护进程其实就代表了一台机器, 代表这台机器的角色, 代表这台机器和外界通信
- 例如我们常说一台机器是 Master, 其含义是这台机器中运行了一个 Master 守护进程, 如果一台机器运行了Master 的同时又运行了 Worker, 则说这台机器是 Master 也可以, 说它是 Worker 也行
- 真正能运行 RDD 的组件是: Executor, 也就是说其实 RDD 最终是运行在 Executor 中的, 也就是说, 无论是 Master 还是 Worker 其实都是用于管理 Executor 和调度程序的
结论: RDD 一定在 Executor 中计算, 而 Master 和 Worker 负责调度和管理 Executor
问题三: 物理图的生成需要考虑什么问题?
- 要计算 RDD, 不仅要计算, 还要很快的计算 → 优化性能
- 要考虑容错, 容错的常见手段是缓存 → RDD 要可以缓存
结论:在生成物理图的时候, 不仅要考虑效率问题, 还要考虑一种更合适的方式, 让 RDD 运行的更好
-
谁来计算 RDD ?
问题一: RDD 是什么, 用来做什么 ?
回顾一下 RDD 的五个属性
- A list of partitions
- A function for computing each split
- A list of dependencies on other RDDs
- Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
- Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
简单的说就是: 分区列表, 计算函数, 依赖关系, 分区函数, 最佳位置
- 分区列表, 分区函数, 最佳位置, 这三个属性其实说的就是数据集在哪, 如何分区,在哪更合适
- 计算函数和依赖关系, 这两个属性其实说的是数据集从哪来
结论:RDD 是一个数据集的表示, 不仅表示了数据集, 还表示了这个数据集从哪来, 如何计算
但是问题是, 谁来计算 ? 如果为一台汽车设计了一个设计图, 那么设计图自己生产汽车吗 ?
问题二: 谁来计算 ?
前面我们明确了两件事,