row key | time stamp | info列族1:name | info列族2 : password | info列族3 | info列族4 | info列族5 | …… | info列族n |
12341 | 1500455547900 | password:\x00\x00\x00\x0D | ||||||
1500455547899 | name:wangwu1 | |||||||
12342 | 1500455547899 | name:wangwu2 | password:\x00\x00\x00\x0E | |||||
1500455547898 | a | |||||||
…… | ||||||||
1234n |
每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,HBASE提供 了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段 时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。例如:设置新密码的时候显示,不能使用您最近使用的密码。
创建表 | create '表名', '列族名1','列族名2','列族名N' |
查看所有表 | list |
描述表 | describe ‘表名’ |
判断表存在 | exists '表名' |
判断是否禁用启用表 | is_enabled '表名' is_disabled ‘表名’ |
添加记录 | put ‘表名’, ‘rowKey’, ‘列族 : 列‘ , '值' |
查看记录rowkey下的所有数据 | get '表名' , 'rowKey' |
查看表中的记录总数 | count '表名' |
获取某个列族 | get '表名','rowkey','列族' |
获取某个列族的某个列 | get '表名','rowkey','列族:列’ |
删除记录 | delete ‘表名’ ,‘行名’ , ‘列族:列' |
删除整行 | deleteall '表名','rowkey' |
删除一张表 | 先要屏蔽该表,才能对该表进行删除 第一步 disable ‘表名’ ,第二步 drop '表名' |
清空表 | truncate '表名' |
查看所有记录 | scan "表名" |
查看某个表某个列中所有数据 | scan "表名" , {COLUMNS=>'列族名:列名'} |
更新记录 | 就是重写一遍,进行覆盖,hbase没有修改,都是追加 |
Client:包含访问HBase的接口并维护cache来加快对HBase的访问
Zookeeper:保证只有一个master;存贮所有Region的寻址入口;实时监控Region server的上线和下线信息;存储HBase的schema和table元数据
Master:为Region server分配region ;负责Region server的负载均衡;发现失效的Region server并重新分配其上的region ;管理用户对table的增删改操作。
RegionServe: Region server维护region,处理对这些region的IO请求; Region server负责切分在运行过程中变得过大的region;
HLog(WAL log): HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是 HLogKey对象。
HLogKey中记录了写入数据的归属信息,除了table和 region名字外,同时还包括sequence number和timestamp,timestamp是” 写入时间”,sequence number的起始值为0,或者是最近一次存入文件系 统中sequence number。
HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的 KeyValue
Memstore 与 storefile:一个region由多个store组成,一个store对应一个CF(列族)store包括位于内存中的memstore和位于磁盘的storefile。
写操作先写入 memstore,当memstore中的数据达到某个阈值,hregionserver会启动 flashcache进程写入storefile,每次写入形成单独的一个storefile;当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、 major compaction),在合并过程中会进行版本合并和删除工作 (majar),形成更大的storefile。
当一个region所有storefile的大小和超过一定阈值后,会把当前的region 分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡。
客户端检索数据,先在memstore找,找不到再找storefile
HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的HRegion server上。
HRegion由一个或者多个Store组成,每个store保存一个columns family。每个Strore又由一个memStore和0至多个StoreFile组成。
Region :HBase自动把表水平划分成多个区域(region),每个region会保存一个表 里面某段连续的数据;每个表一开始只有一个region,随着数据不断插 入表,region不断增大,当增大到一个阀值的时候,region就会等分会 两个新的region(裂变)。regionserver来负责切分;
当table中的行不断增多,就会有越来越多的region。这样一张完整的表 被保存在多个Regionserver上。
如图:StoreFile 以HFile格式保存在HDFS上。
关于写!!
A:写操作流程
1、 client向hregionserver发送写请求。
2、 hregionserver将数据写到hlog(write ahead log)。为了数据的持久化和恢复。
3、 hregionserver将数据写到内存(memstore)
4、 反馈client写成功。
B:数据flush过程
1、 当memstore数据达到阈值(默认是64M),将数据刷到硬盘,将内存中的数据删除,同时删除Hlog中的历史数据。
2、 并将数据存储到storeFile文件中,放到hdfs上。
3、 在hlog中做标记点。
C:数据合并过程
1、 当数据块达到4块,增长到阈值,hmaster将数据块加载到本地,进行合并。
2、 当合并的storeFile文件数据超过256M,进行拆分,将拆分后的region分配给不同的hregionserver管理
3、 当hregionser宕机后,将hregionserver上的hlog拆分,然后分配给不同的hregionserver加载,修改.META.
4、 注意:hlog会同步到hdfs上。
备注:一句话总结:写过程,先写memstore,64M后写到storeFile里存在hdfs上,再64M,64M,64M,……256M后合并。超过256M后拆分成两个region,原regio下线。
关于读!!!
D:hbase的读流程
1、 通过zookeeper和-ROOT- .META.表定位hregionserver。
2、 数据从内存和硬盘合并后返回给client
3、 数据块会缓存。
① hmaster的职责
1、管理用户对Table的增、删、改、查操作;
2、记录region在哪台Hregion server上
3、在Region Split后,负责新Region的分配;
4、新机器加入时,管理HRegion Server的负载均衡,调整Region分布
5、在HRegion Server宕机后,负责失效HRegion Server 上的Regions迁移。
② hregionserver的职责
HRegion Server主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBASE中最核心的模块。
HRegion Server管理了很多table的分区,也就是region。
③ client职责
HBASE Client使用HBASE的RPC机制与HMaster和RegionServer进行通信
管理类操作:Client与HMaster进行RPC;
数据读写类操作:Client与HRegionServer进行RPC。
四:MapReduce操作Hbase
打开hbase,eclipse中运行即可,程序里规定了zookeeper寻找两个子节点