字节跳动开源自研 Shuffle 框架——Cloud Shuffle Service
大数据计算引擎常用的 Pull-Based Sort Shuffle 方案实现机制存在缺陷,在大规模生产环境下经常因为 Shuffle 问题影响作业稳定性。在此背景下,字节跳动自研了 Cloud Shuffle Service,提供比原生方案稳定性更好、性能更高、更弹性的数据 Shuffle 能力,同时也为存算分离/在离线混部等场景提供了 Remote Shuffle 解决方案。
Cloud Shuffle Service(以下简称CSS) 是字节自研的通用 Remote Shuffle Service 框架,支持 Spark/FlinkBatch/MapReduce 等计算引擎,提供了相比原生方案稳定性更好、性能更高、更弹性的数据 Shuffle 能力,同时也为存算分离/在离线混部等场景提供了 Remote Shuffle 解决方案。
在大数据计算引擎中,Pull-Based Sort Shuffle 是一种常见的 Shuffle 方案,比如 Spark/MapReduce/FlinkBatch (高于 1.15 版本)等都将 Sort Shuffle 作为引擎默认方案,但是 Sort Shuffle 实现机制有一定的缺陷,在大规模生产环境下经常因为 Shuffle 问题影响作业稳定性。
以 Spark 的 Sort Shuffle 为例:
将多个 Spill 文件合并成一个文件,会额外消耗读写 IO; 假设有 m 个 MapTask & n 个 ReduceTask,会产生 m*n 个网络链接,当数量特别多时:
大量的网络请求会导致 Shuffle Service 容易形成积压;
Shuffle Service 会产生大量的随机读取,容易导致 IO 瓶颈,特别是 HDD 集群; Shuffle Service 无法做到 Application 的资源隔离,当有一个异常作业时,可能会影响同一个 Shuffle Service 节点上其它所有作业,问题容易放大; MapTask 生成的 Shuffle Data File 只存储一份到本地,当磁盘坏了也会导致数据丢失,同样引起 FetchFailed 问题; Shuffle Data File 写到本地磁盘的方式,依赖计算节点上的磁盘,无法做到存算分离。
受限 HDD 磁盘 IO 能力/磁盘坏等情况,导致大量的 Shuffle FetchFailed 引起的作业慢/失败/Stage 重算等问题,影响稳定性&资源利用率 External Shuffle Service (以下简称ESS) 存算无法分离,遇到磁盘容量低的机器经常出现磁盘打满影响作业运行
在此背景下,字节跳动自研了 CSS,用来解决 Spark 原生 ESS 方案的痛点问题。自 CSS 在内部上线一年半以来,当前线上节点数 1500+,日均 Shuffle 量 20+PB,大大提高了 Spark 作业的 Shuffle 稳定性,保障了业务的 SLA。
Cloud Shuffle Service 介绍
CSS 是字节自研的 Push-Based Shuffle Service,所有 MapTask 通过 Push 的方式将同一个 Partition 的 Shuffle 数据发送给同一个 CSS Worker 节点进行存储,ReduceTask 直接从该节点通过 CSS Worker 顺序读取该 Partition 的数据,相对于 ESS 的随机读取,顺序读的 IO 效率大大提升。
CSS 架构
Cloud Shuffle Service(CSS) 架构图
如前描述,用来存储 CSS Worker 节点信息以及 ShuffleId 等信息。
CSS 特性
CSS 完整支持 AQE 相关的功能,包括动态调整 Reduce 个数/ SkewJoin 优化/Join 策略优化。对于SkewJoin,CSS做了更多的适配优化工作,解决了 Skew Partition 数据被多个 ReduceTask 重复读取问题,大大提高了性能。
CSS 性能测试
CSS 1TB 测试提升 30% 以上的 Query
支持 MapReduce/FlinkBatch 引擎; CSS 集群增加 ClusterManager 服务角色,管理 CSS Worker 的状态&负载信息,同时将当前 CSS Master 分配 CSS Worker 的功能提到 ClusterManager; 基于异构机器(如磁盘能力不同)/负载 等维度的 CSS Worker 分配策略。
基于字节跳动基础架构提供的云原生技术能力和技术实践,火山引擎已经构建了全栈的云原生服务产品矩阵,包括面向算力的云原生服务、面向应用的云原生服务和面向场景的云原生服务三大板块。
欢迎下载 IDC 和火山引擎联合出品的云原生白皮书,获取企业数字化转型新理念!
扫描二维码,下载火山引擎云原生白皮书