eBay 基于 Celeborn RESTful API 进行自动化工具集成实践

作者:王斐,ebay Hadoop 团队软件工程师,Apache Kyuubi PMC member,Apache Celeborn Committer。

简介:Apache Celeborn 是一个统一的大数据中间服务,致力于提高不同MapReduce引擎的效率和弹性。为了Spark on Kubernetes的弹性以及解决External Shuffle Service的灵活性和稳定性不足,eBay引入 Celeborn 作为Remote Shuffle Service。本文介绍了eBay基于最新 RESTful API 进行自动化管理Celeborn集群实践。

Apache Celeborn 交流钉钉群:41594456

原文阅读:eBay 基于 Celeborn RESTful API 进行自动化工具集成实践

01 前言

Apache Celeborn 是一个统一的大数据中间服务,致力于提高不同MapReduce引擎的效率和弹性,并为中间数据(包括shuffle数据、溢出数据、结果数据等)提供弹性、高效的管理服务。目前,Celeborn专注于shuffle数据。

为了Spark on Kubernetes的弹性以及解决External Shuffle Service的灵活性和稳定性不足,eBay引入 Celeborn 作为Remote Shuffle Service。

Celeborn 集群本身分为两个组件,Celeborn Master 和 Celeborn Worker, Worker负责处理数据的读写,并通过心跳将各种信息汇报给 Master, 然后Master通过raft 协议保证集群数据的一致性。

对于Celeborn Master,我们进行Cloud Native部署, Celeborn Worker与现有的计算节点的NodeManager进行混布,使用systemctl管理Worker服务进程, 目前最大的集群大概有接近6000台 Celeborn Worker。

由于集群规模较大,而且每个月都需要对集群的Pod进行OS patching,也就是说每个月Worker Pod都会重启一次,所以我们需要通过自动化工具来管理Celeborn集群,以便更好地保证集群的稳定性。

因此,我们对 Celeborn 的 RESTful API

