这是我参与「第四届青训营 」笔记创作活动的第7天
尽管 HDFS 实现了廉价分布式文件系统的功能,但是这只能提供比较低级的数据保存形式而已。为了能够更好的利用HDFS这个分布式储存,大家自然会想要实现一些契合HDFS的数据模型或者应用程序。
HBASE就是为HDFS实现的分布式表格储存服务。它的设计参考了谷歌曾经的 Big Table 的设计,并且采取了计算与储存分离的架构。 HBASE被称为所谓的nosql,与传统的关系型数据库不同的是,HBASE更应该被看作是一个列式的键值数据库。
HBASE 的储存机制应用了分片机制,不过hbase并不将之成为sharding而是称之为region区域。对于热点区域,habse的处理手段是分割成两个部分,分摊数据。这个操作由所谓的region server 负责检测、执行并上报到hmaster服务器。
HBASE通过zookeeper实现分布式协调功能,hmaster的主从切换便是由zookeeper辅助实现的,由此保障master的可用性。数据的恢复通过WAL日志实现状态机的同步。Region Server的恢复类似hmaster,也是依赖zookeeper的,由zookeeper作为中介,再和hmaster通信。
在HBase的具体使用中,有一些基于场景的优化手段,对于确定的非范围查找数据可以通过hash结果作为key,压缩key的长度节省空间。对于需要范围查询的也不太建议直接使用相应数据作为key,比如按时间查找,时间戳不适合作为key,这很容易造成数据倾斜,而且时间戳尤其是大忌,他会始终让最新的数据处于热点状态。
此外,由于先前也提到了habse相当于是一个键值数据库,但是habse实际上会给数据都额外保存键key的值,而habse实际上由四元组组成key,因此每一项都应该尽量短一些。