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。