HBase学习笔记(2)—— HBase 数据检索和存储

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/86563109

1 HBase 结构

在这里插入图片描述

1.1 查看 zookeeper 存储的 Hbase 信息

[hadoop@node1 ~]$ zkCli.sh

[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper, hbase]
[zk: localhost:2181(CONNECTED) 2] ls /hbase
[replication, meta-region-server, rs, splitWAL, backup-masters, table-lock, flush-table-proc, region-in-transition, online-snapshot, master, running, recovering-regions, draining, namespace, hbaseid, table]
[zk: localhost:2181(CONNECTED) 3] 

在这里插入图片描述

  • HBase 新版本中,有了类似于 RDBMS 中 DataBase 的概念,叫做命名空间;http://node1:60010
    在这里插入图片描述
  • 用户自定义的表,默认情况下命名空间 default
    在这里插入图片描述
hbase(main):016:0> list_namespace
NAMESPACE                                                                                                                        
default                                                                                                                          
hbase                                                                                                                            
2 row(s) in 0.0260 seconds

hbase(main):017:0> list_namespace_tables 'hbase'
TABLE                                                                                                                            
meta                                                                                                                             
namespace                                                                                                                        
2 row(s) in 0.0190 seconds

hbase(main):019:0> list_namespace_tables 'default'
TABLE                                                                                                                            
user                                                                                                                             
1 row(s) in 0.0140 seconds

在这里插入图片描述

1.2 HBase 数据检索

  • user-table,regions; hbase : meta
  • client -> zookeeper (get /hbase/meta-region-server) -> hbase:meta

2 HBase 数据存储

HBase 所有的数据文件都存储在 HDFS 文件系统,主要包括2种文件类型:

  1. HFile : HBase 中 KeyValue 数据的存储格式,HFile 是 Hadoop 的二进制格式文件,实际上 StoreFile 就是 对 HFile做了轻量级包装,进行数据的存储;
  2. HLogFile,HBase 中 WAL (Write Ahead Log) 的存储格式,物理上是 Hadoop 的 Sequenec File

2.1 HRegionServer

  • HRegionServer 内部管理了一系列 HRegion 对象,每个 HRegion 对应了 table 中的一个 region,HRegion 中由多个 HStore 组成。每个 HStore 对应了 Table 中的一个 column family 的存储,可以看出每个 columnfamily 其实就是一个集中的存储单元,因此最好将具备共同 IO 特性的 column 放在一个 column family 中,这样最高效。
  • HStore 存储是 HBase 存储的核心,由 2 部分组成,一部分是 MemStore,一部分是 StoreFile. MemStore 是 Sorted Memory Buffer ,用户写入的数据首先会放入MemStore, 当 MemStore 满了以后会 flush 成一个 StoreFile(底层实现是 HFile)

2.2 Memstore & StoreFile

Client 写入 -> 存入 MemStore,一直到 MemStore 满  -> Flush 成一个 StoreFile,直至增长到一定阈值 -> 
触发 Compact 合并操作 -> 多个StoreFile 合并成一个 StoreFile,同时进行版本合并和数据删除 ->
当 StoreFile Compact 后,逐步形成越来越大的 StoreFile -> 单个 StoreFile 大小超过一定阈值后,触发
Split 操作,把当前 Region Split 成 2 个 Region,Region 会下线,新 Split 出的 2 个孩子 Region 会被
HMaster 分配到相应的 HRegionServer 上,使得原先 1 个 Region 的压力得以分流到 2 个 Region上

  • HBase 只是增加数据,有所得更新和删除操作,都是在 Compact 阶段做的,所以,用户写操作只需要进入到内存即可立即返回,从而保证 IO 高性能;

2.3 HLog 文件结构

  • WAL (Write ahead log),类似 Mysql 中的 binlog,用来做灾难恢复。Hlog记录数据的所有变更,一旦数据修改,就可以从log中进行恢复。每个 HRegionServer 维护一个 HLog,而不是每个 HRegion 一个。这样不同 region (来自不同 table) 的日志会混在一起,这样做的目的是不断追加单个文件相对于同时写多个文件而言,可以减少磁盘寻址次数,因此可以提高对 table 的写性能。带来的麻烦是,如果一台 HRegionServer 下线,未来恢复其上的 region,需要将 HRegionServer 上的 log 进行拆分,然后分发到其他 HRegionServer 上进行恢复。

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/86563109