一、背景

大数据服务是数据平台建设的基座,随着B站业务的快速发展,其大数据的规模和复杂度也突飞猛进,技术的追求也同样不会有止境。

B站一站式大数据集群管理平台(BMR),在千呼万唤中孕育而生。本文简单介绍BMR的由来、面临的主要矛盾以及如何在变化中求得生存与发展。

下图是截至2024年6月初,统计到B站大数据的服务规模:

大数据所需承载的业务种类愈加繁多,为更好地承接业务场景的诉求,同时提升稳定性要求,我们大数据集群管理平台的建设,经历了以下主要几个阶段:

阶段一(求生存)

  1. 聚焦系统环境标准化、服务配置标准化,清扫野蛮成长过程中非标生产留下的债务(层出不穷的奇怪问题)。

  2. 快速和花样地迭代姿势,满足业务高速发展诉求。将各服务的安装包、配置纳入版本管理,服务状态有效透出,完成状态管理和分享。同时打通在线业务的门禁管理,快速迭代过程中不失稳定性考量。

(标准化工作嵌入迭代发布、配置发布、灰度发布中,同时支持常用的新增节点、快速部署、节点上下线等能力。管理上支持机器分组、打标、自定义流程、异构配置管理等)

阶段二(追温饱)

  1. 建设元仓,打通服务间数据互通,实现问题的快速诊断。
  2. 场景化建设,如:机房迁移所需的大批量、持续性项目,故障自愈能力等。
  3. 提升覆盖面,边缘场景或非高频变更场景。如:Yarn队列管理、Lable变更、主从切换、HDFS数据迁移、HMS元数据管理等。

阶段三(奔小康)

  1. 拥抱云原生,拓展容器化管理能力。更好利用在业务内和业务间的资源,实现降本增效。服务混部、潮汐退避 火力全开,追求更高的利用率的同时降低IT成本支出。

  2. 建设容量管理,完善服务的异常预警、风险预测、故障自愈,进一步完善集群自动化运维体系,进一步追赶业务对大数据赋能的预期。

阶段四(共富裕)

  1. 强化可观测能力,数据更接近业务视角,自上而下清晰对齐、指引方向。

  2. 化被动为主动,从异常监控到故障自愈,再从故障自愈走向故障预测。

  3. 极致追求服务质量,度量服务质量、死磕服务质量。

二、面临的挑战

接下来,我将在大数据平台化过程中遇到的典型问题和解决思路分享如下。

2.1、节点一致性问题

在元数据未闭环联动的情况下,一致性无法得到保障。B站的大数据集群当前仍以物理机为主,正在逐步容器化的阶段。大数据服务组件繁多,叠加多版本、混合部署、部分容器化等诸多因素,让元数据一致性的保障工作更加复杂。在完全平台之前,还存在脚本甚至人工操作,状态的变更无法有效闭环。节点遗漏和信息错误的情况时有发生,轻则服务器未有效利用,重则集群服务存在多个版本,留下稳定性隐患甚至直接影响业务生产。

不断完善覆盖面和使用场景的同时,一些重要的且短时间未实现数据闭环的场景,BMR在‘智能运维’模块的‘巡检’能力,去兜底去发现未知原因产生的脏数据或不一致的问题,让风险尽早被发现、被干预、被解决。

2.2、标准规范的制定和实施

集群标准,需要结合历史和当前情况来制定,并非设计而来。且实施过程,需要考虑兼容、迁移的能力和资源、实施周期等因素。过程中要根据集群支持的业务特点、环境、版本进行划分,如:实时集群、离线集群(2.8版本和3.2版本)等, 线上存在多个生产集群。在前期组件服务的部署规范和配置文件的标准化不足,存在同一集群内同一组件在不同节点部署环境都存在差异情况。在平衡标准化和差异化的过程中,‘小步快跑’地进行标准化的制定、试运行、修正、公示,技术项的标准最终固化到平台功能中。

2.3、规模化的管理

当“量变引发质变”和“不必过度设计”遇到“业务飞速发展”时,及时调整管理策略满足业务发展需求,极具挑战。

大数据玩的就是数据,硬盘少不了。当前我们的大数据集群磁盘数量在十万量级。每天磁盘正常故障超10块, BMR在‘智能运维’模块集成了‘硬盘故障自愈’的能力,打通各个平台的数据和流程,实现业务无感式的换盘。还有操作系统层面的内核管理与升级,在面临节点数量多、需要无感/无故障的管理,都会对平台提出更高的要求。

