HBase:
HBase是一个建立在HDFS之上的分布式,提供高可靠性,高性能,列存储,可伸缩,实时读写NoSQL的数据库系统。
优点:
(1)大:一个表可以有上十亿行,上百万列。
(2)面向列:面向列(簇)的存储和权限控制,列(簇)独立检索。
(3)稀疏:对于为空(null)的列并不占用内存空间,因此,表可以设计的非常稀疏。
(4)多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳。
(5)数据类型单一:HBase中数据类型都是字符串。
(6)无模式:每一行都有一个可以排序的rowKey和任意多的列,列可以根据需要动态增加,同一张表的不同行可以有截然不同的列。
(7)高可靠性:WAL预写式日志(write-ahead log)机制保证了数据写入时不会因集群异常而导致写入数据丢失,Replication机制保证了在集群出现严重的问题时,数据不会发生丢失或损坏。而且Hbase底层使用HDFS,HDFS本身也有备份。
(8)高性能:底层的LSM数据结构和Rowkey有序排列等架构上的独特设计,使得Hbase具有非常高的写入性能。region切分,主键索引和缓存机制使得Hbase在海量数据下具备一定的随机读取性能,该性能针对Rowkey的查询能到达到毫秒级别。
缺点:
(1):虽然HBase是一个非关系型数据库但是它不支持SQL语句。
(2):单一RowKey固有的局限性决定了它不可能有效地支持多条件查询
Hmaster
- 管理HRegionServer,实现其负载均衡。
- 管理和分配HRegion,比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上。
- 实现DDL操作(Data Definition Language,namespace和table的增删改,column familiy的增删改等)。
- 管理namespace和table的元数据(实际存储在HDFS上)。
- 权限控制(ACL)。
RegionServer
- 存放和管理(拆分与合并)本地HRegion。
- 读写HDFS,管理Table中的数据。
- Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后)。
ZooKeeper
- 存放整个 HBase集群的元数据以及集群的状态信息。
- 实现HMaster主从节点的failover。