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, shutdownWorkersdecommissionWorkers

同时我们设置了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类型有 DecommissionDecommissionThenIdle

下图是一些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.mzph.cn/web/61296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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,甚至有的没…

在国外,使用中国移动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…

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

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

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

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

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

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

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;因为它会…

[巅峰极客 2021]签到

[巅峰极客 2021]签到 给了我们好多表情&#xff0c;真的是一脸懵逼 注意给我们的关键词 GAME 现在还不知道是什么意思我们去试着解开一下 用这个emoji表情解密器&#xff0c;这里我找了好久才找到一个 emoji-aes 这里的Key值就是GAME 运行后出现flag NSSCTF{10ve_4nd_Peace…

005 MATLAB符号微积分

前言&#xff1a; 在MATLAB中&#xff0c;数值与符号的主要区别在于它们的处理方式和应用场景 数值计算适用于实际的数值计算问题&#xff0c;如矩阵运算、数据分析等。符号计算适用于符号推导、公式化简和符号解析&#xff0c;如理论物理和工程计算。 01 符号对象 1.基本符…

“岗位复合化、技能层次化” 高职大数据技术专业人才培养实践

在全球数字化浪潮的推动下&#xff0c;大数据技术已经成为引领社会进步和经济发展的核心动力。随着《关于深化现代职业教育体系建设改革的意见》等系列指导问文件的发布&#xff0c;我国高职大数据技术专业的教育正迎来全新机遇与挑战。这些政策不仅明确了职业教育改革的方向&a…

51c自动驾驶~合集38

我自己的原文哦~ https://blog.51cto.com/whaosoft/12358456 #GaussianPretrain 万能3D高斯预训练表示&#xff01;爆拉3D检测、Occ、高精地图等四大任务&#xff01; 受Tesla的技术的推动&#xff0c;越来越多的厂商开始走"纯视觉"的路线&#xff0c;多数方案还…