首页 > 其他分享 >BufferedMutator hbase

BufferedMutator hbase

时间:2024-09-05 10:03:04浏览次数:9  
标签:BufferedMutator 创建 写入 Bytes toBytes hbase HBase

BufferedMutator hbase

如何实现 BufferedMutator hbase

介绍

在使用 HBase 进行数据存储时,我们常常需要进行批量写入操作。为了提高写入性能和减少网络开销,HBase 提供了 BufferedMutator 接口。BufferedMutator 可以将写入操作缓冲起来,并按照一定的条件(如缓冲区大小、写入时间间隔)进行批量写入。

本文将介绍如何使用 Java 进行 HBase 的 BufferedMutator 操作。

BufferedMutator 流程

首先,让我们来了解一下使用 BufferedMutator 的整个流程。下表将详细列出每个步骤以及需要执行的操作。

步骤 操作
1. 创建连接 创建 HBase 连接和 HBaseAdmin 实例
2. 创建表 创建 HBase 表
3. 创建 BufferedMutator 创建 BufferedMutator 实例
4. 缓冲写入 将写入操作缓冲起来
5. 执行写入 执行缓冲区中的写入操作
6. 关闭连接 关闭 BufferedMutator 和 HBase 连接

接下来,我们将详细介绍每个步骤的具体操作。

创建连接

首先,我们需要创建一个 HBase 的连接,并创建 HBaseAdmin 实例来管理 HBase。

Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "localhost"); // 设置 ZooKeeper 地址

Connection connection = ConnectionFactory.createConnection(conf); // 创建 HBase 连接
Admin admin = connection.getAdmin(); // 创建 HBaseAdmin 实例

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

创建表

在使用 BufferedMutator 进行写入操作之前,我们需要先创建一个 HBase 表。

TableName tableName = TableName.valueOf("myTable"); // 表名

HTableDescriptor tableDesc = new HTableDescriptor(tableName); // 创建表描述符

HColumnDescriptor cf = new HColumnDescriptor("cf"); // 列族名
tableDesc.addFamily(cf); // 添加列族

admin.createTable(tableDesc); // 创建表

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

创建 BufferedMutator

接下来,我们需要创建一个 BufferedMutator 实例。

BufferedMutatorParams params = new BufferedMutatorParams(tableName); // 表名
params.writeBufferSize(1024 * 1024); // 设置缓冲区大小(默认为 2MB)

BufferedMutator mutator = connection.getBufferedMutator(params); // 创建 BufferedMutator 实例

  • 1.
  • 2.
  • 3.
  • 4.

缓冲写入

现在,我们可以将写入操作缓冲起来,并在适当的时候执行批量写入。

Put put1 = new Put(Bytes.toBytes("row1")); // 行键
put1.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"), Bytes.toBytes("value1")); // 列族、列名、值

Put put2 = new Put(Bytes.toBytes("row2"));
put2.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"), Bytes.toBytes("value2"));

mutator.mutate(put1); // 将写入操作添加到缓冲区
mutator.mutate(put2);

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

执行写入

当缓冲区达到一定条件(如缓冲区大小或写入时间间隔)时,HBase 会自动执行写入操作。

mutator.flush(); // 执行写入操作,将缓冲区中的数据写入 HBase
  • 1.

关闭连接

当我们不再需要 BufferedMutator 和 HBase 连接时,需要关闭它们以释放资源。

mutator.close(); // 关闭 BufferedMutator
connection.close(); // 关闭 HBase 连接
  • 1.
  • 2.

序列图

下面是使用 BufferedMutator 进行写入操作时的一个序列图:

BufferedMutatorHBaseAppBufferedMutatorHBaseApp创建连接和 HBaseAdmin 实例创建 HBase 表创建 BufferedMutator 实例缓冲写入执行写入关闭连接

关系图

下面是 BufferedMutator 的关系图:

erDiagram
    bufferedMutator ||--o| connection : 创建连接
原文链接:https://blog.51cto.com/u_16213349/9216252

