Spark

spark 3.2 reuse pvc 功能改造

2022-09-09  本文已影响0人  todd5167

背景

spark reuse pvc

PVC: PersistentVolumeClaim. A PersistentVolumeClaim (PVC) is a request for storage by a user. It is similar to a Pod. Pods consume node resources and PVCs consume PV resources. Pods can request specific levels of resources (CPU and Memory). Claims can request specific size and access modes (e.g., they can be mounted ReadWriteOnce, ReadOnlyMany or ReadWriteMany, see AccessModes).
spark 3.2 推出 Support shuffle data recovery on the reused PVCs 功能,在spark on k8s部署模式下为pod申请pvc,在pod异常退出时,新创建的executor 通过复用历史pvc来恢复shuffle数据。
因为我们公司spark 任务使用 aws spot集群,每天都会有大量spark 任务因为节点回收导致task重算,从而导致执行时间过长、成本上升。因此,我们希望通过该特性减少 task 重算,通过复用 pvc 已经计算过的数据加速任务执行。

spark shuffle



前一个 Stage 的ShuffleMapTask进行 Shuffle Write, 把数据存储在 BlockManager 上面, 并且把数据位置元信息上报到 Driver 的 MapOutTrack 组件中, 下一个 Stage 根据数据位置元信息, 进行 Shuffle Read, 拉取上个 Stage 的输出数据。
在 Shuffle 阶段,如果有executor lost 发生, scheduler 会在 MapOutTrack 移除当前executor维护的元数据信息,scheduler 会重新调度 executorId上的所有task, Shuffle Read 阶段会重新调度前一个stage的部分task重新生成数据。

社区版

目标

实现

pvc数量精确控制

pod在创建时会从空闲的pvc中随机选择一个,如果pvc数量大于最终要运行的executor pod数量,可能会导致shuffle数据无法恢复。


stage延迟调度

StageC 的task执行时抛出 FetchFailed 异常,DAGScheduler 会将 StageB 和 StageC 重新调度,调度 StageB时会调度 parent stageA 丢失的task。

task 延迟失败重算

executor 恢复shuffle数据前置

收益

spot实例回收的越多,性能提升越明显


缺陷

上一篇下一篇

猜你喜欢

热点阅读