浅析华为云基于HBase MTTR上的优化实践
摘要:主要介绍华为云在HBase 2.x内核所做的一些MTTR优化实践。
本文分享自华为云社区《华为云在HBase MTTR上的优化实践》,作者: 搬砖小能手。
随着HBase在华为云的广泛应用,HBase的数据节点规模也越来越大。最新版本的MRS可支持的单集群HBase数据节点规模可达到1024节点,可支持的region数量可达到200w+。面对如此大规模的节点数量,集群的MTTR也面临着巨大的挑战。
首先介绍一下HBase故障恢复涉及的几个主要Procedure:
- ServerCrashProcedure:处理单个RegionServer的恢复的Procedure任务,是所有其他相关任务的Root Procedure;
- SplitWALProcedure:处理单个WAL文件数据恢复的Procedure任务;
- TransitRegionStateProcedure:处理单个RegionServer上下线的Procedure任务。
RegionServer节点故障恢复流程(基于2.x内核)
当HMaster检测到RegionServer故障后,会创建一个ServerCrashProcedure任务处理RegionServer的故障恢复。
该Procedure任务主要处理的事务包括WAL Split和Region Assign:
- 其中WAL Split由Sub Procedure:SplitWALProcedure负责。每个WAL文件对应一个Procedure,所以一个ServerCrashProcedure可能存在多个SplitWALProcedure;
- Region Assign则由Sub Procedure:TransitRegionStateProcedure负责。每个region对应一个Procedure,因此一个ServerCrashProcedure也会存在多个TransitRegionStateProcedure。
由此可以看出,一个RegionServer节点的恢复,中间会涉及到大量的Procedure任务,下面我们介绍一下华为云的HBase这对这部分所做的一些优化实践。
优化一,异步ServerCrashProcedure

前面提到ServerCrashProcedure会包含多个SplitWALProcedure和TransitRegionStateProcedure,这两种Procedure在ServerCrashProcedure里面是串行执行的,也就是说TransitRegionStateProcedure只有在所有SplitWALProcedure任务执行完成之后才会开始执行,在WAL Split流程结束之前,整个ServerCrashProcedure会一直占用Procedure的线程资源并等待。
在大集群的场景下,由于HMaster的Procedure线程池资源有限,这样会导致有大量的ServerCrashProcedure任务在队列中等待。
针对这种情况,我们讲ServerCrashProcedure任务改为异步执行,在执行WAL Split过程中,将ServerCrashProcedure重新放回队列并释放资源给其他待执行的任务。当WAL Split执行完成后,再重新唤醒该任务并继续提交执行TransitRegionStateProcedure。
优化前:MTTR = (Avg SCP * RS Count) / (hbase.master.procedure.threads)
优化后:MTTR = (Avg Split time) + (RS Count * Avg Assign time)/ (hbase.master.procedure.threads)

优化二,Split WAL to HAR
通过测试,我们发现在WAL Split阶段会产生大量的文件IO,主要是因为WAL Split阶段会生成大量的recovered.edits文件。因此,在大集群下,这部分的开销会导致HDFS的NameNode成为瓶颈。
对此,我们利用Hadoop提供的HAR file对生成的小文件进行优化,大大减少文件IO的开支,达到MTTR优化的目的。

我们以单个RegionServer 20个WAL+2000个region来举例:
通过HAR优化,单个RS的IO次数将由2000次读+2000次写减少为3次读+3次写。单个RS生成的文件数据也由40000个减少为20个。

最终在测试环境通过对100个RS,每个RS 20个WAL+2000个region的规模进行对比测试,HDFS的的IO负载下降了70%(RPC请求数从640万下降到150万左右),MTTR的时间则从103分钟下降到26分钟。
优化三,Batch TRSP

