如果将上篇内容理解为一个冗长的"铺垫",那么,从本文开始,剧情才开始正式展开。本文基于提供的样例数据,介绍了写数据的接口,RowKey定义,数据在客户端的组装,数据路由,打包分发,以及RegionServer侧将数据写入到Region中的全部流程。
NoSQL漫谈
本文整体思路
前文内容回顾
示例数据
HBase可选接口介绍
表服务接口介绍
介绍几种写数据的模式
如何构建Put对象(包含RowKey定义以及列定义)
数据路由
Client侧的分组打包
Client发RPC请求到RegionServer
安全访问控制
RegionServer侧处理:Region分发
Region内部处理:写WAL
Region内部处理:写MemStore
为了保证"故事"的完整性,导致本文篇幅过长,非常抱歉,读者可以按需跳过不感兴趣的内容。
前文回顾
上篇文章《一条数据的HBase之旅,简明HBase入门教程-开篇》主要介绍了如下内容:
HBase项目概况(搜索引擎热度/社区开发活跃度)
HBase数据模型(RowKey,稀疏矩阵,Region,Column Family,KeyValue)
基于HBase的数据模型,介绍了HBase的适合场景(以实体/事件为中心的简单结构的数据)
介绍了HBase与HDFS的关系,集群关键角色以及部署建议
写数据前的准备工作:建立连接,建表
示例数据
(上篇文章已经提及,这里再复制一次的原因,一是为了让下文内容更容易理解,二是个别字段名称做了调整)
给出一份我们日常都可以接触到的数据样例,先简单给出示例数据的字段定义:
示例数据字段定义
本文力求简洁,仅给出了最简单的几个字段定义。如下是”虚构”的样例数据:
示例数据
在本文大部分内容中所涉及的一条数据,是上面加粗的最后一行"Mobile1"为"13400006666"这行记录。在下面的流程图中,我们使用下面这样一个红色小图标来表示该数据所在的位置:
数据位置标记
可选接口
HBase中提供了如下几种主要的接口:
Java Client API
HBase的基础API,应用最为广泛。
HBase Shell
基于Shell的命令行操作接口,基于Java Client API实现。
Restful API
Rest Server侧基于Java Client API实现。
Thrift API
Thrift Server侧基于Java Client API实现。
MapReduce Based Batch Manipulation API
基于MapReduce的批量数据读写API。
除了上述主要的API,HBase还提供了基于Spark的批量操作接口以及C++ Client接口,但这两个特性都被规划在了3.0版本中,当前尚在开发中。
无论是HBase Shell/Restful API还是Thrift API,都是基于Java Client API实现的。因此,接下来关于流程的介绍,都是基于Java Client API的调用流程展开的。
关于表服务接口的抽象
同步连接与异步连接,分别提供了不同的表服务接口抽象:
Table 同步连接中的表服务接口定义
AsyncTable 异步连接中的表服务接口定义