1、DataFunCon#2024Apache Celeborn在B站的最佳实践蒋晓峰-哔哩哔哩-资深开发工程师Contents目录Apache Celeborn背景概览Apache Celeborn原理剖析Apache Celeborn生产实践Apache Celeborn规划展望01 Apache Celeborn背景概览传统Shuffle痛点 传统Shuffle缺陷1.依赖大容量本地盘/云盘存储Shuffle数据,数据驻留直至消费完成,限制存算分离2.Mapper排序占用较大内存,甚至触发外排,IO放大3.Shuffle Read高网络连接,逻辑连接数是M*N4.磁盘随机读,存在大量的随机读
2、盘5.数据单副本,容错性较低6.和NodeManager同一进程,影响YARN调度的稳定性 传统Shuffle问题1.不够高效 写放大 随机读 高网络连接 传统Shuffle过程 Mapper Task基于Partition ID对Shuffle数据本地排序,写到本地磁盘,同时写一个索引文件记录文件里属于每一个Partition的Offset和Length,生成数据文件和Index文件 Reduce Task从每个Shuffle数据文件里读取Partition数据3.不够弹性 依赖大容量本地盘 无法存算分离2.不够稳定 Fetch Failure OOMCeleborn简介概览 Celebor
3、n:大数据引擎统一中间数据服务 阿里云捐赠给Apache基金会的通用Remote Shuffle Service 旨在解决大数据引擎处理中间数据遇到的性能、稳定性及弹性问题,提升大数据计算引擎的性能、稳定性和弹性 引擎无关,支持Spark,Flink及MapReduce等多引擎 Shuffle+Spill Data:解除对大容量本地盘的依赖https:/ 1800+commits 89 Contributor&16 committer 810+stars&330+forksCeleborn核心优势 Celeborn优势 使用Push-Style Shuffle代替Pull-Style,减少Ma
4、pper内存压力 支持IO聚合,Shuffle Read连接数从M*N降到N,同时更改随机读为顺序读 支持两副本机制,降低Fetch Fail概率 支持计算与存储分离架构,部署Shuffle Service至特殊硬件环境,与计算集群分离 解决Spark On Kubernetes对本地磁盘的依赖 Externel Shuffle Service(ESS)ESS Shuffle服务内嵌在NodeManager中 Shuffle Write阶段:Map Task产生的Shuffle数据写入到本地存储介质 Shuffle Read阶段:Reduce Task读取Shuffle数据文件时从ESS服务获
5、取 存在诸多弊端包括异构存储导致长尾任务现象严重、磁盘和网络开销大及可靠性差等Celeborn VS External Shuffle Service Celeborn VS Externel Shuffle Service性能 测试1.1T/2.2T/3.3T的纯Shuffle场景,对比ESS,Celeborn 0.2.1,Celeborn 0.3.0 Celeborn相比ESS有明显性能优势,随着Shuffle 规模变大优势愈加明显 对比ESS,Celeborn优势主要在Shuffle Read阶段;对于Shuffle Write阶段,Celeborn通过一层网络,ESS直接写本地文件,最
6、新版本没有明显性能降低 测试10T的TPCDS,对比ESS,Celeborn单副本和两副本 单副本20%提升,两副本15%提升02 Apache Celeborn原理剖析Celeborn设计架构 服务端 Master 管理集群状态 分配负载 基于Raft实现高可用 Worker 接收&存储&服务Shuffle数据 多层存储 Memory Local Disks DFS/Object Store 客户端 Lifecycle Manager 管理当前作业的Shuffle Metadata Shuffle元数据转移,降低Master负载 Shuffle Client存在于Executor或者Task