李媛媛,蔓越莓-金博宝188app_188金宝搏亚洲体育app_金宝搏官网

经过百度大规划时序数据存储系列文章的介绍,想必读者对百度智能监控体系 李媛媛,蔓越莓-金博宝188app_188金宝搏亚洲体育app_金宝搏官网Noah 的 TSDB 不再生疏,它首要用来存储 Noah 监控体系的时序方针数据,包含但不限于硬件和软件的可用性方针、资源运用率方针和功能方针等。如《百度大规划时序数麻辣女兵据存储(二)|存储选型及数据模型规划》文章所述, Noah-TSDB 是依据 HBase 为底层存储的基础上自主研制的,其优异的功能离不开 HBase 的贡长春双阳气候献。今日首要聊聊在百度智能监控场景下的 HBase 相关实践经验,先简略介绍一下 HBase。

HBase 架构简介

HBase 是一个依据 Java、开源的、非联系型的、面向列存储的散布式可扩展的大数据存储数据库。HBase 的集群首要由 HMater 和 RegionServer 两种人物组成,底层以 HDFS 作为存储设备,集群由 Zookeeper 帮忙办理。其架构如下图所示:


图 1 HBase 架构图

简略介绍一下 HBase 中相关组件的作用:

  • HMaster

HMaster 是整个集群的大脑,担任数据表的操作、集群的负载均衡和毛病康复等集群办理作业。

  • RegionServer

HBase 将表以行为单位区分红许多片段,每个片段称为一个 Region。这些 Region 被分配到 RegionServer 进行办理。在读写流程中,定位到数据地点 RegionServer 后,Client 与 RegionServer 直接交互进行数据的读写。

  • Zookeeper

HBase 作为一个大规划的散布式体系,Zookeeper 的作用是至关重要的。首要 Zookeeper 作为 HMaster HA 处理计划,确保了至少有一个 HMaster 处于作业状况。其次 Zookeeper 经过心跳机制探活 RegionServer,当 RegionServer 毛病时及时告诉 HMaster 进行毛病处理作业。最终 Zookeeper 保存了保护大局元信息的 META 表的途径,Client 榜首次与 HBase 集群交互时,需求经过 META 表来获取方针数据地点的 RegionServer。

上面简略介绍了 HBase 的架构和各组件的基本信息,下面和咱们同享一下在百度最大规划时序数据库的场景下运用 HBase 时遇到的几个典型斐讯k2问题和优化计划。

热门问题

咱们都知道木桶效应,关于 TSDB 体系来说,热门 Region 地点的 RegionServer 便是影响整个”水桶”容量最短的那块木板。抱负状况下 HBase 中金钱帝国一切的恳求应该均匀的散布在一切 RgionServer 的一切 Region 上,当单个 Region 收到的读写恳求数量大幅超越其它的 Region,它地点的 Region 就有或许成为热门。


图 2 RegionServer 信息(此图来历网络非百度实践数据)

Noah-TSDB 初期曾遇到监控元数据表规划不合理导致热门的问题。其时研制同学收到 Noah-TSDB写入模块行列阻塞的事务报警,从 Noah 监控体系上看到同时刻段拜访 HBase 反常梅南林显着增加。HBase 中的单个 RegionServer 频频进行 GC,网络 I/O 和磁盘 I/O金敏喜 密布,操作行列中待履行的恳求堆积严峻,负载显着高于其它的 RegionServer。检查异李媛媛,蔓越莓-金博宝188app_188金宝搏亚洲体育app_金宝搏官网常 RegionServer 的日志发现很多恳求拜访的真灵九变是同一个 Region:”tsdb-meta,*** 1.”。开始定位是因为该 Region负载过高,导致它地点的 RegionServer 成为热门,从而导致体系的吞吐量下降,上游写入模块恳求堆积。

tsdb-meta 是用来存储监控方针的称号、周期等元信息的表,表中赤色填充的行代表其具有数据量超越正常水平的,表结构如下:

表 1 原始 tsdb-meta 表


剖析上面的存储结构,咱们能够知道:

  1. 同一个监控目标(namespace)的监控方针元信息将会存储在 HBase 表的同一行。
  2. 不同监控目标的方针数量不同,将导致行的巨细不均匀。
  3. HBase 中数据分片是以行为单位,每行的数据存储在同一个 Region 中,当某一行存储的监控方针数量远大于正常水平常,该行就有或许成为热门。

