带着问题来寻找答案:
1.HBASE的读写过程就是HBASE的寻址过程
2.如何快速的寻找到地址?
3.为什么hbase可以快速的查询 写入数据?
4.Hbase的数据模型:底层存储的数据到底是怎么样的过程 ?
5.Hbase的数据模型设计:数据文件最终存储在hdfs的结构是怎么样的?并不是key value
客户端发起写数据请求
构建Put对象:一个Put对象代表一行数据记录,可以添加多个列的数据。
如上例所示, RowKey为“012005000201” ,包含3个列:name,gender,address。
Put or PutList?
HBase提供了两个主要的写数据接口,一个可以写入单行数据,即Put接口,另一个可以批量写入多行数据,即PutList接口。事实上, Put仅是PutList的一种特殊情形。因此,后面的流程介绍仅仅涉及PutList。
找region:
如何快速的找到region?
答:找mata表中的metaregion
我们如何快速的找到我的表的元数据信息在meta表中哪个metaregion的位置?
答:zookeeper
Meta表的路由信息:这个表有哪些region 每一个region在哪些位置上
不论是读还是写,首先是找region
Metaregion
Userregion
数据
为什么写入数据需要找region而不是直接追加?
mysql:insert操作 新数据直接追加
mysl的寻址过程:一张表对应一个文件,找到表就是找到文件,新数据直接追加在末尾
Habse:
在一张表中,region管理一定范围内的数 rowkey按字典排序
第一个region的start key是空不是0
一张表的不同region可以放到不同的主机中去
Put:数据根据不同的rowkey,插入到不同的region中
当数据量很大时,hbase:meta表也会被拆分成多个 region,称之为metaregion,也可能会被放到不同的主机上,这些metaregion存储的就是某一些表的路由信息,也就是:userregion,region所属的regionserve信息
Regionserver内部按照什么来进行分配数据:rowkey字典排序
数据分组:
任务交给regionserver之后,regionser做什么?
数据进入的时候,并不是一条一条的进入的,有可能是很多条,比如list一次来10w条数据,
这么大的数据,拿到数据以后,有2种