Hbase--put、BufferedMutator、get

本文介绍了Hbase中数据的写入方式,包括单条put、批量put和使用BufferedMutator,强调了BufferedMutator的高效性。同时详细阐述了HTable的写入原理,以及如何通过BufferedMutatorParams进行配置。在数据获取方面,讨论了Get用法,包括单行get、多行get以及Result实例的使用,展示了如何从Hbase中高效获取数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hbase写入数据的几种方式

我们总结一下hbase几种写入常见的方式,以及涉及的应用场景,另外再总结一下其中涉及到的一些原理知识。hbase一般的插入过程都使用HTable对象,将数据封装在Put对象中,Put在new创建的时候需要传入rowkey,并将列族,列名,列值add进去。然后HTable调用put方法,通过rpc请求提交到Regionserver端。写入的方式可以分为以下几种

  1. 单条put
  2. 批量put
  3. bluckload

HTable介绍

要向hbase中写入就免不了要和HTable打交道,HTable负责向一张hbase表中读或者写数据,HTable对象是非线程安全的。多线程使用时需要注意,创建HTable对象时需要指定表名参数,HTable内部有一个LinkedList<Row>的队列writeAsyncBuffer ,负责对写入到hbase的数据在客户端缓存,开启缓存使用参数  table.setAutoFlushTo(false);  默认情况不开启每次put一条数据时,htable对象就会调用flushCommits方法向regserver中提交,开启缓存则会比较队列的大小,如果大于某个值则调用flushCommits,这个值默认是2m,可以通过在hbase-site.xml中设置参数 "hbase.client.write.buffer"来调整,默认是2097152, 在关闭htable连接时,会隐式的调用flushCommits方法,保证数据完全提交。提交时会根据rowkey定位该put应该提交到哪个reginserver,然后每个regionserver一组action发送出去。

注意:有了BufferedMutator之后,BufferedMutator替换了HTable的setAutoFlush(false)的作用。可以从连接的实例中获取BufferedMutator的实例。在使用完成后需要调用的close()方法关闭连接。对BufferedMutator进行配置需要通过BufferedMutatorParams完成。BufferedMutatorParams要比Htable更搞效,所以心在我们在向hbase插入数据时尽量使用BufferedMutatorParams。

单条put

最简单基础的写入hbase,一般应用场景是线上业务运行时,记录单条插入,如报文记录,处理记录,写入后htable对象即释放。每次提交就是一次rpc请求。

table.setAutoFlushTo(true);
/**
   * 插入一条记录
   * rowkey 为rk001 列族为f1
   * 插入两列  c1列   值为001
   *          c2列   值为002
   *
   */
  public void insertPut(){
      //Configuration 加载hbase的配置信息,HBaseConfiguration.create()是先new Configuration然后调用addResource方法将
      //hbase-site.xml配置文件加载进来
      Configuration conf = HBaseConfiguration.create();
      try {
          table = new HTable(conf,tableName);
          table.setAutoFlushTo(true);//不显示设置则默认是true																														
          String rowkey  = "rk001";
          Put  put = new Put(rowkey.getBytes());
          put.add(cf.getBytes(),"c1".getBytes(),"001".getBytes());
          put.add(cf.getBytes(),"c2".getBytes(),"002".getBytes());
          table.put(put);
          table.close();//关闭hbase连接
 } catch (IOException e) {
          e.printStackTrace();
      }
  }
 
 

多条写入

有了单条的put自然就想到这种方式其实是低效的,每次只能提交一条记录,有没有上面方法可以一次提交多条记录呢?减少请求次数, 最简单的方式使用List<Put>,这种方式操

### 解决 HBase 配置文件权限不足的问题 在 Linux 系统上操作 HBase 的配置文件时,如果遇到权限不足的问题,可以通过调整文件的权限或切换到具有适当权限的用户来解决问题。 #### 调整文件权限 可以使用 `chmod` 和 `chown` 命令更改文件的权限和所属用户组。以下是具体方法: 1. **查看当前文件权限** 使用以下命令检查 `hbase-site.xml` 文件的当前权限: ```bash ls -l conf/hbase-site.xml ``` 2. **修改文件权限** 如果发现权限不足,可以增加读写权限给特定用户或用户组: ```bash chmod 644 conf/hbase-site.xml ``` 这条命令将设置文件权限为 `-rw-r--r--`,即文件拥有者可读写,其他用户只可读[^1]。 3. **更改文件所有者** 将文件的所有权更改为运行 HBase 的用户(例如 `hbase` 用户): ```bash chown hbase:hbase conf/hbase-site.xml ``` 此命令会将文件的所有者和组都设为 `hbase` 用户[^5]。 #### 切换至正确用户 另一种解决方案是切换到有权访问该文件的用户账户。假设 HBase 是由 `hbase` 用户安装并运行,则可以执行以下命令切换用户: ```bash su - hbase ``` 之后再尝试编辑 `conf/hbase-site.xml` 文件即可正常操作。 #### 编辑配置文件 完成上述步骤后,可以直接通过文本编辑器打开并修改 `hbase-site.xml` 文件的内容。例如: ```bash vi conf/hbase-site.xml ``` 或者使用其他编辑工具如 nano 或 gedit 完成编辑工作。 #### 启动验证 当成功保存修改后的配置文件后,记得重新启动 HBase 服务使改动生效: ```bash ./bin/start-hbase.sh ``` 同样,在结束测试前也可以利用脚本安全地停止服务: ```bash ./bin/stop-hbase.sh ``` 以上过程确保了整个环境的一致性和稳定性[^4]。 --- ### 注意事项 - 在生产环境中应谨慎授予过高权限以免引发安全隐患。 - 推荐始终以最小化原则分配必要的访问级别而非完全开放模式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值