HBase Client的请求过程

                                   HBase Client的请求过程

1、 Client的请求过程涉及哪些角色和组件

2、 请求过程中涉及的组件有哪些可配置参数

1、HBase写数据流程

1.1:

HBase Client的请求过程_第1张图片

流程:Client请求Zookeeper确定meta表所在的RegionServer所在的地址,接着根据Rowkey找到数据所归属的RegionServer;用户提交put或delete请求时HbaseClient会将put或delete请求添加到本地buffer中,符合一定条件会通过异步批量提交服务器处理。

1.2:数据到达Region后,服务端处理流程如下:

HBase Client的请求过程_第2张图片

 流程:RegionServer去获取RowLock,region更新共享锁;接着Hbase会先写写日志WAL(数据可靠性)再写缓MemStore(阈值默认64M,每个列族对应一个Store下的MemStore);然后释放锁后将日志落到HDFS;若MemStore达到阈值则将缓存数据落磁盘StoreFile,最后多个StoreFile发生合并;若StoreFile很大会触发split操作,将当前region分割成2个Region,并同步到Hmaster。

2、HBase读数据流程

HBase Client的请求过程_第3张图片

HBase Client的请求过程_第4张图片

流程:RegionServer收到get请求后,对当前Region进行Scan,接着会根据列族对Store进行Scan,同时会对对应的MemStore进行Scan;最后找到我们要的数据返回给Client。注意:一个StoreScanner会对应多个StoreFileScanner,整个过程是一个层级关系。

SUMMARY:

HBase写数据流程:


1、Client先访问zookeeper,从meta表获取相应region信息,然后找到meta表的数据
2、根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息
3、找到对应的regionserver
4、把数据分别写到HLog和MemStore上一份
4、MemStore达到一个阈值后则把数据刷成一个StoreFile文件。(若MemStore中的数据有丢失,则可以总HLog上恢复)
5、当多个StoreFile文件达到一定的大小后,会触发Compact合并操作,合并为一个StoreFile,(这里同时进行版本的合并和数据删除。)
6、当Storefile大小超过一定阈值后,会把当前的Region分割为两个(Split),并由Hmaster分配到相应的HRegionServer,实现负载均衡

HBase读数据流程:


1、Client先访问zookeeper,从meta表读取region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息。
2、根据namespace、表名和rowkey在meta表中找到对应的region信息
3、找到这个region对应的regionserver
4、查找对应的region
5、先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)。

注意:


  1、Client访问hbase上数据时并不需要Hmaster参与,数据的读写也只是访问RegioneServer,HMaster仅仅维护这table和Region的元数据信息,负载很低。
  2、HBase是通过DFS client把数据写到HDFS上的。
  3、每一个HRegionServer有多个HRegion,每一个HRegion有多个Store,每一个Store对应一个列簇。
  4、HFile是HBase中真正实际数据的存储格式,HFile是二进制格式文件,StoreFile就是对HFile进行了封装(其实就是一个东西) 然后进行数据的存储。
  5、HStore由MemStore(只有一个)和StoreFile(多个)组成。
  6、HLog记录数据的变更信息,用来做数据恢复。

 

HBase Client请求过程涉及的可配置参数

hbase.rpc.timeout               

默认值为60000ms,即1min。该参数表示一次RPC请求的超时时间。如果某次RPC时间超过该值,客户端就会主动关闭socket。服务端会抛出: java.io.IOException: Connection reset by peer。

hbase.client.operation.timeout      

默认值为1200000ms,即20min。该参数表示HBase客户端发起一次数据操作直至得到响应之间总的超时时间,数据操作类型包括get、append、increment、delete、put等。

hbase.client.scanner.timeout.period  

默认值为60000ms,即1min。该参数表示一次Scan中一次RPC请求的超时时间(一次Scan可能有多次RPC请求)。

hbase.client.scanner.caching     

 HBase-0.98默认值为为100,HBase-1.2默认值为2147483647,即Integer.MAX_VALUE。Scan.next()的一次RPC请求fetch的记录条数。

hbase.client.scanner.max.result.size    

HBase-0.98无该项配置,HBase-1.2默认值为2097152,即2M。Scan.next()的一次RPC请求fetch的数据量大小,HBase-1.2使用这个参数控制RPC次数和流量。

hbase.server.scanner.max.result.size 

服务端配置。HBase-0.98无该项配置,HBase-1.2默认值为104857600,即10M。该参数表示当Scan.next()发起RPC后,服务端返回给客户端的最大字节数,防止Server OOM。

 

参考资料:

https://www.cnblogs.com/nicoleljc/archive/2018/11/18/9976555.html

https://blog.csdn.net/wypersist/article/details/80115123

https://www.cnblogs.com/zhongxun/articles/6485919.html

https://www.cnblogs.com/chenghaohao/p/8059756.html

你可能感兴趣的:(HBase,hadoop)