1、面向列:面向列(族)的存储和权限控制,列(族)独立检索;稀疏:对于空(null)的列,并不占用存储空间,表可以设计的非常稀疏;数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;数据类型单一:Hbase中的数据都是字符串,没有类型。,HBase 特点,HBase与RDBMS对比,HBase与RDBMS对比,目录,HBase 简介HBase 数据模型HBase 物理模型HBase 体系结构HBase 访问方式HBase 适用场景,18,HBase以表的形式存储数据。表由行和列组成。列划分为若干个列族(row family),HBase数据模型,HBase
2、 数据表中一些关键概念,Row key键Column Family列族Timestamp时间戳Region区域,键 Row key,表中行的键是字节数组(最大长度是 64KB)任何字符串都可以作为键;表中的行根据行的键值进行排序,数据按照Row key的字节序(byte order)排序存储;字典序对int排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行键必须用0作左填充所有对表的访问都要通过键通过单个row key访问通过row key的range全表扫描,列族
3、 Column Family,HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create test,course;列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如course:math,course:english,新的列族成员可以随后按需、动态加入;权限控制、存储以及调优都是在列族层面进行的;同一列族成员最好有相同的访问模式和大小特征;HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。,时间戳Timestamp,在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的
4、差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。时间戳的类型是 64位整型。时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。,区域 Region,HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据;每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region;当table中的行不断增多,就会有越来越多的region。这
5、样一张完整的表被保存在多个Region 上。,Cell单元格,由行和列的坐标交叉决定;单元格是有版本的;单元格的内容是未解析的字节数组;由row key,column(=+),version 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。,锁,HBase的写操作是锁行的,每一行都是一个原子元素,无论对行进行访问的事务设计多少列,对行的更新都是原子的。都可以加锁。这使得加锁模型简单化。,目录,HBase 简介HBase 数据模型HBase 物理模型HBase 体系结构HBase 访问方式HBase 适用场景,物理存储,28,1、Table中的所有行都按照row key的字典
6、序排列。2、Table 在行的方向上分割为多个HRegion。,物理存储,29,3、Region按大小分割的,每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,HRegion就会等分会两个新的HRegion。当Table中的行不断增多,就会有越来越多的HRegion。,物理存储,30,4、HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的HRegion server上。但一个HRegion是不会拆分到多个server上的。,物理存储,31,5、HRegion虽然是分布式存储的最小单元,
7、但并不是存储的最小单元。事实上,HRegion由一个或者多个Store组成,每个store保存一个columns family。每个Strore又由一个memStore和0至多个StoreFile组成。如图:StoreFile以HFile格式保存在HDFS上。,物理存储,32,HFile的格式为:,目录,HBase 简介HBase 数据模型HBase 物理模型HBase 体系结构HBase 访问方式HBase 适用场景,HBase 体系结构,HBase 体系结构,Client 包含访问HBase的接口并维护cache来加快对HBase的访问Zookeeper 保证任何时候,集群中只有一个mas
8、ter存贮所有Region的寻址入口。实时监控Region server的上线和下线信息。并实时通知给Master存储HBase的schema和table元数据Master 为Region server分配region负责Region server的负载均衡发现失效的Region server并重新分配其上的region管理用户对table的增删改查操作Region Server Region server维护region,处理对这些region的IO请求Region server负责切分在运行过程中变得过大的region,Write-Ahead-Log(WAL),Master容错:Zooke
9、eper重新选择一个新的Master 无Master过程中,数据读取仍照常进行;无master过程中,region切分、负载均衡等无法进行;RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳 Master将该RegionServer上的Region重新分配到其他RegionServer上;失效服务器上“预写”日志由主服务器进行分割并派送给新RegionServer Zookeeper容错:Zookeeper是一个可靠地服务 一般配置3或5个Zookeeper实例。,Hbase 容错,-ROOT-与.META.表,-ROOT-表包含.META.表所在的区域列
10、表,该表只会有一个HRegion;Zookeeper中记录了-ROOT-表的location.META.表包含所有的用户空间区域列表,以及RegionServer的服务器地址;,hbase0.96版本后删除了root 表,目录,HBase 简介HBase 数据模型HBase 物理模型HBase 体系结构HBase 访问方式HBase 适用场景,HBase 交互接口,Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用Thrift Gate
11、way,利用Thrift序列化技术,支持C+,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据REST Gateway,支持REST 风格的Http API访问HBase,解除了语言限制Hive,使用类似SQL语言来访问HBasePig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计,目录,HBase 简介HBase 数据模型HBase 物理模型HBase 体系结构HBase 访问方式HBase 适用场景,HBase适用场景,摘自:HBase Facebook The Technology Behind Messages(and more.),Thank You,