而且在机房资源紧张的情况下,会涉及集群迁移甚至机房迁移的工作。如何不停机实现迁移,BMR上也都做了适配。

2.4、提升迭代效率

单纯提效不难,难的是在复杂场景中保证稳定的前提下。

生产不能停,迭代要继续,规模同时要满足发展需要。BMR在建设迭代能力的同时,通过元数据的管理监测资源容量。本着尽可能地避免问题、尽早地暴露问题的原则,集群资源做了分层、隔离以保安全,迭代过程也必备了‘灰度’、‘快速回滚’、‘异常探测’以便快速发现和快速解决问题。

同时多集群、多组件、多角色的‘变更冲突’需要加以限制,变更信息的‘透明化’和‘快速回滚’利于故障快速诊断与恢复。跨团队协作中,复用在线业务平台的通知与协同能力,实现消息的精确触达和快速应急响应。

2.5、削峰填谷

降本增效大背景的今天,资源有效利用也不是新话题。大数据业务和在线业务有着天然的资源错峰潜质,BMR当然不会放过。我们已在2023年实现大数据业务与在线业务的资源潮汐退避,大数据业务白天出让资源给在线业务使用,在线业务夜间归还的同时也出让冗余的资源给到大数据,实现‘削峰填谷’和‘资源共赢’。

三、平台实践

秉着先解放双手再系统闭环然后贴进业务的思路,BMR(大数据管理平台)逐步拆招解招。

系统整体架构如下图所示,BMR主要由集群大盘、集群管理、组件管理、变更管控和资源管理功能模块构成。

底层复用公司的‘Job任务’平台,使用 DolphinScheduler 做逻辑调度。 业务数据和逻辑集中在‘元数据’、‘配置中心’、‘主机管理’和‘发布服务’四大模块中,对用户由‘集群大盘’、‘集群管理’、‘组件管理’、‘变更管控’和‘资源管理’来呈现。

产品层本着‘一站式’的思想, 在操作集群管理时, 用户只需选择发布的组件、对应的主机节点, 及发布策略, 即可快捷完成变更操作。把复杂的逻辑和后端留给BMR,让用户只关心他需要关心的。

  为更好适配不同组件和用户的使用需求,变更流程设计整体分为节点选择策略(分批执行)、执行前置操作、调度执行、执行后置操作几个核心操作,流程示意图如下:

3.1、集群管理

为适配不同业务、不同规模、不同网络环境、不同用途的部署方式,同时考虑到开发周期和成本。底层功能模块尽可能的通用、可复用,上层应用区分用户视角和管理视角。用户视角仅显示有权限的集群,更多展示查看、监控类的实例。管理视角则可以快速新增创建并部署集群。当前我们已经支持了如 HDFS、Spark、Flink、ClickHouse、Kafka等集群管理能力。

3.2、组件管理

  • 3.2.1、支持新增组件,查看组件部署的节点及组件服务的运行状态

在组件管理视角,我们优先支持了组件的‘增/删/改’及‘状态监控’的功能。这里的难点是不同集群部署的组件服务, 对应配置存在差异。为更好支持差异化管理诉求,集群管理平台支持不同集群组件的自定义添加、组件变更管理及对应配置等管理需求。

  • 3.2.2、支持组件服务的扩容、迭代、缩容等发布操作

组件的‘扩缩容’和‘迭代变更’基础能力具备后,上层即可包装成各种应用需求。同时提供变更可视化,也支持发布策略定制。比如:

  • 并发度设置: 一次同时变更多少台节点,当前并发度最高限制200,避免一次同时变更过多,对线上任务造成影响。

  • 容错度设置: 变更过程中失败节点数到达容错度后,发布操作自动暂停,及时告警通知发布者,并人工介入检查,是否存在风险。

  • 发布暂停、继续、跳过错误并继续等发布控制等。

  • 3.2.3、组件配置管理

最早的配置文件,多数是在git上管理,本地文本编辑。容易出现导致文件格式、配置项错误等问题。也出现过集群部分运行时配置和磁盘上对应配置不一致问题,和线上节点配置版本无联动,给问题定位排查带来风险和困难。

BMR的配置管理,支持版本快照功能,可按照配置项快速检索,同时在修改保存时有合法性检查,周期性巡检集群节点磁盘上配置的版本和服务运行生效版本不一致的预警。

3.3、节点管理

不同角度和不同场景,也有对节点管理的需求。特别在差异化管理和问题诊断的场景,以及未闭环场景下的使用。

