现在的位置: 首页 > 综合 > 正文

Hbase学习总结一

2018年01月11日 ⁄ 综合 ⁄ 共 1499字 ⁄ 字号 评论关闭

数据模型:
1.用户在表格里存储多行数据行;
2.每个数据行都包括一个可排序的关键字,和任意数目的列;
3.表格是稀疏的;
4.列名是"<族名>:<标签>"形式,其中<族名>和<标签>可以是任意字符串;
5.一个表格的列族集合是固定的,除非使用管理员权限来改变表格的列族;
6.可以在任何时候增加新的标签;
7.hbase在磁盘上按照列族存储数据,所以一个列族里所有项有相同的读/写方式。
8.写操作是行锁定的,对行的操作是原子的。不能一次锁定多行
9.所有数据库更新操作都有时间戳,hbase对每个数据单元,只存储指定个数的最新版本。

概念模型:
一个表格是一些行的集合
每一行包含一个行关键字(和一个可选的时间戳)和一些有可能有数据的列(稀疏的)

逻辑视图:
一行(row)对应多个列族(family),
一个family对应多个列(column),
每一个列对应一个存储单元(cell),
每一个单元保存着一份数据的多个版本
版本之间通过时间戳(version)来区分,不同的版本按照时间的倒叙来排列,即最近的数据排最前

物理存储:
hbase的table在行的方向上分割为多个hregion,hregion增大到一定程度时,会自动分割为两个新的hregion。不同的hregion会分布在不同的hregion server上面。因此hregion是hbase中分布式存储和负载均衡的最小单元。不过hregion不是存储的最小单元。下面可分为store,storefile

hbase的工作原理
当客户端要进行更新操作时,现连接有关的子表服务器,然后向子表提交变更,提交的数据添加到子表的
HMemcache和子表服务器的HLog。HMemcache在内存中存储最近的更新,并作为cache服务,HLog是
磁盘上的日志文件,记录所有的更新操作,客户端的commit()调用直到更新写入到HLlg中后才返回。
提供服务时,子表先查HMemcache。如果没有再查磁盘上的HStore。子表的每个列族都对应一个HStore,而一个HStore又包括多个磁盘上的HStoreFile文件。每个HStoreFile都有类似B树的结构,允许快速查找。
我们定期调用HRegion.flushcache(),把HMemcache的内容写道磁盘的HStore的文件里。这样给每个HStore都增加了一个新的HStoreFile.然后清空HMemcache,再在HLog里加入一个特殊的标记,表示对HMemcache进行了flush。
启动时,每个子表检查最后的flushcache()调用之后是否还有写操作在HLog里未应用。如果没有,那么子表里的所有数据就是磁盘上 HStore文件里的数据;如果有,那么子表把HLog里的更新重新应用一遍,写到HMemcache里,然后调用flushcache()。最后子表会 删除HLog并开始数据服务。

总结:
1.客户端访问表格里的数据。
2.表格分成许多子表。
3.子表由子表服务器维护,客户端连接子表服务器来访问某子表关键字范围内的行数据。
4.子表又包括:
A.HMemcache,存储最近更新的内存缓冲
B.HLog,存储最近更新的日志
C.HStore,一群高效的磁盘文件。每个列族一个HStore。

HBase的Master服务器
每个子表服务器都维持与唯一主服务器的联系。主服务器告诉每个子表服务器应该装载哪些子表并进行服务。主服务器维护子表服务器在任何时刻的活跃标记,如果主服务器和子表服务器间的连接超时了。那么:
A。子表服务器杀死自己,并以一个空白状态重启
B。主服务器假定子表服务器已经死了,并把它的子表分配给其他子表服务器

抱歉!评论已关闭.