面对海量数据存储,如何保证HBase集群的高效以及稳定

内容来源:2018 年 09 月 15 日,平安科技数据平台部大数据高级工程师邓杰在“中国HBase技术社区第五届MeetUp ——HBase应用与发展”进行《HBase应用与实践》的演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:3315 | 9分钟阅读

摘要

本次演讲首先给大家介绍一下平安科技使用HBase的现状,以及给用户解决了哪些问题,然后是如何保证HBase集群的高效以及它的稳定的。

平安科技HBase的使用现状

我们这边HBase的使用现状,可以从以下两个方面来讲,第一个是HBase的集群规模以及数据量。第二个是它的应用场景。HBase集群方面现在是由300多台物理机组成,数据量大概有两个P两个pb左右。

解决了用户哪些问题

HBase的应用上,用户可能首先要面临的是海量数据的存储问题,然后是对性能和可靠性的关注。最后一个可能是数据的迁移问题。

从用户层面来讲,他们在使用传统数据库的时候,由于无法预估业务应用场景,造成无法判断接下来会面临多大的数据量。所以我们建议用户将数据接入到HBase集群里面,HBase是支持在线扩容的,即使后续使用的过程中,某段时间数据出现爆炸式增长,我们也可以通过HBase进行横向扩容来满足需求。

在使用传统的DB时候,其实在维护和扩展方面都会遇到很多问题,而如果迁移到HBase上,进行扩容和维护就会很方便的。

客户端优化

性能和高可用问题也是用户关注的重点,性能方面主要在于应用程序对HBase集群的调用。

先讲下客户端优化的方案,上图列出了几个常见的优化点,首先第一个是基于应用层面的scan操作,此时客户端向HBase的请求后,数据并不是一次性全部返回,而是通过多次的RPC请求交互得到数据。在这方面如果请求的数据量很大,可以通过去调整一下参数来减少RPC的交互,从而降低耗时。

另一个优化点是在get方面的,在HBase既可以一次性get整个数据,也可以进行批量的get操作。我们一般建议批量的使用get,其原理主要是为了去减少用户RPC的交互次数。

接下来是列簇及列的优化。HBase中相同的列簇数据是存在一个目录的,不同列簇数据分开进行存储。在有多个列簇的情况下进行检索,如果只是用key检索,而没有指定列簇,索引是要独立去检索的。这种情况相比指定列簇检索,效率是比较低的,也就是列簇越多影响就会越大。

第四个是禁止缓存,我们在写数据的时候,如果客户端突然加载了大量的数据,而没有禁止缓存,可能就会把热数据会挤压出去。

挤压出去的后果会导致其他业务检索HBase的时候,需要到HDFS里面去重新的去加载,这就造成了延时。

服务端层面优化

这里服务端层面也列举了几种比较常见的优化手段。首先是均衡的优化,在HBase中均衡操作有两种方式,一种是通过balance_switch,它后面会跟一个参数,如果是true的话,就开启自动均衡。如果指定为false的话,就关闭当前的自动均衡。

另一种是使用balancer,这种方式可能需要去手动的执行,比如HBase节点挂了之后重启了,其中间隔的时间内Region又不均衡。还有一种情况是扩容新的HBase节点后,Region没有均衡。此时如果开启balance_switch没有效果,就要通过手动的方式,强制的让它均衡。

第二个优化是在Blockce,在缓存命中率不高的时候,可以开启对外内存,然后来提高它的命中率,同时该操作对GC也是有好处的。

第三个是Compaction的操作,它可以保证的数据的本地性唯一。在实际的应用的场景下,我们会避免自动执行Compaction操作,因为自动执行可能会影响集群的IO,从而对用户的应用读写产生影响。所以我们需要改为手动的定义执行。在周末或者访问量不是的时候,执行Compaction操作。

执行Compaction操作的时候,有两个属性是可以优化的。由于默认情况下,线程数是1,因此在数据量很大的时候,耗时会长一些 。我们可以根据集群的规模,或者集群应用的影响度,来适当的调整参数,以提高Compaction执行的速度。

另外一个优化点可能是用户比较关心的可靠性。因为HBase是高可用的集群,可以做主备切换,所以不用担心单点问题。master挂了之后,可以立即切换到BackUpMaster,然后BackUpMaster会将角色状态切换成可用并对外提供服务。

数据迁移

数据迁移有几种情况。一种是HBase集群之间的迁移,一种是将Hive数据迁移到HBase。

首先分析第一种情况,两个集群之间迁移的话,由于它们的数据格式是一样,所以可以直接使用distcp的方式来进行迁移。这里因为要用到mapreduce,所以要指定队列名。