如:适配硬件配置差异而产生的应用配置差异、不同队列使用不同配置、不同服务使用不同版本,同时也支持管理查看节点服务运行情况, 服务版本部署监控状态等。

3.4、队列管理

线上Yarn资源调度采用Capacity模式,集群根据不同部门、任务优先级等规则会划分多个队列资源, 前期通过文本编辑的形式对配置进行修改调整,存在编辑繁琐、易出错等问题。BMR为此提供了Yarn队列的在线可视化编辑能力, 支持新增、删减队列、同时会对队列资源的capactiy百分比合法性校验, 也支持队列配置项调整对全局或部分队列生效等快捷操作。如图示意:

四、技术方案

通过大数据集群管理平台化的建设,解决我们遇到的迭代效率、稳定性等问题,主要围绕集群管理、节点管理、服务管理、组件管理、节点运行任务等几个维度进行建设,整体逻辑关系如下:

当前线上存在多套大数据集群,每套集群都存在多个组件,在平台落地的过程中。面对上述提及的问题和挑战,我能通过组件工作量管理来应对。

4.1、组件流程管控

大数据集群平台不同组件管理的核心差异点,在于其变更执行流程差异,基于此我们构建了组件工作流的管理模块,同时支持不同组件的执行流程可视化配置管理,基于Apache DolphinScheduler框架进行了二次开发, 利用其流程DAG可视化编辑能力,扩展了TaskPlugin适配我们的集群组件变更管理的业务场景。

4.2、变更影响可控

为了保证变更平稳可控, 减少因为变更带来的集群线上任务稳定性问题, 支持以下变更策略:

  • 按批次灰度,可根据组件变更影响差异 ,支持自定义每批次变更节点数量, 当前每批次上限200节点。

  • 批次之间有序执行,并相互隔离,出现异常仅影响本批次。

4.3、异常节点容错

  • 容错策略

  • 异常重试

  • 工作流程执行时, 支持过滤异常错误节点

  • 支持批次内异常跳过, 继续执行下一批次

4.4、跨组件依赖和全局变更

以DataNode节点缩容场景为例,DN涉及数据迁移问题,整个下线流程相对比较繁琐, 如机房搬迁场景使用Fast Decommission方式快速迁移数据、 节点故障维修场景 通过Decommission方式迁移数据等,整体执行流程如下图所示:

在DataNode下线流程中,同时涉及DataNode、NameNode组件的变更。缩容操作步骤中存在全局变更(NameNode节点级别)、部分变更(DN节点即便)、阻塞等待等互斥操作。

针对这种复杂变更场景, 通过支持DN下线流程嵌套子流程,来操作不同的变更对象。通过子流程方式我们可以对所需的依赖组件同时进行变更, 可方便快捷进行操作。

五、未来规划

  • 降本:深化资源利用率提升,进一步榨取运算资源。

  • 提效:增加故障自愈和故障预测的覆盖面,降低风险的同时减少人力投入。

  • 稳定性:大数据组件众多,继续提升覆盖率,将标准化和迭代可控坚持到底。

  • 稳定性:把控容量的可观测性,将功能之外风险拒之门外。

  • 服务质量:建立服务质量管理体系,指引技术改进与服务质量提升。

-End-

作者丨国辉

本文由 白鲸开源 提供发布支持!