综上所述,当单个监控目标具有的监控方针个数过多时,tsdb-meta 或许会呈现热门问题。同时经咱们李媛媛,蔓越莓-金博宝188app_188金宝搏亚洲体育app_金宝搏官网验证发现,成为热门的监控目标具有的监控方针的数和尚量大约是正常水平的 20 倍左右,进一步确认了毛病原因。

定位到根因后,咱们决议从两个方面来着手处理这个问题。一方面,定时计算监控目标具有的方针个数,及时发现因为监控装备反常和不合理运用导致的单个监控目标具有的监控方针过多的问题。第二方面,对 tsdb-meta 表结构改造,将本来按列散布的数据修改为按行打开平铺,充沛打平数据,运用 HBase 按行主动分片的机制来到达负载均衡的状况。榜首方面首要是从事务层面临不合理运用的状况进行人工干预。今日首要侧重介绍第二方面。

  • tsdb-meta 表 Schema 改造

前文大体介绍了表结构改造的思路,防止单行数据过大导致热门问题。咱们将监控目标和监控方针的称号信息一同作为行键,只保存一列用于存储方针的其他信息,防止了因单行数据过大导致莫绮雯的热门问题。

表 2 优化后的 ts四季锦db-meta 表


  • 预分区

tsdb-meta 表优化后,咱们发现出产环境存储数据的 tsdb-data 表也存在热门问题。tsdb-data 是用来存储监控方针数值的表,出产环境是按时刻跨度进行分表,每两天的数据存储在一张表中。数据的行键由数据 hash 后的特征变量 ts_uid 和时刻基准 timestamp_base 组成,运用 HBase 存储时按行键的字典次序排序的特色,将不同的监控方针的数据散列到不同的 Region,相同监控目标的方针数据次序排列,到达优化查询的作用。因为 tsdb-data 表的日常拜访量基数较大,当某个监控目标具有的方针数量高于平均水平,那么该监控目标的监控方针很大概率会被分配到相同的 Region,导致该 Region 过大,进成为热门,集群会割裂过大的 Region 来保持负载均衡的状况。频频的割裂操作会占用很多资源,影响 RegionServer 的吞吐量。为处理因 Region 过大导致的热门,咱们采用了对数据表进行预分区的办法。

在对 tsdb-data 表进行预分区时,咱们发现只通亚洲万里经过指定 Region 数量来完成预分区的作用并不抱负,因为会呈现实践写入量与槽位分配不均的问题。HBase 数据表是依照行键的字节空间均匀区分而不是依照实践存储的数据量进行区分。如下图所示,图中赤色方块代表实践存储的数据,白色的方块代表无实践数据的行。


图 3 原始 Region 预分区

如上图,尽管数据表现已依照行键的字节空间区分红 3 个 Region 了,可是显着 Region 3 中实践存储的数据量远大于 Region 1 和 Region 2。这种状况下 Region 3 有成为热门的或许性。为了改进这种状况,Noah-TSDB 结合了出产环境中的 tsdb-data 表按等距离时刻跨度分表的特色,决议参照前史表的运用状况对新表进行预分区。依据出产环境实践发生的行键和预期的分区巨细计算出 Region 分界值,然后依据分界值将表区分红实践水位附近的 Region,这样尽管每个 Region 的槽位巨细不一样,可是每个 Region 实践存储的数量是适当的,进一步下降发生热门的危险。


图 4 优化李媛媛,蔓越莓-金博宝188app_188金宝搏亚洲体育app_金宝搏官网后的 Region 预分区

怎么合理的焦糖冬瓜设置 Region 数量

在前文介绍的预分区战略中,除了需求参阅出产环境的实践运用状况外还需求依据机器资源和割裂阈值等体系参数来预估适宜的 Region 巨细,Region 巨细确认后,咱们能够预估出全体的 Region 数量。那么怎么判别当时集群是否能够承载调整后的 Region 数量呢?假如 Region 的数量不合理有哪些损害呢?在评论 Region 数量对集群的影响之定州前,咱们先了解一些基础知识:

  1. 在 HBase 的数据写入流程中,数据是先写到 Memstore(写缓存)排序,然后异步 Flush 追加到习卫英 HFile 中。一个 Region 中的多个列族对应多个 Memstore,Memstore Flush 的最小单位是 Region。
  2. 当一个 RegionServer 中一切 Memstore 的巨细总和到达阈值 hbase.regionserver.global.memstore.upperLimit * hbase_heapsize 会触发 Memstor误惹无赖总裁e Flush。依据 Memstore 从大到小顺次 Flush,直至 MemStore 内存运用量低于阈值 hbase_heapsize * hbase.regionserver.global.memstore.lowerLimit。
  3. HBase 会定时 Flush Memstore 来保证 Memstore 不会长时刻没有耐久化。为防止一切的 MemStore 在同一时刻都进行 Flush 导致的问题,定时的 Flush 操作有随机延时。

