Menu
HBASE使用指南RowKey定义,数据在客户端的组装
HBASE使用指南,RowKey定义,数据在客户端的组装,数据路由处理,HBASE作为hadoop大数据平台数据存储引擎其数据存储分发,数据结构比较复杂,本文将详细介绍HBASE的详细使用

一、示例数据
  1. HBase可选接口介绍

  2. 表服务接口介绍

  3. 介绍几种写数据的模式

  4. 如何构建Put对象(包含RowKey定义以及列定义)

  5. 数据路由

  6. Client侧的分组打包

  7. Client发RPC请求到RegionServer

  8. 安全访问控制

  9. RegionServer侧处理:Region分发

  10. Region内部处理:写WAL

  11. Region内部处理:写MemStore

    二、HABSE基础内容
    HBase项目概况(搜索引擎热度/社区开发活跃度)

    HBase数据模型(RowKey,稀疏矩阵,Region,Column Family,KeyValue)
    基于HBase的数据模型,介绍了HBase的适合场景(以实体/事件为中心的简单结构的数据)
    介绍了HBase与HDFS的关系,集群关键角色以及部署建议
    写数据前的准备工作:建立连接,建表
    三、HBASE实例数据

    (上篇文章已经提及,这里再复制一次的原因,一是为了让下文内容更容易理解,二是个别字段名称做了调整)

    给出一份我们日常都可以接触到的数据样例,先简单给出示例数据的字段定义:

    一条数据的HBase之旅,简明HBase入门教程-Write全流程

    示例数据字段定义

    本文力求简洁,仅给出了最简单的几个字段定义。如下是”虚构”的样例数据:

    一条数据的HBase之旅,简明HBase入门教程-Write全流程

    示例数据

    在本文大部分内容中所涉及的一条数据,是上面加粗的最后一行"Mobile1""13400006666"这行记录。在下面的流程图中,我们使用下面这样一个红色小图标来表示该数据所在的位置:

    一条数据的HBase之旅,简明HBase入门教程-Write全流程

    数据位置标记

    可选接口

    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 异步连接中的表服务接口定义

    异步连接AsyncConnection获取AsyncTable实例的接口默认实现:

    一条数据的HBase之旅,简明HBase入门教程-Write全流程

    Create AsyncTable

    同步连接ClusterConnection的实现类ConnectionImplementation中获取Table实例的接口实现:

    一条数据的HBase之旅,简明HBase入门教程-Write全流程

    Create Table

    写数据的几种方式

    • Single Put

      单条记录单条记录的随机put操作。Single Put所对应的接口定义如下:

      在AsyncTable接口中的定义:

      CompletableFuture put(Put put);

      在Table接口中的定义:

      void put(Put put) throws IOException;
    • Batch Put

      汇聚了几十条甚至是几百上千条记录之后的小批次随机put操作。

      Batch Put只是本文对该类型操作的称法,实际的接口名称如下所示:

      在AsyncTable接口中的定义:

      List> put(List puts);

      在Table接口中的定义:

      void put(List puts) throws IOException;
    • Bulkload

      基于MapReduce API提供的数据批量导入能力,导入数据量通常在GB级别以上,Bulkload能够绕过Java Client API直接生成HBase的底层数据文件(HFile)。