迁移过程当中需要注意以下四项。

  1. 开启YARN,distcp使用Mapreduce来传输数据,因此迁移之前需要确保集群资源可用。
  2. 防火墙,两个HBase集群之间端口要能正常访问telnet,例如NN、DN的端口。
  3. 使用HBase Hbck修复元数据信息

上图为跨集群迁移的一个案例,产生这种问题的原因是HDFS中的文件没有关闭,处于写状态,而每次distcp时会校验文件长度,如果文件处于关闭状态,就会出现这种异常。

对于这种情况,我们可以先检测文件的状态,然后关闭该文件,重新进行数据迁移。 在关闭的时候可能会出现异常导致关闭失败,对此可以重复执行关闭操作直到成功,

将Hive的数据迁移到HBase有两种方案,第一种方案不需要写代码,直接在集群A中生成HFile文件,然后使用distcp将HFile文件迁移到集群B,最后使用HBase的BulkLoad的方式将数据导入到HBase表。

另一种比较高级的方式,使用API接口,直接通过BulkLoad的方式进行数据迁移,以应用程序的形式来实现数据迁移。

如何保证HBase集群的高效及稳定

要保证HBase集群的高效和稳定,监控系统和修复机制是必不可少的,在实质上还有一些特殊的处理。

首先来看一下监控系统。只要将HBase的全部指标都采集到,就相当于是掌握了整个HBase集群的健康状态。我们可以通过regionserver提供的相应解码接口对HBase节点上的指标进行采集,然后将核心的指标绘制出来。

关于修复机制这块,需要监控系统和修复系统联合起来,由监控系统发现问题并反馈问题,然后再由修复系统去自动修复,例如集群进程可用性、存在性、负载均衡修复等。

最后还有一些特殊处理,HBase里遇到比较多的就是永久RIT的问题,一般情况下,RIT都是瞬时的,但是有些情况会让其进入永久RIT状态,所带来的不良后果就是管理员无法干预Region均衡操作,从而影响集群的负载均衡。

对于如何解决这种问题,我们先来看个案例。在该案例中合并Region操作时,发现RIT一直显示MERGING NEW状态,查看HBase JIRA发现这是触发了HBASE-17682的BUG,需要打补丁进行修复。

我们来分析这种情况产生的原因,首先客户端发起合并请求的命令,然后由master组织一个RegionServer上面的两个region进行去合并,在合并操作之前,它会生成一个初始化的MERGING NEW的状态,并存在master的内存里面。

这样我们就清楚了,当前的master有MERGING NEW状态,而BackUpMaster里没有该状态,直接进行主备切换就可以解决问题。

以上为今天的分享内容,谢谢大家!

原文发布于微信公众号 - IT大咖说(itdakashuo)

原文发表时间:2018-11-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云加头条

腾讯云服务器配置不用愁 只需这几步

作为云计算服务的重要组成部分,云服务器以其简单高效、安全可靠、弹性扩展的特性成为核心力量,构建了包括计算、网络、存储在内的综合服务平台。以腾讯云服务器为例,CV...

24.6K70
来自专栏蛋未明的专栏

Node.js从入门到深入——Node.js的了解

25140
来自专栏IT技术精选文摘

架构师眼中的高并发架构

27750
来自专栏cmazxiaoma的架构师之路

【分布式架构之旅-理论篇】数据库分库分表

15530
来自专栏一名合格java开发的自我修养

交易系统使用storm,在消息高可靠情况下,如何避免消息重复

概要:在使用storm分布式计算框架进行数据处理时,如何保证进入storm的消息的一定会被处理,且不会被重复处理。这个时候仅仅开启storm的ack机制并不能解...

10930
来自专栏Python小屋

Python爬虫系列:使用selenium+Edge查询指定城市天气情况

话说,国外有个网站http://openweathermap.org/可以免费查询指定城市的当前天气情况: ? 那是不是可以写个爬虫程序,自动调用网站的功能来...

34160
来自专栏北京马哥教育

Puppet,Ansible,Saltstack 有哪些区别和联系

目前主流的自动化运维工具有puppet、ansible、saltstack,实际上每一个工具都基本上能够完成你的运维任务,也都是久经考验的。都有NB的地方,也有...

18820
来自专栏崔庆才的专栏

付费代理的使用

1.2K40
来自专栏做全栈攻城狮

GitHub这么火,程序员你不学学吗? 超简单入门教程干货2

本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制。帮助大家摆脱命令行工具,简单快速的使用GitHub。

8520
来自专栏FreeBuf

企业安全漏洞通告引擎

? 背景 ? 如今大多数企业都在用漏洞扫描+漏洞通告,存在如下两个问题: 1、漏扫存在“扫描周期长、扫描库更新不及时”等情况,同时扫描报告中有无数干扰项,导致...

23850

扫码关注云+社区

领取腾讯云代金券