大数据之hbase_hbase的原理加强读写数据流程

写数据流程

1.客户端请求写入一条数据,会先向ZK发起请求,并给到ZK表名,行键,列族,属性,值等信息

2.ZK接收到请求,返回给客户端META表的位置信息,(META表中记录了region的个数,及每个region的大小和数据的起始位置等信息)

3.客户端拿到META表的位置信息,就会去到对应的regionserver请求META表数据,(假如META表的元数据中没有row_key的范围信息,就会去请求HMaster分配新的row_key的范围信息)

4.regionserver将META表数据给到客户端,客户端就会解析该数据,判断自己这条信息该存到哪个位置(哪个region里面去),在解析的时候,还会将该条要存储的信息的存储位置缓存起来,方便下次再次存储时,可以快速找到存储位置.

5.客户端拿到存储位置后,就会向对应的regionserver发起put请求,然后将数据写入到对应的region中,在region中会按列族cf1(Store)划分区域,且往列族中写数据时,实际上是写入了MemStore(内存)中.

6.在写数据的过程中,可能会发生宕机的可能,为解决此问题,在写数据时,会生成用户操作行为的日志文件,当宕机后,日志中记录的数据,可以直接导入到hdfs中(生成WALS日志文件),保证数据不会丢失.

7.当写入的数据足够多的时候,就会启动flush,生成storefile文件,storefile就会调用hdfs客户端, 将storefile文件flush到hdfs中,生成hfile文件.当hfile文件生成后,WALS就会生成oldWALS,过一段时间就会自动删除oldWALS.这样即保证了数据的安全性,又节省了储存空间.

8.flush时机:
1)手动强制刷新
2)单个memStore达到阈值(默认128M)
3)单个regionserver的总内存达到阈值
4)单日志记录的次数达到阈值(100万)
大数据之hbase_hbase的原理加强读写数据流程