HBase数据的写入需要HBase客户端先通过读取Zookeeper上的元数据定位到本次写入的Region由哪个RegionServer负责,之后HBase客户端直接与定位到的RegionServer通信。
一 模拟实验:
1.通过命令zkCli.sh进入到Zookeeper客户端,获取meta表所在的RegionServer(0.96版本去掉了ROOT表),meta表允许具有多个region.
2.根据观察meta表的region所在的RegionServer,可以看到,当前meta的region在hadoop03上。
3.除了可以通过Zookeeper客户端查看数据之外,也可以去到HMaster所在的服务器访问HBase的web页面,查看meta表所在的region在哪些ResionServer上
4.知道meta表的region在哪些RegionServer上之后,HBase客户端便会去对应的RegionServer扫描数据,请注意,这边客户端会根据rowkey查询所在的region,并获得region所在的ResionServer。
5.最后,直接在对应的ResionServer上插入到上一步所找到的region中。
二:对于以上五个步骤,可以简单的用图来概括一下
注意: meta表里面存储了所有的region的行键范围信息,通过这个表就可以查询出你要存取的rowkey属于哪个region的范围,以及这个region又是属于哪个RegionServer的。
三 HBase写数据的详细步骤
1.用户通过查找zk(Zookeeper)的/hbase/meta-region-server节点查询哪个或哪些ResionServer上有hbase:meta表。
2.客户端连接含有hbase:meta表的RegionServer。Hbase:meta表存储了所有Region的行健范围信息,通过这个表就可以查询出你要存取的rowkey属于哪个Region的范围里面,以及这个Region又是属于哪个RegionServer。
3.获取信息后,客户端就可以直连你要存数据的ResionServer,并直接对其操作。
四 说明
1 从0.96版本之后,三层架构被改为二层架构,ROOT表被去掉了,同时zk(Zookeeper)中的/hbase/root-region-server也被去掉了。直接把meta表所在的ResionServer信息存到了zk中的/hbase/meta-region-server去了。meta表所属的命名空间(namespace)是hbase。
2 客户端会把meta信息缓存起来,下次操作就不需要进行加载HBase:meta的步骤了。
关于HBase写流程就讲到这里啦,最后再附一张关于HBase的架构图,感兴趣的朋友看一看!!!