HBase的应用场景:
需对数据进行随机读操作或者随机写操作;
大数据上高并发操作,比如每秒对PB级数据进行上千次操作;
读写访问均是非常简单的操作。
HBase概述:
HBase是一个基于HDFS的面向列的分布式数据库,源于Google的BigTable论文;
HBase是Apache Hadoop生态系统中的重要组成部分,主要用于海量结构化数据存储;
HBase内部管理的文件全部存储在HDFS中;
NoSQL简介:
NoSQL=No SQL(也就是说不仅仅是SQL,比如HBase就拥有Phoenix工具);
常见的NoSQL与RDBMS:
NoSQL:HBase, Redis, MongoDB;
RDBMS:MySQL,Oracle,SQL Server,DB2;
HBase数据库的特点:
它介于NoSQL与RDBMS之间,仅能通过主键和主键的range来检索数据;
HBase的查询功能简单,不支持JOIN操作;
不支持复杂的事务,只支持行级事务(可以通过hive实现多表JOIN的操作);
HBase中支持的数据类型,byte[],底层存储数据的结构都是byte[];
主要用来存储结构化和半结构化的松散数据;
结构化、半结构化和非结构化区别:
结构化:数据结构字段含义确定,清晰,典型的如数据库中的表结构。
半结构化:具有一定结构,但语义不够确定,典型的如 HTML 网页,有些字段是确定的(title), 有些不确定(table);
非结构化:杂乱无章的数据,很难按照一个概念去进行抽取,无规律性;
与Hadoop一样,HBase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力;
HBase中表的特点:
大:一个表可以有几十亿行,上百万列;
面向列:面向列族的存储和权限控制,列簇的独立检索;
稀疏:对于为空的列,并不占据存储空间,因此表可以设计的非常稀疏;
无模式:每行都有一个可排序的主键和任意多的列;
HBase中常见名词:
Row Key 类似于myql的主键,唯一,标识一行数据,可以是任意字符串最大(64kb);
ColumnFamily 列族,一个列族下边可以有很多列;
TimesTamp 时间戳,一般自动赋值,也可以手动赋值,非常重要,避免数据版本冲突,最新的数据排在最前面;
HBase 存储特点:
每个Column Family存储在HDFS上的一个单独的文件中;
Row Key和Version Number在每个Column Family中均有一份;
空值不会被保存;
HBase为每个值维护了多级索引,即Row Key、Column Family、Column Name、TimeStamp等;
HBase 物理存储:
Table中的所有行都按照Row Key的字典序排列;
Table在行的方向上分割为多个Region;
Region按大小分割的,每个表开始只有一个Region,随着数据的增多,region会不断的增大;
当增大到一个阈值时,Region就会等分成两个新的Region,之后会有越来越多的Region;
Region是HBase中分布式存储和负载均衡的最小单元;
不同的Region分布到不同的RegionServer上;
Region虽然是分布式存储的最小单元,但并不是存储的最小单元;
(Region由一个或者多个Store组成,每个Store保存一个Column Family;
每个Store又由一个memStore和0至多个StoreFile组成,
memStore存储在内存中,StoreFile存储在HDFS上。)
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: 管理master为其分配的region;
Region Server维护Region,处理对这些Region的IO请求;
Region Server负责和底层HDFS的交互,存储数据到HDFS;
负责region变大以后的拆分,负责storefile的合并,master给的指令;
HDFS: HDFS为Hbase提供最终的底层数据存储服务;
同时为HBase提供高可用(Hlog存储在HDFS)的支持;
提供元数据和表数据的底层分布式存储服务,数据多副本,保证的高可靠和高可用。
1Zookeeper的作用:
HBase依赖Zookeeper;
默认情况下,HBase管理Zookeeper实例,比如启动或者停止Zookeeper;
Master与Region Servers启动时会向Zookeeper中注册;
Zookeeper的引入使得Master不再是单点故障;
容错性
HBase容错:
Zookeeper重新选择一个新的Master;
无Master的过程中,数据读取仍照常运行;
无Master的过程中,Region切分、负载均衡等无法进行;
RegionServer容错:
定时向Zookeeper汇报心跳,如果一旦一段时间内未出现心跳,
Master将该RegionServer上的Region重新分配到其他RegionServer上;
失效服务器上“预写”日志(HLOG)由主服务器进行分割并派送给新的RegionServer;
Zookeeper容错:
Zookeeper是一个可靠的服务,一般配置三到五个实例。
Region寻址
Client请求ZooKeeper获取.META.所在的RegionServer的地址。
Client请求.META.所在的RegionServer获取访问数据所在的RegionServer地址,client会将.META.的相关信息cache下来,以便下一次快速访问。
Client请求数据所在的RegionServer,获取所需要的数据。