1 已经提到过,Table中的所有行都凭据row key的字典序分列。
2 Table 在行的偏向上支解为多个Hregion。
3 region按巨细支解的,每个表一开始只有一个region,跟着数据不绝插入表,region不绝增大,当增大到一个阀值的时候,Hregion就会平分会两个新的Hregion。当table中的行不绝增多,就会有越来越多的Hregion。
4 Hregion是Hbase中漫衍式存储和负载平衡的最小单位。最小单位就暗示差异的Hregion可以漫衍在差异的HRegion server上。但一个Hregion是不会拆分到多个server上的。
5 HRegion固然是漫衍式存储的最小单位,但并不是存储的最小单位。
事实上,HRegion由一个可能多个Store构成,每个store生存一个columns family。
每个Strore又由一个memStore和0至多个StoreFile构成。如图:
StoreFile以HFile名目生存在HDFS上。
HFile的名目为:
Trailer部门的名目:
HFile分为六个部门:
Data Block 段–生存表中的数据,这部门可以被压缩
Meta Block 段 (可选的)–生存用户自界说的kv对,可以被压缩。
File Info 段–Hfile的元信息,不被压缩,用户也可以在这一部门添加本身的元信息。
Data Block Index 段–Data Block的索引。每条索引的key是被索引的block的第一笔记录的key。
Meta Block Index段 (可选的)–Meta Block的索引。
Trailer–这一段是定长的。生存了每一段的偏移量,读取一个HFile时,会首先读取Trailer,Trailer生存了每个段的起始位置(段的Magic Number用来做安详check),然后,DataBlock Index会被读取到内存中,这样,当检索某个key时,不需要扫描整个HFile,而只需从内存中找到key地址的block,通过一次磁盘io将整个 block读取到内存中,再找到需要的key。DataBlock Index回收LRU机制裁减。
HFile的Data Block,Meta Block凡是回收压缩方法存储,压缩之后可以大大淘汰网络IO和磁盘IO,随之而来的开销虽然是需要耗费cpu举办压缩息争压缩。
方针Hfile的压缩支持两种方法:Gzip,Lzo。
HLog(WAL log)
WAL 意为Write ahead log(http://en.wikipedia.org/wiki/Write-ahead_logging),雷同mysql中的binlog,用来做劫难规复只用,Hlog记录数据的所有改观,一旦数据修改,就可以从log中举办规复。
每个Region Server维护一个Hlog,而不是每个Region一个。这样差异region(来自差异table)的日志会混在一起,这样做的目标是不绝追加单个文件相对付同时写多个文件而言,可以淘汰磁盘寻址次数,因此可以提高对table的写机能。带来的贫苦是,假如一台region server下线,为了规复其上的region,需要将region server上的log举办拆分,然后分发到其它region server长举办规复。
HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey工具,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包罗 sequence number和timestamp,timestamp是”写入时间”,sequence number的起始值为0,可能是最近一次存入文件系统中sequence number。HLog Sequece File的Value是HBase的KeyValue工具,即对应HFile中的KeyValue,可拜见上文描写。
http://hi.baidu.com/kayin521/blog/item/e4ac9af08e532d78dcc4743c.html