Celeborn介绍

Apache Celeborn是阿里云开源的中间数据服务,旨在提升大数据计算引擎的性能、稳定性和灵活性。Celeborn设计独立于具体引擎,支持Spark、Flink、MapReduce (MR) 和 Tez,并且是目前最流行的Remote Shuffle Service的实现。

Celeborn架构

Celeborn通过采用Push-Based Shuffle + Partition数据聚合的核心设计,将Shuffle数据托管至远端存储,并支持多种流控和隔离策略,解决了传统ShuffleIO效率不足、资源弹性不足以及整体稳定性不佳等多方面的问题。下图展示了Celeborn的架构,左侧为Celeborn集群,由高可用的多Master架构和Shuffle Worker组成;右侧则为引擎侧,展示了一套Celeborn集群可以支持多种不同的计算引擎。

image

核心特性

Apache Celeborn不仅在设计上追求高性能和高可靠,同时在可运维性、可观测性和稳定性方面也进行了全面的优化。

核心性能设计

  • Push-Based Shuffle和数据分区聚合:该设计消除了传统Shuffle的随机读取问题,提高了数据处理的效率。

  • 全链路异步化处理:所有的数据推送、刷新、获取和提交过程都实现了异步化,进一步提升了系统性能。

  • 小包合并传输:通过合并小包的方式,减少了网络中小包频繁传输带来的开销,有效提升了数据传输效率。

稳定性设计

  • 高可用架构:支持多主节点的高可用(HA)设计,具备容忍Master节点故障的能力,同时Shuffle数据支持双副本,确保在单机故障时仍能正常运行。

  • 流量控制:采用类TCP Slowstart 的流控策略,并结合Celeborn Worker内存管理,防止 Worker 受到过量流量的冲击。

  • 防止数据倾斜:通过避免单个分区文件过大,成功抑制Celeborn Worker的数据倾斜现象。

  • 故障隔离机制:在面对节点压力过大或磁盘故障时,Celeborn会主动隔离受影响的Shuffle Worker,确保后续Shuffle不再使用这些资源,直到问题得到解决。

  • 配额(Quota)控制:允许对Shuffle数据量进行限制,从而预防异常作业对集群稳定性的影响。

可观测性

全面的监控指标:Celeborn支持丰富的MasterWorker性能指标,可以监测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 SizeQuota的控制,以防止异常作业对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、FlinkMapReduce

AQE

Rolling Upgrade

故障隔离

多层存储

Shuffle数据加密及隔离方案

-

Shuffle Quota控制

-

弹性扩缩容

-

AQE优化

-

内存存储

-

跨可用区高可用

-