HBase学习笔记——客户端API


介绍HBase的Java API,参考:HBase读写的几种方式(一)java篇 和 Hbase--put、BufferedMutator、get

1.写HBase

1.单行put

HTable非线程安全,切较为低效

 

2.客户端的写缓冲区和List<Put>

一个put操作都是一个RPC操作,只适合小数据量的操作,HBase的API配置了客户端的写缓冲区,缓冲区负责收集put宝座,然后调用RPC操作一次性将put送往服务器。

默认情况下,客户端缓冲区是禁用的,可以通过将自动刷写(autoflush=false)来激活缓冲区,如果autoflush=true),用户每次调用put方法是都会触发刷写。当激活缓冲区后,单行put不会产生RPC调用,因为存储的Put实例保存在客户端进程的内存中。只有flushCommits方法调用后才会将所有的修改传送到远程服务器。

默认的写缓冲区大小为2MB(2097152字节),可以在客户端中配置,也可以在habse-site.xml中的hbase.client.write.buffer 配置一个较大的预设值,比如20MB

显式刷写,即用户调用 flushCommits方法

隐式刷写,即会在调用put方法和setWriteBufferSize方法后比较超出缓冲区大小后调用 flushCommits方法

 

3.使用BufferedMutator

org.apache.hadoop.hbase.client.BufferedMutator主要用来对HBase的单个表进行操作。它和Put类的作用差不多,但是主要用来实现批量的异步写操作。

使用BufferedMutator进行批量异步插入的方式,效率更高,参考:HBase新版本Java APIHbase实战--数据读写解析

1
2
3
4
5
6
7
8
9
10
11
12
import org.apache.hadoop.hbase.client.BufferedMutator;
/** Helper function to create a table and return the rows that it created. */
 
private static void writeData(String tableId, int numRows) throws Exception {
  Connection connection = admin.getConnection();
  TableName tableName = TableName.valueOf(tableId);
  BufferedMutator mutator = connection.getBufferedMutator(tableName);
  List<Mutation> mutations = makeTableData(numRows);
  mutator.mutate(mutations);
  mutator.flush();
  mutator.close();
}

 

posted @   tonglin0325  阅读(284)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2017-01-13 ubuntu安装mongo数据库
2017-01-13 Python爬虫——使用Cookie登录新浪微博
点击右上角即可分享
微信分享提示