- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 视频嵌入链接 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
2.林友权&邵凯阳-字节跳动 Hadoop 云原生化演进实践
展开查看详情
1 .字节跳动 Hadoop 云原生化 演进实践 邵凯阳 | 字节跳动基础架构工程师 林友权 | 字节跳动基础架构工程师 2022/09/24
2 .目录 1 2 3 4 演进背景 解决方案 上线收益 未来规划
3 .演进背景 -- 离线规模 数十万 百万级 千万核 节点数 任务数/天 资源量/天
4 . 演进背景 -- 调度架构 离线调度 在线调度 User Code User Code AM Framework Lib 资源 任务 任务 状态 编排 调度 Controller Kubectl Scheduler Manager Admission AMS Quota Manager Manager Manager API Server ETCD Scheduler Scheduler Scheduler ZK ZKStateStore (Fair/Batch/Gang) (Fair/Batch/Gang) (Fair/Batch/Gang) Kubelet Kubelet Kubelet Kubelet NM NM NM NM ... NM' NM' ...
5 .演进背景 -- 核心诉求 ➢ 重大活动场景(春节/双 11),在离线资源需要能够高效、灵活地相互转换; ➢ 整个数据中心的利用率需要得到更全面、充分的提升,降本增效; ➢ 在离线资源共池,Quota 管控、调度、运行、机器运维统一;
6 .解决方案 -- 离线作业直接迁移 K8s ? 由大数据的各个计算引擎,包括 Spark、Flink 等深度改造以适配 K8s。 ➢ 对计算引擎侵入较深,计算引擎侧需要做大量改造才能支持原先在 YARN 的各种特性; ➢ 生产环境的作业(百万级)非常多,如何从 YARN 平滑迁移到 K8s 也是个比较大的问题; ➢ 特别地,部分比较古老的计算引擎,比如 MapReduce,目前处于 maintain 状态,已经 无法做大的改造来迁移;
7 .解决方案 -- Yodel Yodel(YARN on Gödel)是字节跳动提出的 Hadoop 大数据生态云原生 化演进实践方案,其中 Gödel 是公司内增强版 Kubernetes 。 将公司内大数据业务(Spark/Flink)、训练业务(Primus)平滑迁移到 Kubernetes,实现在离线资源池统一,提升资源利用率。
8 .解决方案 1 Yodel 架构 4 持久化服务 2 RGS 服务 5 平滑迁移 3 RKS 服务 6 重要优化
9 .解决方案 -- Yodel 架构 User Code AM Framework CLI 6. Resource 9. Container 10. Start YarnClient SDK Container Request Allocated 1. Submit App (heartbeat) (heartbeat) Admission AMS Quota Manager Manager Manager Yodel RM ZK/ETCD/KV Remote Godel Remote Kubelet State Store Scheduler Service 2. New App 3. Request 4. AM Pod 5. Start 7. Create 8. Pod 11. Patch AM Pod Allocated AM Pod/PodGroup Allocated Pod 新增组件 API Server 适配组件 Gödel Scheduler Kubelet Kubelet K8s/Gödel 生态 Kubelet
10 .解决方案 -- Yodel 架构 Pod 生命周期 AM 1. Resource 5. Container 6. Start Request Allocated Container (Acquired) (Acquired) Yodel RM 2. Create Pod 4. Convert Pod 7. Patch Pod (Pending- To Container (Acquired) Unscheduled) (Allocated) API Server 3. Pod Allocated 8. Start Pod (Pending-Scheduled) (Running) Gödel Scheduler Kubelet Kubelet Kubelet
11 .解决方案 -- RGS 服务 List<Container> AM AM AM ResourceRequest Fair Share Fair Share Quota Guaranteed Sort Policy Best-effort Sort Policy Manager Resource Resource Quota Control Quota Control ➢ 兼容 Hadoop 协议 任务无需改动 Convert Request Convert Pod To Pod Service To Container Service ➢ 支持 GT 和 BE 两种 Allocate RGS Service Update Pod 资源类型 Delete Pod Service Status Service Pod Request List<Pod> API Server Remote Scheduler Gödel Scheduler
12 .解决方案 -- RKS 服务 NM Client SDK AM 1. Start Container 8. Sync Container Status Patch Pod Pod Status RKS Service Update Service 2. Patch Pod 7. Watch Pod HDFS API Server 3. Start Pod 6. Update Pod State 4. Localize Resource Kubelet LocalizationService Containerd Log Shuffle Serving Service 5. Run Pod Container Metrics Webshell Collector Pod Worker DaemonSet
13 .解决方案 -- 持久化服务 RM RM ZKStateStore KVStateStore API Server ➢ MetaData: 集群元数据信息、集群默认配置等; ➢ Queue(~300/cluster):队列 Quota、ACL 信息等; ➢ Application(~2W/cluster): name、user、state 等; ➢ AppAttempt(~10W/cluster):name、user、state 等; ➢ Pod(~30W/cluster): state、annotation、env 等;
14 .解决方案 -- 平滑迁移 Workflow Hosting Submit App ResLake Rebalance Queue Quota/App root.queueA App App App root.queueA App App Quota root.queueB App App Platform root.queueB App ... ... NM NM NM NM NM NM ... Kubelet Kubelet Kubelet Kubelet Kubelet ... AutoMigration YARN 架构集群 Yodel 架构集群
15 .解决方案 -- 重要优化之性能优化 ➢ Recover 阶段异步恢复 Pod 状态降低切主时间(秒级); ➢ 异步多线程操作 Pod 以提高调度吞吐(~2K/s); ➢ PodName 散列优化助力底层存储写延迟下降 100 倍; ➢ 与 API Server 交互增强,java fabric8 k8s client 优化: ➢ 支持指数退让重试,增强 API Server 故障容错; ➢ list 操作默认添加 resourceVersion 参数,避免击穿到底层存储; ➢ 将 informer resync 设置为 0,避免频繁内存拷贝造成 OOM;
16 .解决方案 -- 重要优化之运行优化 ➢ AM 容器运行在单独资源池,独立优先级不可抢占; ➢ 支持镜像本地化约束,平均拉起速度提升 ~1000 倍; ➢ 支持双栈节点和 v6 only 节点在单集群混跑; ➢ Shuffle 数据写远程,避免打爆本地磁盘; ➢ 大量引入 ssd 和 nvme 磁盘,加速作业运行;
17 .上线收益 高效资源切换 利用率提升 在离线统一 NM 和周边单机组件 实现 2022 元旦/春 在离线资源全量共池, 下线,降低 节 ~50W 核离线资 Quota 管控、调度、 Overhead,带来单 源分钟级出让; 运行、机器运维统一; 机 2% 利用率提升;
18 .未来规划 ➢ RGS & RKS 部署云原生化 ➢ 接入服务发现 ➢ 支持容器化部署 ➢ 可弹性扩展 ➢ 开源回馈社区
19 .