内容来源:2018 年 09 月 15 日,平安科技数据平台部大数据高级工程师邓杰在“中国HBase技术社区第五届MeetUp ——HBase应用与发展”进行《HBase应用与实践》的演讲分享。IT 大咖说做为独家视频合做方,经主办方和讲者审阅受权发布。数据库
阅读字数:3315 | 9分钟阅读缓存
本次演讲首先给你们介绍一下平安科技使用HBase的现状,以及给用户解决了哪些问题,而后是如何保证HBase集群的高效以及它的稳定的。负载均衡
咱们这边HBase的使用现状,能够从如下两个方面来说,第一个是HBase的集群规模以及数据量。第二个是它的应用场景。HBase集群方面如今是由300多台物理机组成,数据量大概有两个P两个pb左右。tcp
HBase的应用上,用户可能首先要面临的是海量数据的存储问题,而后是对性能和可靠性的关注。最后一个多是数据的迁移问题。性能
从用户层面来说,他们在使用传统数据库的时候,因为没法预估业务应用场景,形成没法判断接下来会面临多大的数据量。因此咱们建议用户将数据接入到HBase集群里面,HBase是支持在线扩容的,即便后续使用的过程当中,某段时间数据出现爆炸式增加,咱们也能够经过HBase进行横向扩容来知足需求。大数据
在使用传统的DB时候,其实在维护和扩展方面都会遇到不少问题,而若是迁移到HBase上,进行扩容和维护就会很方便的。优化
性能和高可用问题也是用户关注的重点,性能方面主要在于应用程序对HBase集群的调用。线程
先讲下客户端优化的方案,上图列出了几个常见的优化点,首先第一个是基于应用层面的scan操做,此时客户端向HBase的请求后,数据并非一次性所有返回,而是经过屡次的RPC请求交互获得数据。在这方面若是请求的数据量很大,能够经过去调整一下参数来减小RPC的交互,从而下降耗时。orm
另外一个优化点是在get方面的,在HBase既能够一次性get整个数据,也能够进行批量的get操做。咱们通常建议批量的使用get,其原理主要是为了去减小用户RPC的交互次数。cdn
接下来是列簇及列的优化。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,因此要指定队列名。
迁移过程中须要注意如下四项。
开启YARN,distcp使用Mapreduce来传输数据,所以迁移以前须要确保集群资源可用。
防火墙,两个HBase集群之间端口要能正常访问telnet,例如NN、DN的端口。
使用HBase Hbck修复元数据信息
上图为跨集群迁移的一个案例,产生这种问题的缘由是HDFS中的文件没有关闭,处于写状态,而每次distcp时会校验文件长度,若是文件处于关闭状态,就会出现这种异常。
对于这种状况,咱们能够先检测文件的状态,而后关闭该文件,从新进行数据迁移。 在关闭的时候可能会出现异常致使关闭失败,对此能够重复执行关闭操做直到成功,
将Hive的数据迁移到HBase有两种方案,第一种方案不须要写代码,直接在集群A中生成HFile文件,而后使用distcp将HFile文件迁移到集群B,最后使用HBase的BulkLoad的方式将数据导入到HBase表。
另外一种比较高级的方式,使用API接口,直接经过BulkLoad的方式进行数据迁移,以应用程序的形式来实现数据迁移。
要保证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大咖说,转载请标明版权和出处