jjzjj

浅析华为云基于HBase MTTR上的优化实践

华为云开发者社区 2023-03-28 原文
摘要:主要介绍华为云在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上的优化实践的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  3. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  4. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  5. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  6. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  7. 华为常用命令 - 2

    system-view进入系统视图quit退到系统视图sysname交换机命名vlan20创建vlan(进入vlan20)displayvlan显示vlanundovlan20删除vlan20displayvlan20显示vlan里的端口20Interfacee1/0/24进入端口24portlink-typeaccessvlan20把当前端口放入vlan20undoporte1/0/10删除当前VLAN端口10displaycurrent-configuration显示当前配置02配置交换机支持TELNETinterfacevlan1进入VLAN1ipaddress192.168.3.100

  8. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  9. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  10. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

随机推荐