HBase总结

client

1.操作hbase的接口:

a. 命令行b. java api

HBaseAdmin 管理表

createtabledisabletabledeletetable HTable 管理数据

添加数据 put获取数据 get \ scan删除数据 delete 2.并维护客户端的缓存 zookeeper:高可用+存储元数据的元数据

保证任何时刻集群中只有一台active的master存储所有region的寻址入口:指的是所有region的元数据存储在哪一台regionserver中,默认放在hbase这个命名空间下的meta目录中,也存储于hdfs中 /hbase/data/hbase/meta监控regionserver的上线和下线信息,并实时通知master存储相关的表的数据(表的名称等)

ls /hbase [replication, meta-region-server, rs, splitWAL, backup-masters, table-lock, region-in-transition, online-snapshot, master, running, recovering-regions, draining, namespace, hbaseid, table] [zk: localhost:2181(CONNECTED) 10] ls /hbase/table [hbase:meta, psn, hbase:namespace, phone] 命名空间:表名称,没有带命名空间的默认为default master

掌握所有regionserver的使用情况,为其分配region保证整个集群中所有regionserver中的负载均衡当发现某一台regionserver宕机之后,重新分配上面的region当region变大发生裂变之后,master负责去分配region到哪一台regionserver中 regionserver

负责接收客户端的读写请求,处理对于region的io当某一个region变大之后,regionserver负责等分该region为两个region。regionserver负责切,master负责分配 region

相当于表的概念一张表至少对于一个region当表的数据过大的时候,region会发生等分裂变(由regionserver分,由master分配) store(逻辑上)

相当于列族store中有memstore和storefilememstore位于内存,每一个store有一个memestorestorefile是磁盘存储空间,将数据持久化存储的位置每一个region有一个或多个storefilestorefile数量过多会进行合并操作(默认数量为3)存储结构:使用了LSM树的数据模型 WAL

write ahead log预写日志hlog防止数据丢失先写内存,再向hdfs上溢写,但是是异步的方式 读写流程

读流程:

客户端向zk中发送请求从zk中拿到metadata的存储节点去存储metadata的节点获取对应的region所在的位置访问对应的region拿到数据

先去memstore查询,如果有结果直接返回如果没有结果,再去blockcache中查找,如果找到直接返回如果没有再去storefile中查找数据,并将查询到的结果返回到blockcache中方便下一次查询 将结果返回到客户端注意:blockcache是缓存,有大小限制,会有淘汰机制,默认将最早进来的数据淘汰 写流程

客户端向zk发送请求从zk中拿到metadata的存储节点去存储meta的节点获取对应region所在的位置访问对应的region,写数据

首先会向hlog中写数据,写成功之后才会向memstore中写数据当memstore的数据量达到阈值之后会发生溢写,溢写成storefilestorefile是一个个的小文件,会进行合并(合并的两种方式:minor,major)storefile是对hfile 的封装,hfile是实际存储在hdfs上的数据文件