在平衡不同硬件资源的时候,相比于CPU、内存、磁盘,网络开销处理延迟最高
一、数据读写
- 对于大多数应用来说,第一步都是从分布式系统中读取数据,不论什么文件格式,也不管哪种文件存储系统,访问数据源是否会引入网络开销,取决于任务与数据的本地性关系,也就是任务的本地性级别
本地性级别 | |
---|---|
process_level | 任务与数据在同个JVM进程中 |
local_level | 任务与数据在同一个计算节点上,任务可能在磁盘或者另一个JVM进程中 |
rack_level | 任务与数据不在同一节点,但在同一个物理机架上 |
any | 任务与数据是跨机架,甚至是跨数据中心(DC)的关系 |
- 在读取数据源阶段,数据还未加载到内存,无法到process_level,调度的最高级别是node_level
- 此外还有一些内存文件系统,如Alluxio,数据读取的时候,有可能是process_level
- 因此,要想是node_level,spark与外部存储系统在物理上需要是紧紧耦合在一起的,物理上紧耦合,spark会用磁盘I/O代替网络开销,物理上分离,网络开销就无法避免
- Spark调度的核心是数据不动代码动,若是process