B站基于Apache DolphinScheduler的一站式大数据集群管理平台(BMR)初窥的更多相关文章

  1. 基于zookeeper+mesos+marathon的docker集群管理平台

    参考文档: mesos:http://mesos.apache.org/ mesosphere社区版:https://github.com/mesosphere/open-docs mesospher ...

  2. Ambari 大数据集群管理

    最近做了一个大数据项目,研究了下集群的搭建,现在将集群搭建整理的资料与大家分享一下!如有疑问可在评论区回复. 1前置配置 Centos7系统,每台系统都有java运行环境 全程使用root用户,避免安 ...

  3. 4 亿用户,7W+ 作业调度难题,Bigo 基于 Apache DolphinScheduler 巧化解

    点击上方 蓝字关注我们 ✎ 编 者 按 成立于 2014 年的 Bigo,成立以来就聚焦于在全球范围内提供音视频服务.面对 4 亿多用户,Bigo 大数据团队打造的计算平台基于 Apache Dolp ...

  4. 挑战海量数据:基于Apache DolphinScheduler对千亿级数据应用实践

    点亮 ️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler 精彩回顾 近期,初灵科技的大数据开发工程师钟霈合在社区活动的线 ...

  5. 奇点云数据中台技术汇(一) | DataSimba——企业级一站式大数据智能服务平台

    在这个“数据即资产”的时代,大数据技术和体量都有了前所未有的进步,若企业能有效使用数据,让数据赚钱,这必将成为企业数字化转型升级的有力武器. 奇点云自研的一站式大数据智能服务平台——DataSimba ...

  6. 基于Docker搭建大数据集群(六)Hive搭建

    基于Docker搭建大数据集群(六)Hive搭建 前言 之前搭建的都是1.x版本,这次搭建的是hive3.1.2版本的..还是有一点细节不一样的 Hive现在解析引擎可以选择spark,我是用spar ...

  7. 基于Docker搭建大数据集群(七)Hbase部署

    基于Docker搭建大数据集群(七)Hbase搭建 一.安装包准备 Hbase官网下载 微云下载 | 在 tar 目录下 二.版本兼容 三.角色分配 节点 Master Regionserver cl ...

  8. 基于Docker搭建大数据集群(一)Docker环境部署

    本篇文章是基于Docker搭建大数据集群系列的开篇之作 主要内容 docker搭建 docker部署CentOS 容器免密钥通信 容器保存成镜像 docker镜像发布 环境 Linux 7.6 一.D ...

  9. Ubuntu14.04下Ambari安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)

    不多说,直接上干货! 写在前面的话 (1) 最近一段时间,因担任我团队实验室的大数据环境集群真实物理机器工作,至此,本人秉持负责.认真和细心的态度,先分别在虚拟机上模拟搭建ambari(基于CentO ...

  10. 实战|Hadoop大数据集群搭建

    一个执着于技术的公众号 前言 今天来为粉丝圆梦啦 话不多说,咱直接进入实战环节 实验环境: 主机名        IP地址                 角色 qll251       192.16 ...

随机推荐

  1. java多线程编程:你真的了解线程中断吗?

    java.lang.Thread类有一个 interrupt 方法,该方法直接对线程调用.当被interrupt的线程正在sleep或wait时,会抛出 InterruptedException 异常 ...

  2. Json输出List集合对象和map对象 JSON格式

    Json输出List集合对象和map对象 JSON格式 //Json输出List集合对象 [{"属性1":["值1"],"属性2":&quo ...

  3. 记录一次BoxedApp Packer脱壳解包的记录

    收到朋友的一个求助,一个硬件配套的上位机软件,无法联系到供应商,没有授权,在新电脑安装后无法使用. 简单的记录下过程 首先打开发过来的软件的目录下,一个配置工具,从图片可以判断,是.net winfo ...

  4. Nuxt 3 路由系统详解:配置与实践指南

    title: Nuxt 3 路由系统详解:配置与实践指南 date: 2024/6/21 updated: 2024/6/21 author: cmdragon excerpt: 摘要:本文是一份关于 ...

  5. Netty(三)Netty模型

    1. Netty模型 Netty主要基于主从Reactor多线程模型做了一定的改进,其中主从Reactor多线程模型有多个Reactor. 简版图: 说明: BossGroup线程维护Selector ...

  6. git连接到https服务器时出现“gnutls_handshake() failed”

    git连接到https服务器时出现"错误: gnutls_handshake()失败" 问题描述 当我尝试使用git连接到任何HTTPS服务器时(例如git clone),它会出现 ...

  7. Oracle 触发器 before insert update

    场景,往A表插入数据时,A表和B表是同一类型的状态下,A表中累计的值,不能超过B表中的值(注:往数据库插入时,不能批量执行事务!),利用触发器before insert update,监控状态,若超过 ...

  8. SQL注入漏洞攻击

    l-> 对于用户登录的实现,提供SQL语句 •-> select * from 表名 where uid=- and pwd=- •-> 使用字符串拼接 l-> 提供密码为:' ...

  9. sshd管理限制登录配置(centos7.9)

    背景情况:为了公网的主机,被无限的密码爆破,需要对主机的ssh进行安装加固 1.首先要禁用root的远程登录和修改ssh的端口 vi /etc/ssh/sshd_config# 修改端口,不适用22端 ...

  10. 解决react native打包apk文件安装好之后进入应用闪退的问题

    这个是我一个前端前辈帮我弄的,自己解决的时候不行,她去官网找了相关的问题,然后发给我的. react-native android 的release安装包运行闪退,但是debug运行正常 环境:0.6 ...