1. hbase的系统表

 

     hbase:namespace--->存储了hbase中的所有namespace的信息

     hbase:meta--->存储了hbase中所有的region的信息,包括rowkey范围,region所在的regionserver的地址。

     hbase:meta--->在zookeeper中,进入zookeeper中查看

2. Client的请求过程涉及哪些角色和组件

     <1>读数据的流程

     1、Client先访问zookeeper,从meta表读取region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息

     2、根据namespace、表名和rowkey在meta表中找到对应的region信息

     3、找到这个region对应的regionserver

     4、查找对应的region

     5、先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)。

    <2>写数据的流程

     1、Client先访问zookeeper,从meta表获取相应region信息,然后找到meta表的数据

     2、根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息

     3、找到对应的regionserver

     4、把数据分别写到HLog和MemStore上一份

     5、MemStore达到一个阈值后则把数据刷成一个StoreFile文件。(若MemStore中的数据有丢失,则可以总HLog上恢复)

     6、当多个StoreFile文件达到一定的大小后,会触发Compact合并操作,合并为一个StoreFile,(这里同时进行版本的合并和             数据删除。)

     7、当Storefile大小超过一定阈值后,会把当前的Region分割为两个(Split),并由Hmaster分配到相应的HRegionServer,实             现负载均衡

     注意:

     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记录数据的变更信息,用来做数据恢复。

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

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

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

      3、hbase.client.scanner.timeout.period:默认值为60000ms,即1min。该参数表示一次Scan中一次RPC请求的超时时间               (一次Scan可能有多次RPC请求)。

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

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

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