Apache Celeborn是阿里云开源的中间数据服务,旨在提升大数据计算引擎的性能、稳定性和灵活性。Celeborn设计独立于具体引擎,支持Spark、Flink、MapReduce (MR) 和 Tez,并且是目前最流行的Remote Shuffle Service的实现。
Celeborn架构
Celeborn通过采用Push-Based Shuffle + Partition数据聚合的核心设计,将Shuffle数据托管至远端存储,并支持多种流控和隔离策略,解决了传统Shuffle在IO效率不足、资源弹性不足以及整体稳定性不佳等多方面的问题。下图展示了Celeborn的架构,左侧为Celeborn集群,由高可用的多Master架构和Shuffle Worker组成;右侧则为引擎侧,展示了一套Celeborn集群可以支持多种不同的计算引擎。
核心特性
Apache Celeborn不仅在设计上追求高性能和高可靠,同时在可运维性、可观测性和稳定性方面也进行了全面的优化。
核心性能设计
Push-Based Shuffle和数据分区聚合:该设计消除了传统Shuffle的随机读取问题,提高了数据处理的效率。
全链路异步化处理:所有的数据推送、刷新、获取和提交过程都实现了异步化,进一步提升了系统性能。
小包合并传输:通过合并小包的方式,减少了网络中小包频繁传输带来的开销,有效提升了数据传输效率。
稳定性设计
高可用架构:支持多主节点的高可用(HA)设计,具备容忍Master节点故障的能力,同时Shuffle数据支持双副本,确保在单机故障时仍能正常运行。
流量控制:采用类TCP Slowstart 的流控策略,并结合Celeborn Worker内存管理,防止 Worker 受到过量流量的冲击。
防止数据倾斜:通过避免单个分区文件过大,成功抑制Celeborn Worker的数据倾斜现象。
故障隔离机制:在面对节点压力过大或磁盘故障时,Celeborn会主动隔离受影响的Shuffle Worker,确保后续Shuffle不再使用这些资源,直到问题得到解决。
配额(Quota)控制:允许对Shuffle数据量进行限制,从而预防异常作业对集群稳定性的影响。
可观测性
全面的监控指标:Celeborn支持丰富的Master和Worker性能指标,可以监测RPC、数据推送、获取、内存使用和磁盘I/O等各类指标,帮助运维人员及时评估集群的状态和问题。
可运维性
丰富的运维API:提供一系列RESTful API,支持 Shuffle Worker的优雅下线、异常应用的清理和集群Worker信息的查询,提升了运维管理的效率。
支持热升级:Celeborn实现了Rolling Upgrade功能,在升级过程中不会影响作业的稳定性,系统能够通过重试、恢复分区等机制自动处理升级中可能出现的异常。
Spark特性支持
Apache Celeborn完整支持Spark的多个关键特性,包括:
自适应查询执行(Adaptive Query Execution,简称AQE):在处理倾斜分区的 Sub Reducer 时,Celeborn 会自动进行数据排序,并支持根据 Spark 的 Map range 读取相应分区数据。
Stage重算:在读取Shuffle数据过程中,若遇到数据丢失或Shuffle Worker异常,Celeborn支持主动触发Spark Stage重算,确保作业的顺利进行。
动态资源分配:将Shuffle数据存储在Celeborn服务端,允许Spark Executor根据需要进行弹性伸缩,进而实现计算资源与Shuffle存储资源的解耦。
Celeborn企业级特性
EMR Serverless Spark内部集成了Apache Celeborn服务,用户无需感知Shuffle服务。在社区Celeborn基础上,EMR Serverless Spark Celeborn实现了多项企业级能力:
数据加密和隔离
Celeborn支持对Shuffle数据进行加密,经过加密后的Shuffle数据仅限于该Spark任务使用,其他任何手段均无法解密该数据。
Celeborn支持多租户功能,服务端会对租户身份进行认证,并根据租户身份实现Shuffle数据的隔离存储与访问,不同租户之间的数据相互不可见。
增强Shuffle Quota控制
增加对Application任务数、RPC QPS、租户级Shuffle Size以及租户Application级 Shuffle Size等Quota的控制,以防止异常作业对Celeborn集群稳定性造成破坏。
自动弹性扩缩容
Celeborn服务端会根据集群状态自动进行弹性伸缩,以调整Celeborn Shuffle Worker的数量,从而确保集群整体的Shuffle性能不受应用程序Shuffle量和引擎侧应用程序并发性的影响。
AQE ShuffleRead性能优化
Serverless Spark结合AQE优化场景,将数据读取方式由MapRange转换为Partition Split,从而全面消除因额外索引文件构建及排序所导致的IO开销,进一步提升数据倾斜(Skew)场景下的Shuffle读取效率。
跨可用区高可用
多套Shuffle服务共同构成主备集群。在发生容灾时,Proxy能够自动切换故障实例,从而保持服务的高可用性。
Celeborn社区能力和企业级特性对比
特性 | 社区能力 | 企业级特性 |
HA架构 | ✔ | ✔ |
流控 | ✔ | ✔ |
Sort/Hash based Partition Writer | ✔ | ✔ |
PushMerge | ✔ | ✔ |
分区数据Split | ✔ | ✔ |
异步 | ✔ | ✔ |
Quota | ✔ | ✔ |
多引擎支持,包括Tez、Spark、Flink和MapReduce | ✔ | ✔ |
AQE | ✔ | ✔ |
Rolling Upgrade | ✔ | ✔ |
故障隔离 | ✔ | ✔ |
多层存储 | ✔ | ✔ |
Shuffle数据加密及隔离方案 | - | ✔ |
Shuffle Quota控制 | - | ✔ |
弹性扩缩容 | - | ✔ |
AQE优化 | - | ✔ |
内存存储 | - | ✔ |
跨可用区高可用 | - | ✔ |