标签:BufferedMutator,创建,写入,Bytes,toBytes,hbase,HBase
From: https://www.cnblogs.com/sunny3158/p/18397803

相关文章

  • HBase 源码阅读(三)创建表流程
    前言上两篇介绍了HMaster完整进程的启动,现在开始介绍一下HMaster创建表的流程1.创建表的流程下面这一部分通过ChatGPT来生成在HBase中,通过Java编写创建表的过程涉及多个组件和源码的位置。这里为您详细解析这个过程涉及的主要类和方法。API层级的调用:用户首先......
  • 基于Hbase的微博案例
    基于Hbase的微博案例需求1、发布微博内容     a.在微博内容表中添加一条数据(发布者)  b.在微博内容接收邮件箱表对所有粉丝用户添加数据(订阅者)    scan'weibo:receive-content-email',{VERSIONS=>5}2、添加关注用户  a.在微博用户关系表中添加新的好......
  • HBase学习的第六天--Hbase之过滤器
    Hbase之过滤器HBase的基本API,包括增、删、改、查等。增、删都是相对简单的操作,与传统的RDBMS相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询(Scan)。HBase不仅提供了这些简单的查询,而且提供了更加高级的过滤器(Filter)来查询。过滤器可......
  • HBase学习的第五天--HBase的·拓展-Phenix
    六、Phoenix3、phoenix表映射默认情况下,直接在hbase中创建的表,通过phoenix是查看不到的如果需要在phoenix中操作直接在hbase中创建的表,则需要在phoenix中进行表的映射。映射方式有两种:视图映射和表映射3.1、视图映射Phoenix创建的视图是只读的,所以只能用来做查询,无法通......
  • HBase学习的第五天--HBase进阶结尾和phoenix开头
    HBase进阶下一、HBase的读写流程1.1 HBase读流程Hbase读取数据的流程:1)是由客户端发起读取数据的请求,首先会与zookeeper建立连接2)从zookeeper中获取一个hbase:meta表位置信息,被哪一个regionserver所管理着hbase:meta表:hbase的元数据表,在这个表中存储了自定义表相关的元......
  • HBase学习的第四天--HBase的进阶与API
    HBase进阶与API一、Hbaseshell1、Region信息观察创建表指定命名空间在创建表的时候可以选择创建到bigdata17这个namespace中,如何实现呢?使用这种格式即可:‘命名空间名称:表名’针对default这个命名空间,在使用的时候可以省略不写create'hbase01:t1','info'此时使用li......
  • HBase学习的第三天--hbase的架构和基础命令2
    5.4 namespacehbase中没有数据库的概念,可以使用namespace来达到数据库分类别管理表的作用5.4.1 列举命名空间list_namespace5.4.2 获取命名空间描述describe_namespacedescribe_namespace'default'5.4.3 查看命名空间下的所有表list_namespace_tableslist_names......
  • 如何用OceanBase实现HBase架构升级
    随着数据量的爆炸性增长,特别是半结构化和非结构化数据的涌现,传统关系型数据库如MySQL遭遇了前所未有的挑战。这一背景下,为非结构化数据管理而生的NoSQL数据库,以及旨在解决海量数据存储难题的分布式技术应运而生,成为行业焦点。其中,Hadoop分布式系统基础架构以其创新性引领......
  • HBase学习的第二天--hbase的架构和基础命令
    接着昨天的简单了解继续学习五、hbaseshell命名描述语法help‘命名名’查看命令的使用描述help‘命令名’whoami我是谁whoamiversion返回hbase版本信息versionstatus返回hbase集群的状态信息statustable_help查看如何操作表table_helpc......
  • HBase学习的第一天--hbase的简介和搭建
    HBase架构与基础命令一、了解HBase1.1 HBase概述HBase是基于Hadoop中HDFS做存储的数据库HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,用于存储海量的结构化或者半结构化,非结构化的数据(底层是字节数组做存储的)HBase是Hadoop的生态系统之一,是建立在Hadoop......