由于TransitRegionStateProcedure只负责处理一个Region,大集群下的region往往都在几十万甚至更多,这样的话,HBase恢复过程中会产生大量的TransitRegionStateProcedure任务。为了减少大量Procedure所带来的任务开销,我们优化了TransitRegionStateProcedure,允许一个Procedure任务处理一个RegionServer上所有的region assign。这样不仅减少了Procedure任务的数量,还大大减少了HMaster跟RegionServer的RPC开销。
浅析华为云基于HBase MTTR上的优化实践的更多相关文章
- 基于 Nginx 的 HTTPS 性能优化实践
前言 分享一个卓见云的较多客户遇到HTTPS优化案例. 随着相关浏览器对HTTP协议的“不安全”.红色页面警告等严格措施的出台,以及向 iOS 应用的 ATS 要求和微信.支付宝小程序强制 HTTPS ...
- 【云享专刊】开源遇上华为云,OCP架构变身“云原生框架”
摘要:华为云DTSE团队出品云原生改造指南,助力轻松实践OCP上云. 本文分享自华为云社区<[云享专刊]开源遇上华为云,OCP架构变身"云原生框架">,作者:华为云社区 ...
- 基于华为云IOT及无线RFID技术的智慧仓储解决方案最佳实践系列一
[摘要]仓储管理存在四大细分场景:出入库管理.盘点.分拣和货物跟踪.本系列将介绍利用华为云IOT全栈云服务,端侧采用华为收发分离式RFID解决方案,打造端到端到IOT智慧仓储解决方案的最佳实践. 仓储 ...
- 古有七步成诗,今有六步完成DevOps上华为云DevCloud实践
引言: 在“DevOps能力之屋(Capabilities House of DevOps)”中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力.华为云DevClo ...
- 一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?
摘要:近日,华为云数据库业务总裁苏光牛在ACMUG中国MySQL用户组主办的 "华为云专场" 技术沙龙中分享了华为云数据库重磅新品GaussDB的核心能力与竞争优势.那么, Gau ...
- 不服跑个分:ARM鲲鹏云服务器实战评测——华为云鲲鹏KC1实例 vs. 阿里云G5实例【华为云技术分享】
原文链接:https://m.ithome.com/html/444828.htm 今年一月份,华为正式发布了鲲鹏920数据中心高性能处理器,该处理器兼容ARM架构,采用7纳米制造,最高支持64核,主 ...
- 走近深度学习,认识MoXing:初识华为云ModelArts的王牌利器 — MoXing
[摘要] 本文为MoXing系列文章第一篇,主要介绍什么是MoXing,MoXing API的优势以及MoXing程序的基本结构. MoXing的概念 MoXing是华为云深度学习服务提供的网络模型开 ...
- 华为云ROMA,联接企业应用的现在与未来
2019.9.19日,在华为全联接大会的华为云Summit中,华为云CTO宇昕总提出:"企业的应用与数据集成,始终是数字化转型和智能化升级的关键,华为云企业应用与数据集成平台ROMA,打破时 ...
- 揭秘丨7分钟看懂华为云鲲鹏Redis背后的自研技术【华为云技术分享】
2019年5月,华为云发布全球首个基于自研ARM架构的分布式缓存鲲鹏Redis,搭载华为LibOS+华为编译器+安全容器引擎三项黑科技,在保证Redis强劲高性能外,还降低客户30%的使用成本,真正实 ...
- [转帖]华为鲲鹏云服务器实战:华为云鲲鹏KC1实例 vs. 阿里云G5实例
鲲鹏云服务器实战:华为云鲲鹏KC1实例 vs. 阿里云G5实例 https://m.ithome.com/html/444828.htm 2019-09-12 15:25IT之家 (阿迷) 今年一月份 ...
随机推荐
- SQL基础应用
SQL基础应用 更多详细内容请查阅:https://www.jianshu.com/p/08c4b78402ff 1.SQL介绍 结构化查询语言 5.7 以后符合SQL92严格模式 通过sql_mod ...
- 51单片机控制w5500实现udp组播通信
51单片机控制w5500实现udp组播通信 在socket打开之前,向Sn_MR (Socket n 模式寄存器)寄存中写入 0x82(1000 0010),将W5500加入组播组 对Sn_DIPR ...
- nginx参数调优能提升多少性能
前言 nginx安装后一般都会进行参数优化,网上找找也有很多相关文章,但是这些参数优化对Nginx性能会有多大影响?为此我做个简单的实验测试下这些参数能提升多少性能. 声明一下,测试流程比较简单,后端 ...
- 2023-11-08:用go语言,字符串哈希原理和实现 比如p = 233, 也就是课上说的选择的质数进制 “ 3 1 2 5 6 ...“ 0 1 2 3 4 hash[0] = 3 * p的0
2023-11-08:用go语言,字符串哈希原理和实现 比如p = 233, 也就是课上说的选择的质数进制 " 3 1 2 5 6 ..." 0 1 2 3 4 hash[0] = ...
- Vue 项目部署到GitHub Pages并同步到Gitee Pages
前言:相信很多前端开发者都拥有自己的vue项目,若想把自己的项目做成网站分享给大家看,最常用的就是利用Github提供的GitHub Pages服务和Gitee提供的Gitee Pages服务.其中, ...
- 每天5分钟复习OpenStack(十一)Ceph部署
在之前的章节中,我们介绍了Ceph集群的组件,一个最小的Ceph集群包括Mon.Mgr和Osd三个部分.为了更好地理解Ceph,我建议在进行部署时采取手动方式,这样方便我们深入了解Ceph的底层.今天 ...
- 运维初级实践——Linux系统命令教程
区块链运维工程师在Linux环境中常用的命令.快捷键,以及安装软件和文件管理的最佳实践. 1. 常用Linux命令 1.1 文件和目录操作 ls:列出目录内容 cd:更改目录 mkdir:创建新目录 ...
- 国产 Web 组态软件在玻璃生产线中的应用
概述 随着工厂信息化.数字化发展,智慧生产车间成为必然发展趋势,通过智能硬件.物联网.大数据等智慧化技术与手段,提高车间生产设备.工艺设备的智能执行能力,从而提升整个车间乃至工厂的智能化.网络化 ...
- Javascript Ajax总结——XMLHttpRequest对象
Ajax技术能向服务器异步请求额外的数据,会带来更好的用户体验.Ajax技术核心:XMLHttpRequest对象(简称XHR).XHR为向服务器发送请求和解析服务器响应提供了流畅的接口.1.创建XM ...
- Java:字符串(String)类型转成整型(int)的方法
Java:字符串(String)类型转成整型(int)的方法 使用 Integer.parseInt() 或 Integer.valueOf() 将 String 转换为 int. 其中: Integ ...