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