(https://celeborn.apache.org/docs/latest/restapi/)进行了优化,以便更好地与自动化工具进行集成。这些改进将在 0.6.0 版本中发布,并且 celeborn-openapi-client SDK 也将可用,以帮助用户与新的 RESTful API 进行交互。 另外在 Celeborn 0.5.0 之后就支持通过 http://host:port/swagger 来查看swagger UI, 可以更好地了解API的使用。

本文将介绍我们如何基于最新的RESTful API集成自动化工具来管理Celeborn集群,其他方面不再详细说明。

02 Celeborn Master 管理

对于Celeborn Master我们是部署在Kubernetes,在Master pod 里有一个 agent 的container,会在重启前和重启后和自动化工具进行通信,触发 podPreStart 和 podPostStart workflow,来判断是否能够重启以及重启后服务是否正常。
2.1 Master Pod重启前流程

下面是 podPreStart workflow 的流程图,首先我们会判断当前是否处于 SLA window,如果是则等待。

图片

💡 检查 Celeborn Master 集群的状态

因为Master基于RAFT协议保证数据的一致性,所以重启前Master 的数量要大于总数量的一半 + 1,Master 数量目前我们是通过Prometheus的Metrics来判断。

检查当前集群Master集群拥有Leader,

•通过call Master APIGET /api/v1/masters,

然后检查返回结果leader字段。

图片

•确认当前Master 集群的group size是预期的,检查返回结果的 masterCommitInfo 字段的size。

•检查当前活着的Master的 commit index 是否一致,检查返回结果的 masterCommitInfo的 commitIndex 字段, 如果 commitIndex的gap大于一定的阈值,则需要等待。

💡 创建 Celeborn Master Ratis 快照

Ratis是一个Raft 协议的Java实现,Celeborn 使用Ratis来保证Master集群的数据一致性,为了在重启后快速恢复数据,我们会在重启前创建Ratis的快照。

Celeborn社区之前提供了Ratis-shell来管理ratis 集群,为了更好地和自动化工具进行集成,我们把所有ratis-shell命令都进行了RESTful实现, 方便进行Master的Failover以及创建Ratis快照。

图片

通过调用 POST /api/v1/ratis/snapshot/create 来创建快照。

图片

💡 按需进行Celeborn Master Failover以及检查

如果当前Master Pod是Leader, 则需要进行Failover。

•暂停当前Pod的Leader选举,调用

•POST /api/v1/ratis/election/pause

图片

•让出当前Pod的Leader, 调用

POST /api/v1/ratis/election/step_down

图片

•等待一段时间之后,恢复当前Pod的Leader选举,

调用 POST /api/v1/ratis/election/resume

图片

•重新检查当前Master集群的状态,并确保Leader已经变更,即当前Pod不再是Leader。

另外也可以单独触发 Master Failover, 调用 POST /api/v1/ratis/election/transfer 将leader转移到指定的Master上。

图片

2.2 Master Pod重启后流程

下面是 podPostStart workflow 的流程图:

•检查pod 是否ready,比如 hostname 和 VIP 是否正常。

•进行一些初始化操作,比如load conf。

•检查当前Master集群的状态,跟Pod重启前的检查基本一样,唯一不同的是,重启后只需确保活着的Master数量大于总数量的一半即可。

图片

03 Celeborn Worker 管理

自动化工具会周期性调用 Master 的 GET /api/v1/workers 来获取所有的注册的 Worker 的状态,包括 lostWorkers, excludedWorkers, manualExcludedWorkers, shutdownWorkers 和 decommissionWorkers。

同时我们设置了celeborn.master.workerUnavailable

Info.expireTimeout=-1, 以便即使Worker长时间下线,其信息也不会被清除掉(可调用 /api/v1/workers/remove_unavailable 按需清理)。

图片

3.1 Worker decommission
💡 Exclude Worker

首先,调用 Master POST /api/v1/workers/exclude 把worker信息放入 add 字段把worker加入到 manualExcludedWorkers 列表中,这样Master就不会再往这个worker上分配slots。

图片

💡 发送 DecommissionThenIdle event 并等待Worker进入IDLE 状态

目前Celeborn Master支持的events类型有 None, Immediately, Decommission, DecommissionThenIdle, Graceful, Recommission。

用于 Decommission 的event类型有 Decommission 和 DecommissionThenIdle。

下图是一些Worker State和event之间的转换图,其中 Decommission event会在完成之后,退出Worker 进程,而 DecommissionThenIdle event 是在完成之后,让Worker进入IDLE状态。

由于Worker进程在退出之后会被systemctl 自动拉起,所以我们选择使用 DecommissionThenIdle event来进行Decommission操作,以便更好地控制Worker的状态。

图片

调用 Master POST /api/v1/workers/events, eventType 为 DecommissionThenIdle 来发送Decommission事件, 并等待Worker进入IDLE状态。

图片

💡 Graceful Shutdown

在 Worker 进入IDLE 状态之后,检查Worker的 resourceConsumptions.

resourceConsumptions 是 一个map,key 为 userIdentifier, value用户的资源占用情况,包括 diskBytesWritten, diskFileCount, hdfsBytesWritten, hdfsFileCount 和 subResourceConsumptions。

subResourceConsumptions 也是一个map,key 为 applicationId, value是 application的资源占用情况。

我们通过判断当前Worker 上面不存在 subResourceConsumptions 非空的 resourceConsumption 来判断当前worker是否已经释放所有shuffle文件。

如果Worker已经释放所有shuffle文件,那么就可以graceful的shutdown当前Worker,否则需要继续等待,直到等待时间到达一个指定的阈值。

图片

3.2 Worker recommission

当要把一台worker 重新加入到集群中时,只需调用 Master POST /api/v1/workers/exclude 把 worker信息放入 remove 字段即可将worker从 manualExcludedWorkers 中移除, 重新接受分配slots。

图片

04 总结

本文介绍了eBay基于最新RESTful API 进行自动化管理Celeborn集群的一些实践,所有API调用都是访问Master的API。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/web/61296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 和 Pyecharts 对Taptap相关数据可视化分析

结果展示: 数据来源: Python爬取TapTap 热门游戏信息并存储到数据库(详细版) 目录 结果展示: 数据来源: Python爬取TapTap 热门游戏信息并存储到数据库(详细版 一、引言 二、准备工作 三、…

【Linux】常见指令 + 权限概念

文章目录 一、重要的指令mkdir指令rmdir指令 && rm 指令man指令cp指令mv指令less指令find指令tar指令 二、关于Linux中的权限文件访问者的分类(人)文件类型和访问权限(事物属性)文件权限值的表示方法文件访问权限的相关设…

老旧前端项目如何升级工程化的项目

因为历史的原因存在着大量的老旧前端项目,而在今天的开发环境中已经不再适应了,于是产生了升级到新的环境的需求。比如笔者当前的一个登录页面项目,就是以下面为技术栈的老旧项目。 基于 jQuery包管理基于 require.js,甚至有的没…

【Conda 】Conda 配置文件详解:优化你的包管理与环境设置

目录 引言一、什么是 .condarc 文件?二、.condarc 文件的详细解析与优化2.1 SSL 验证2.2 设置 Conda 下载源2.3 设置环境和包存储路径2.4 代理服务器设置2.5 连接超时设置2.6 显示频道 URL2.7 包版本与构建选择2.8 环境依赖性管理2.9 禁用默认包版本2.10 Conda 配置…

在国外,使用中国移动app办理停机保号

1.人在国内的时候,先使用手机下载中国移动app 以前网上营业厅是可以直接办理停机保号的,现在不可以了 2.人在国内的时候,确保自己的手机能够登录中国移动app 这个步骤保证回国前可以使用中国移动app复机 3.人在国内的时候,拨打…

C# 解决【托管调试助手 “ContextSwitchDeadlock“:……】问题

文章目录 一、遇到问题二、解决办法 一、遇到问题 托管调试助手 “ContextSwitchDeadlock”:“CLR 无法从 COM 上下文 0x56e81e70 转换为 COM 上下文 0x56e81d48,这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows …

Vscode阅读C/C++ Code实用教程

目录 1.必备插件2.创建工程3.重要的快捷键及使用 1.必备插件 C/C IntelliSense - 用于跳转GitLens — Git supercharged -用于查看git 提交记录Remote - SSH -用于连接linux服务器 2.创建工程 创建工程还是蛮重要的,虽然不创建同样可以看Code,创建工程…

OGRE 3D----4. OGRE和QML共享opengl上下文

在现代图形应用开发中,OGRE(Object-Oriented Graphics Rendering Engine)和QML(Qt Modeling Language)都是非常流行的工具。OGRE提供了强大的3D渲染能力,而QML则用于构建灵活的用户界面。在某些应用场景中,我们需要在同一个应用程序中同时使用OGRE和QML,并且共享OpenGL…

C语言进阶7:程序环境与预处理

本章重点 程序的翻译环境程序的执行环境详解:C语言程序的编译 链接预定义符号介绍预处理指令 #define宏和函数的对比预处理操作符#和##的介绍命令定义预处理指令 #include预处理指令 #undef条件编译 1.程序的翻译环境和执行环境 在ANSIC的任何一种实现中&#x…

model based和model free

model based和model free 1. **Model-Based 强化学习**特点:优势:劣势:示例: 2. **Model-Free 强化学习**特点:优势:劣势:示例: Model-Based 和 Model-Free 的对比小结 【GPT解答&am…

.net的winfrom程序 窗体透明打开窗体时出现在屏幕右上角

窗体透明, 将Form的属性Opacity,由默认的100% 调整到 80%,这个数字越小越透明(尽量别低于50%,不信你试试看)! 打开窗体时出现在屏幕右上角 //构造函数 public frmCalendarList() {InitializeComponent();//打开窗体&…

【Java基础入门篇】三、面向对象和JVM底层分析(3)

Java基础入门篇 三、面向对象和JVM底层分析 3.5 抽象类/接口和外/内部类 (1)抽象类 **“抽象方法”**是使用abstract修饰的方法,没有方法体,只有声明,定义的是一种“规范”,就是告诉子类必须要给抽象方法…

快速理解倒排索引在ElasticSearch中的作用

一.基础概念 定义: 倒排索引是一种数据结构,用来加速文本数据的搜索和检索,和传统的索引方式不同,倒排索引会被每个词汇项与包含该词汇项的文档关联起来,从而去实现快速的全文检索。 举例: 在传统的全文…

计算二叉树节点个数(汇总)

二叉树结构类型定义 // 定义二叉树节点结构体 typedef int TElemType; // 假设数据类型为int,可根据需要修改 typedef struct BiTNode {TElemType data;struct BiTNode* lchild, * rchild; } BiTNode, * BiTree;计算二叉树总节点个数 思想: 递归求解法…

AI开发 - GPT之魂 用Python 演示chatGPT的自注意力机制 - 机器学习

自注意力机制(Self-Attention)就是让模型在处理每个词时,学会“关注重点”,而不是平均地对每个词一视同仁。这种机制让 GPT 能更聪明地理解句子的上下文和语义之间的关系。 自注意力机制是 GPT 的核心,它帮助模型在理解…

将自定义 AWS S3 快照存储库连接到 Elastic Cloud

作者:来自 Elastic Annie Hansen, Stef Nestor 在本博客中,我们将介绍如何通过 Elasticsearch 的快照将我们已提交的集群数据备份到 AWS S3 存储桶中。在 Elastic Cloud(企业版)中,Elastic 在其 found-snapshots 存储…

linux下Qt程序部署教程

文章目录 [toc]1、概述2、静态编译安装Qt1.1 安装依赖1.2 静态编译1.3 报错1.4 添加环境变量1.5 下载安装QtCreator 3、配置linuxdeployqt环境1.1 在线安装依赖1.2 使用linuxdeployqt提供的程序1.3 编译安装linuxdeployqt 4、使用linuxdeployqt打包依赖1.1 linuxdeployqt使用选…

【QT】控件8

1.QDial 通过调节旋钮位置来控制窗口的不透明度&#xff1a; void Widget::on_dial_valueChanged(int value) {qDebug()<<value;this->setWindowOpacity((double)value/100); }效果演示&#xff1a; 2.Date/Time Edit 计算两个日期的差值 ui界面设计 计算按钮按下…

CGAL CGAL::Polygon_mesh_processing::self_intersections解析

CGAL::Polygon_mesh_processing::self_intersections 是用于检测多边形网格&#xff08;Polygon Mesh&#xff09;中的自相交的函数。自相交是指网格中的某些面&#xff08;例如三角形&#xff09;与同一网格中的其他面交叉的情况。这种情况通常是不期望的&#xff0c;因为它会…

k8s运行运行pod报错超出文件描述符表限制

1.问题描述 运行pod超过文件描述符表 unable to allocate file descriptor table - out of memory/opt/COMMAND.sh: line 9: 2.查看设备的文件描述符限制 操作前一定要先查询这个值&#xff0c;2097152这个值即为我们可设置的最大值&#xff0c;超过这个值后将无法登录&am…