本文共 1129 字,大约阅读时间需要 3 分钟。
传统的关系型数据库无法存放海量数据,因此HBase诞生,解决海量数据存取难题。当然除了HBase,还有很多其他类型的数据库解决不同的问题。HBase的诞生参考了谷歌的这两篇论文,值得阅读:
HBase应用逻辑的基本概念有:
- 表:表有表名,其含有多个row
- row:由row key和多个column组成。行级别的数据是原子性的。
- column:储存任意二进制数据。column可以达到上百万个。数据可以有多个版本,每个版本的数据存在cell中。版本可以设置删除策略,支持数量、过期时间策略。
- column family:由多个column组成。column family只能有几十个。
HBase支持的操作有:对数据的CRUD、scan、CAS、计数器、coprocessor,还有建表、删表、增加列族、修改列族、删除列族。
- CURD:用row key去增删改查
- scan:指定row key的范围,批量取数据
- CAS:为确保一致性而提供的操作,check and set,确认版本没变过的情况下写入数据
- 计数器:支持原子性的计数器操作
- coprocessor:协处理器,客户端提交代码在服务端运行,更快的处理数据
HBase运维层面的基本概念有:
- master节点:负责协调region在各个节点中的分布,并将信息储存在zookeeper中,一个集群内可以起多个master节点,但同一时间只能有一个master掌握实权,其余都是替补。
- region server:负责处理针对region的请求。一个region server内可以包含多个region。通常10~1000个region性能最优。客户端直接与region server相连,请求直接发给它。
- region:最小负载单元,每个region包含表名、首行key、末行key。也就是说每个region负责一张表的一部分内容。如果region中数据量过多,则会进行自动拆分,分成两个region,然后迁移到别的节点。
- HFile:包含多个块,每个块中储存某个column数据的一部分。文件末尾是块的索引。服务启动时将块索引加载到内存中。HFile储存在HDFS中。
架构参考了LSM树(log-structured sort-and-merge-map)。在HBase中,写入的数据先写到write-ahead log,然后放在内存memstore中,等到内存占用达到阈值,做flush,将memstore中的内容写到HDFS成为HFile。当HFile数量较多时,做compation操作,将小文件合并成大文件。这种架构也被ElasticSearch、Cassandra、InfluxDB采用。
转载地址:http://ivyub.baihongyu.com/