标签:概述 ttl 数据存储 大量 关机 元数据 物理 hba eve
解决HDFS不支持单条记录的快速查找和更新的问题。
概念 | 中文 | 解释 | 备注 | 举例 |
---|---|---|---|---|
Table | 表 | 由多行组成 | ... | |
Row | 行 | 由一个Key和一个或者多列组成 | ||
Column | 列 | 由列族和列限定符组成 | 列族:列限定符 ;行与行之间的列可以相差很多 | |
Column Family | 列族 | 物理上存储多个列;为提高性能设计的; | 表格创建时需要置顶 | content |
Column Qualifier | 列限定符 | 列族中数据的索引 | 表格创建时不需要指定,可以在任何时候添加 | content:html |
Cell | 单元 | 由行、列族、列限定符、值和代表版本的时间戳组成 | ||
TimeStamp | 时间戳 | 用来表示数据的版本 | 可以使用系统时间也可以自己指定 |
Row Key | Time Stamp | ColumnFamily contents | ColumnFamily anchor | ColumnFamily people |
---|---|---|---|---|
"com.cnn.www" | t9 | anchor:cnnsi.com = "CNN" | ||
"com.cnn.www" | t8 | anchor:my.look.ca = "CNN.com" | ||
"com.cnn.www" | t6 | contents:html = "…? | ||
"com.cnn.www" | t5 | contents:html = "…?" | ||
"com.cnn.www" | t3 | contents:html = "…? | ||
com.example.www | t5 | contents:html: "..." | people:author: "John Doe" |
说明:
- 表格格式不是唯一和最精确的表达方式,还可以用Json格式来表达
- 表格中的空白单元不会占用物理存储空间,只是概念上存在
操作 | API | 注意点 | 与版本的关系 |
---|---|---|---|
Get | Table.get | 返回指定行的属性;Scan的第一行 | 若没有指定版本,则返回版本值最大(但可能不是最新的)的数据;可以通过设置MaxVersion的值修改返回的数据条数 |
Scan | Table.scan | 返回满足条件的多行 | 同上 |
Put | Table.put | Key存在则更新Key不在则插入;通过 Table.put (写缓存) 或者Table.batch (没有写缓存) | 默认使用系统时间;只要key、column和version相同就可以实现覆盖;插入时可以指定版本 |
Delete | Table.delete | 1.删除指定列;2.删除列的所有版本;3.删除特定列族的所有列 | 1. 删除操作不会立刻执行,而是给该数据设置墓碑标签,在空间清理的时候再执行死亡数据和墓碑的清除工作;2.通过在 hbase-site.xml.中hbase.hstore.time.to.purge.deletes属性来设置TTL(生存时间) |
说明:
- 版本数的最大值和最小值是可以指定的,并且会影响操作
- 版本(时间戳)是用来管控数据的存活时间的,最好不要手动设置
1)Delete操作会影响Put操作:原因在于Delete操作并不是立刻执行,而是给死亡数据设置墓碑标签,那么如果当你执行了一个Delete版本低于等于T的操作,而后有插入Put了一个版本为T的数据,此时新Put的数据也会被打上标签,那么会在系统的下一次清理工作中将打上标签的数据全部清理掉,执行查询时则会获取不到新Put的数据,如果你不手动设置版本的话,版本采用系统默认时间,则不会出现这种情况。
2)清理工作会影响查询:创建三个版本为t1,t2,t3的单元,并且设置最大版本数为2.所以当我们查询所有版本时,只会返回t2和t3。但是当你删除版本t2和t3的时候,版本t1会重新出现。显然,一旦重要精简工作运行之后,这样的行为就不会再出现。
1)主从架构
2)有三个组件:
组件名称 | 组件主要功能 |
---|---|
HMaster | 负责Region的分配和DDL操作(创建,删除表) |
HRegionServer | RegionServer负责数据的读写;和客户端通讯 |
ZooKeeper | 维持集群的活动状态 |
3)底层储存是HDFS
2)存储位置:ZooKeeper中
本小节可参考Region Server详解
本小节可参考Region详解
本小节可参考Region Server详解中的首次读写流程
本小节可参考Region Server详解中的写流程
本小节可参考Region Server详解中的读流程
本小节可参考Region Server详解中的次压缩部分
本小节可参考Region Server详解中的主压缩部分
本小节可参考Region Server详解中的WAL Replay
在0.96.x之前是存在-ROOT-和.META两个表格来维持region的元数据
? .META. region key (.META.,,1)
? info:regioninfo (hbase:meta的序列化实例)
? info:server (存储 hbase:meta的RegionServer的server:port)
? info:serverstartcode (存储 hbase:meta的RegionServer的启动时间)
本小节可参考2.2.2.2 组件中的hbase:meta和2.3 相关流程中的首次读写流程进行比较
1)0.96.x版本之前是参考Goole的BigTable设计的,从读取数据请求发起到真正读取到数据要经过4个步骤,Google设计BigTable的目的在于它的数据量巨大,多层的schema结构能够存储更多的Region,但是随着而来的就是访问性能的下降。
2)一般公司的数据量没有Google那么大,所以去掉-ROOT-表,留下.META(hbase:meta)表,提高Region的大小,不仅可以满足存储需求,而且访问性能得到提高。
待续...
待续...
待续...
本小节可参考HBase部署入门指南
本小节可参考HBase Shell 练习、HBase Java API 练习、使用MapReduce操作HBase
待续...
待续...
待续...
待续部分将会后期不定期更新,敬请期待。
标签:概述 ttl 数据存储 大量 关机 元数据 物理 hba eve
原文地址:http://www.cnblogs.com/zhangyuliang/p/6782287.html