一条数据的HBase之旅,简明HBase入门教程1:开篇
华为云上的NoSQL数据库服务CloudTable,基于Apache HBase,提供全托管式集群服务,集成了时序数据库OpenTSDB与时空数据库GeoMesa,在TB/PB级别的海量数据背景下,可提供ms级查询以及千万级TPS,点我了解详情。
这是HBase入门系列的第1篇文章,主要介绍HBase当前的项目活跃度以及搜索引擎热度信息,以及一些概况信息,内容基于HBase 2.0 beta2版本。本系列文章既适用于HBase新手,也适用于已有一定经验的HBase开发人员。
一些常见的HBase新手问题
什么样的数据适合用HBase来存储?
既然HBase也是一个数据库,能否用它将现有系统中昂贵的Oracle替换掉?
存放于HBase中的数据记录,为何不直接存放于HDFS之上?
能否直接使用HBase来存储文件数据?
Region(HBase中的数据分片)迁移后,数据是否也会被迁移?
为何基于Spark/Hive分析HBase数据时性能较差?
开篇
用惯了Oracle/MySQL的同学们,心目中的数据表,应该是长成这样的:
这种表结构规整,每一行都有固定的列构成,因此,非常适合结构化数据的存储。但在NoSQL领域,数据表的模样却往往换成了另外一种"画风":
行由看似"杂乱无章"的列组成,行与行之间也无须遵循一致的定义,而这种定义恰好符合半结构化数据或非结构化数据的特点。本文所要讲述的HBase,就属于该派系的一个典型代表。这些"杂乱无章"的列所构成的多行数据,被称之为一个"稀疏矩阵",而上图中的每一个"黑块块",在HBase中称之为一个KeyValue。
Apache HBase官方给出了这样的定义:
Apache HBase™ is the Hadoop database, a distributed, scalable, big data store.
即:Apache HBase是基于Hadoop构建的一个分布式的、可伸缩的海量数据存储系统。
HBase常被用来存放一些结构简单,但数据量非常大的数据(通常在TB级别以上),如历史订单记录,日志数据,监控Metris数据等等,HBase提供了简单的基于Key值的快速查询能力。
HBase在国内市场已经取得了非常广泛的应用,在搜索引擎中,也可以看出来,HBase在国内呈现出了逐年上升的势态:
从Apache HBase所关联的github项目的commits统计信息来看,也可以看出来该项目非常活跃:
(需要说明的一点:HBase中的每一次commit,都已经过社区Commiter成员严格的Review,在commit之前,一个Patch可能已经被修改了几十个版本)
令人欣喜的是,国内的开发者也积极参与到了HBase社区贡献中,而且被社区接纳了多名PMC以及Committer成员。
本文将以一条数据在HBase中的“旅程”为线索,介绍HBase的核心概念与流程,几乎每一部分都可以展开成一篇独立的长文,但本文旨在让读者能够快速的了解HBase的架构轮廓,所以很多特性/流程被被一言带过,但这些特性在社区中往往经历了漫长的开发过程。至于讲什么以及讲到什么程度,本文都做了艰难的取舍,在讲解的过程中,将会穿插解答本文开始所提出的针对初学者的一些常见问题。
本系列文章适用于HBase新手,而对于具备一定经验的HBase开发人员,相信本文也可以提供一些有价值的参考。本文内容基于HBase 2.0 beta 2版本,对比于1.0甚至是更早期的版本,2.0出现了大量变化,下面这些问题的答案与部分关键的变化相关(新手可以直接跳过这些问题):
HBase meta Region在哪里提供服务?
HBase是否可以保证单行操作的原子性?
Region中写WAL与写MemStore的顺序是怎样的?
你是否遇到过Region长时间处于RIT的状态? 你认为旧版本中Assignment Manager的主要问题是什么?
在面对Full GC问题时,你尝试做过哪些优化?
你是否深究过HBase Compaction带来的“写放大”有多严重?
HBase的RPC框架存在什么问题?
导致查询时延毛刺的原因有哪些?
本系列文章的整体行文思路如下:
介绍HBase数据模型
基于数据模型介绍HBase的适用场景
快速介绍集群关键角色以及集群部署建议
示例数据介绍
写数据流程
读数据流程
数据更新
负载均衡机制
HBase如何存储小文件数据
这些内容将会被拆成一系列文章。至于集群服务故障的处理机制,集群工具,周边生态,性能调优以及最佳实践等进阶内容,暂不放在本系列文章范畴内。
- 点赞
- 收藏
- 关注作者
评论(0)