综上可知,一方面由李媛媛,蔓越莓-金博宝188app_188金宝搏亚洲体育app_金宝搏官网于同一个 RegionServer 同享 Memstore,Region 数量过多会导致 Memstore Flush 的频率变快,发生的 HFile 变多,HBase 继续的进行 Compaction,引发兼并风暴。另一方面因为 HBase 定时 Flush Memstore,每次履行 Flush 需求将每个 Region 的每个列族对应的 Memstore 写入文件并存到 HDFS, Region 数量越多,每次需求一同处理的文件数量就越大,即便存在随机时延机制李媛媛,蔓越莓-金博宝188app_188金宝搏亚洲体育app_金宝搏官网,短游水卷烟时刻内文件的创立和数据的搬迁较多也会加大集群负载,或许引起快照超时、客户端超时和批量加载超时,下降 TSDB 体系功能。因而 Region 数量过多会下降体系吞吐量。

Region 数量过少也会下降体系功能。当数据量不变的状况下,因为李媛媛,蔓越莓-金博宝188app_188金宝搏亚洲体育app_金宝搏官网 Region 数量过少导致单个 Region 过大,每个 Region 处理的写入恳求数偏高,当 Flush 的速度渐渐被写入速度追上并赶超时,就会阻塞写入,影响 RPC,从而影响 HBase 的全体写入和查询,下降体系的吞吐量。

Region 数量设置不合理,会下降 TSDB 体系全体功能与可靠性,一般引荐的单个 RegionServer 办理的 Region 数量计算办法如下:

仿制代码

#{Region} = (RS memory)*(total memstore fraction)/((memstore size)*(# {column families}))

举个比如,假如 RegionServer 的参数如下:

  1. Java Heap Size of HBase RegionServer in Bytes 设置的是 20G
  2. hbase.regionserver.global.memstore.upperLimit 是 0.4
  3. hbase.hregion.memstore.flush.size 是 128M
  4. 多个表的列族个数共 2 个

那么 #{Region} = 20 * 1024 * 0.4/ (128 * 2) = 32。这个公式是在假定一切的 Region 都在以相同的速率写的前提下,假如实践只要部分 Region 在写入数据,成果能够依据份额、结合事务进行调整。例如 Noah-TSDB 的场景下,数据是依照时刻分表,一般两天的数据存在一张数据表中,数据的写入都会集在最近的一张表,因而实践写入活泼的 Region 数量远小于 Region 的总数量,所以蔡妍不带罩的相片实践每个 RegionServer 办理的 Region 的数量大约是抓钱舞舞蹈视频经过上述公式直接计算成果的 3 倍左右。

预估出全体的 Region 数量和单个 RegionServer 办理的 Region 数量后,就能够合理的进行容量规划,在集群调整的时分预估需求的机器资源。

总结

上面便是今日介绍的全部内容了,给咱们简略同享了一些运用 HBase 的实践经验。其实在实践运用时咱们也发现了 HBase 过重,运维本钱较高档问题,也在继续的进行调研和架构晋级,咱们有什么好的主张欢迎不吝赐教。别的文中假如有了解不到位或许误差的当地,欢迎咱们纠正。

作者简介

张洋洋,百度朱圣伟高档研制工程师。担任百度智能运维产品(Noah)的散布式时序数据库和通用配额办理渠道的规划研制作业,在散布式存储和配额办理方向有广泛的实践经验。

本文转载自大众号 AIOps 智能运维(ID:AI_Ops)

原文链接:https://mp.weixin.qq.com/s/M_teW4hNNaLWbWghA02j9A

转载原创文章请注明,转载自金博宝188app_188金宝搏亚洲体育app_金宝搏官网,原文地址:http://www.sw100aniv.com/articles/554.html

上一篇:最强弃少,热血街区-金博宝188app_188金宝搏亚洲体育app_金宝搏官网

下一篇:王俊凯小说,三生三世-金博宝188app_188金宝搏亚洲体育app_金宝搏官网