子表Region服务器
HBase在逻辑上的最小存储单位是Region,物理上的最小存储单位是HFile。每个Region由多个HFile组成。那么,是否有一个推荐值,确定每台Regionserver上运行多少个Region、每个Region多大是最合适的呢?
根据目前主流服务器的能力,给出了以下推荐值:每台Regionserver管理10~1000个Regions,每个Region的大小在1GB~2GB。对应于HBase-site.xml中的一个配置项为HBase.hregion.max.filesize。如果按推荐值计算,每台Regionserver管理的数据量最少可以达到10´1GB=10GB,最大可以达到1000×2GB=2TB。3份备份的总数据量在6TB左右,通常磁盘的配置方案有两种:1~4块2TB的硬盘;2~12块500GB的硬盘。如果硬盘总线带宽够用,后一种方案能提供更大的吞吐率、更细粒度的磁盘冗余备份、更短的单盘故障恢复时间。那么HBase是如何划分Region的呢?
Region按大小分割,每个表一开始只有一个Region,随着数据的不断插入,Region不断增大,当增大到一个阀值的时候,Region就会等分成两个新的Region。当Table中的行不断增多时,就会有越来越多的Region,如下图所示。
Region是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的Region可以分布在不同的HRegion Server上。但一个Region是不会拆分到多个Server上的,如下图所示。
Region虽然是分布式存储的最小单元,但并不是存储的最小单元。事实上,Region由一个或多个Store组成,每个Store保存一个列族的数据。每个Strore又由一个MemStore和0至多个StoreFile组成,如下图所示。
当客户端进行更新操作时,先连接到相关的HRegionServer,然后向Region提交变更。提交的数据首先要写入WAL和MenStore中,当MemStore中的数据累计到某个阀值时,HRegionServer就会启动一个单独的线程将MemStore中的内容刷新到磁盘,形成一个StoreFile文件。当StoreFile文件的数量增加到一定的阀值后,就会将多个StoreFile文件合并成一个StoreFile,合并过程中将进行版本合并和数据删除,因此可以看出HBase其实只能增加数据,所有的更新和删除操作都是在后续的合并过程中进行的。StoreFile在合并过程中组建成更大的StoreFile,当StoreFile大小超过一定阀值后,会把当前的Region分割(Split)成两个Region,并由Hmaster分配到相应的Region服务器上,实现负载均衡。
学员评价