HBase是一个高速读写的半结构的数据库,因此很多的配置需要我们自己手动修改。
HBase的调优,可以修改MemStore的参数,因此这个缓存,直接影响写入的速度,以及读取的速度。
说一下自己通过读取大家的博客,自己的理解Hbase的流程:
(1)首先,客户端通过Hbase的shell 或者Java的API等一些方式访问Hbase中的数据,如果要是写数据的话,则可以缓存在Buffer Write中,这样可以减少数据的传输。
但是可能造成用户输入数据的丢失。
(2)clinet会通过RPC协议与HMaster通信,要找到写入表所在的HRegionServer所在的地址。HMaster通过读取zookeeper中存在的信息,找到-ROOT-文件所在的location。
加在-ROOT-,找到.META.文件的所有Region,在通过Region找到具体的RegionServer。
(3)然后Client通过RPC协议与RegionServer进行通信,首先要知道客户端的数据实质上要存储在HDFS上,HDFS的文件的格式一般是顺序的存取,HBASE要求ROW key 必须是有顺序的,所以,需要引入MemStore。引入MemStore即有好处,也有不好之处。
引入MemStore的好处就是:
(1)可以先将用户的数据排序,然后输出到HFile 中,即HDFS文件中。一般HFile的大小是64KB。有助于HBASE对于用户的检索根据ROWKEY的排序
(2)用户读取HFILE文件的时候,可以在MemStore进行缓存。加快访问的速度。
缺点:
如果Memstore 写满了,就会flush生成一个HFile文件,生成大量的小的HFile文件,造成用户访问的时候,需要访问小文件,而且多次,造成效率降低
HBase有一个后台进行,当HFile文件的数量或者大小达到一定程度的时候,就会合并,但是合并的过程也会消耗系统的资源,甚至噪声写的阻塞。
因此我们需要设置合理的MemStore的参数,达到系统的性能的最优。
(4)为了保证数据的安全性,我们一般采用先写日志,在写数据库。我们把数据先写入到HLOG文件中,然后在写入到MemStore中,当有RegionServer当掉的时候,我们就可以使用Region和LOg恢复数据。
(5)Hbase写入的数据,可以压缩的写到HDFS中。