HBase是什么

分享伊始,云锦问了大家是否听说过HBase,现场同学反映热烈,大多数同学都有所了解。HBase是一个分布式的、面向列的开源数据库,适合于非结构化数据存储的数据库,基于列而不是基于行的模式。随着数据增长,自动分裂。它主要有3个特点:海量PB级存储、水平扩展,稀疏、多版本,数据类型单一、字节数组。


HBase的整体架构如下图:



hbase删除列数据 hbase删除一列_hbase 查询

从下往上分为三个部分,最下面为Hadoop,是一个HDMS分布式的存储系统,默认三副本,比较可靠。

HMaster和HRegionServer是一个主从架构,RegionServer主要作用是负责响应,客户端读写。在RegionServer里有Region和HLog,Hlog是预写日志,主要作用是防止某个RegionServer宕机后,可及时做恢复。HBase表的数据是分散在Region里的,随着表的数据越来越大,它可能会切分成多个Region,换言之,每个Region的数据就是表数据的一部分。Region里有store,一个Region有多少个store,取决于Region表里的数据有多少个列族。Store里有Memstore和StoreFile,Memstore是一块内存空间。架构最上面是HMaster,是响应客户端的DDL操作,如建表,删表,修改表等,以及对集群做balance,即表的数据会切分到多个Region,对Region做负载均衡。

Zookeeper是Client端的源数据寻阻入口,Client端请求Zookeeper达到meta表所在的RegionServer,最终根据用户的请求,与具体的RegionServer做交互。Client是操作HBase集群的入口。

HBase应用场景

HBase在监控、在线服务、订单信息等场景均有应用。

在线服务类场景中,以电信上网详单为例,电信用户庞大,每个用户上网流量详单的数据需要实时保存,需要底层数据库有较高吞吐,其次用户在做查询时,要求低延迟响应,随机读写。在切换HBase之前,经常出现服务不可用或响应慢的情况,切换后即较平稳。



hbase删除列数据 hbase删除一列_hbase 删除列族下的某一列_02

在监控类场景中,涉及时间序列数据库,底层opentsdb实际的存储是HBase。集群峰值时tbs写入是两百多万,若用传统数据库则难以支撑,而用HBase则能轻松实现,在用户做调用链性能查询时,能做到实时响应。



hbase删除列数据 hbase删除一列_hbase 删除列族下的某一列_03

在订单信息类场景中,可应用于电商历史订单、私信通知、App push通知等。随着电商的订单量越来越大,历史订单达到上百亿时,用传统的数据做分库分表风险较大。历史订单查询频率较低,用HBase能轻松解决海量存储及用户的在线查询。



hbase删除列数据 hbase删除一列_hbase 查询_04

HBase基本操作

如何使用HBase?HBase表与传统数据库表读写和查询有哪些不同?HBase表模型由rowkey、column family(列族)、timestamp(时间戳)三部分组成。与传统数据库相比,不同在于HBase有列族的概念,列族下面的列可以随着业务场景在线添加,时间戳可以对表格的历史版本号、版本数做保留。

HBase的基本操作有:查表、建表、插入数据、查询数据get、查询数据scan、删除数据等,具体如下:

查表



hbase删除列数据 hbase删除一列_hbase查询_05

建表



hbase删除列数据 hbase删除一列_hbase 第一次查询慢_06

插入数据



hbase删除列数据 hbase删除一列_hbase 第一次查询慢_07

查询数据get

通过rowkey进行查询→查看rowkey下某个列族的信息→查看rowkey列族某个列的信息



hbase删除列数据 hbase删除一列_hbase 查询_08

查询数据scan

单列族查询→多列族查询→查询表前2行数据→指定rowkey的范围查询→指定数据版本的范围查询→指定列族与某个列名查询



hbase删除列数据 hbase删除一列_hbase删除列数据_09

删除数据

指定rowkey以及列名进行删除→删除一个列族→清空表数据



hbase删除列数据 hbase删除一列_hbase删除列数据_10

HBase日常维护

在HBase运维过程中,会遇到哪些常见问题?以及如何及时发现问题,遇到问题后该如何分析定位问题?基本排查思路如下图:



hbase删除列数据 hbase删除一列_hbase 查询_11

HBase监控体系

业务读写响应变慢,写入阻塞,RS宕机,第一反应都应该去看监控,很多异常都可以及时的反映出来,如资源使用情况,队列使用情况,业务相互干扰情况,Compaction情况等。

监控体系如何搭建?可以从三个维度入手。第一个维度是OS层面,常见的load、CPU、内存使用率、磁盘Util、网卡流量、连接数的监控等。

第二个维度是组件层面,涉及一些性能指标,如RS TPS、RS memstore、RS queue length 、RS RPC。

第三个维度是业务/表层面,如write、read、storefiles、storesize。

监控是提前发现及定位问题,但查找问题的根因需要通过日志分析的手段来实现。

HBase-日志分析



hbase删除列数据 hbase删除一列_hbase 查询_12

HBase-常见问题



hbase删除列数据 hbase删除一列_hbase删除列数据_13

结尾

在分享的最后,云锦用一句话总结了整体的分享内容——在需要实时读写、随机访问、超大规模数据集时,请使用HBase!

现场的同学听了云锦的分享后,表示收获很多,对于存在的一些疑问,现场也做了互动与交流。