当前位置: 首页 > news >正文

HBase客户端的批量写缓存BufferedMutator

HBase数据刷写 之前提到过这个方法,那么BufferedMutator是什么?又应该如何实现呢?

写缓存

HBase的每一个put操作实际上是一个RPC操作,将客户端的数据传输到服务器再返回结果,这只适用于小数据量的操作,如果数据量多的话,每次put都需要建立一次RPC的连接(TCP连接),而建立连接传输数据是需要时间的,因此减少RPC的调用可以提高数据传输的效率,减少建立连接的时间和IO消耗。

HBase的客户端API提供了写缓存区,put的数据一开始放在缓存区内,当数量到达指定的容量或者用户强制提交是才将数据一次性提交到HBase的服务器。这个缓冲区可以通过调用 HTable.setAutoFlush(false) 来开启。而新版HBbase的API中使用了BufferedMutator替换了老版的缓冲区,通过BufferedMutator对象提交的数据自动存放在缓冲区中。

BufferedMutator

通过获取 BufferedMutator 对象,并调用 mutator.mutate(List<Mutation> mutations) 方法来进行批量插入数据。可以使用 Put 类型的对象列表作为 mutations 参数进行插入。BufferedMutator 提供了自动管理缓冲区和写入操作的功能,可以提高插入数据的性能。

单次一张表批量写入

        Configuration conf = HBaseConfiguration.create();conf.set("hbase.zookeeper.quorum", "zookeeperHost");final BufferedMutator.ExceptionListener listener = new BufferedMutator.ExceptionListener() {@Overridepublic void onException(RetriesExhaustedWithDetailsException e, BufferedMutator mutator) {for (int i = 0; i < e.getNumExceptions(); i++) {LOG.info("Failed to sent put " + e.getRow(i) + ".");}}};BufferedMutatorParams params = new BufferedMutatorParams(TABLE).listener(listener);params.writeBufferSize(123123L);try {Connection conn = ConnectionFactory.createConnection(conf);BufferedMutator mutator = conn.getBufferedMutator(params);Put p = new Put(Bytes.toBytes("someRow"));p.addColumn(FAMILY, Bytes.toBytes("someQualifier"), Bytes.toBytes("some value"));mutator.mutate(p);mutator.close();conn.close();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}

单次多张表批量写入

private static Map<String, BufferedMutator> tableConnectionMgr = new ConcurrentHashMap<>();
private BufferedMutator getTableConnection(String tableName) throws IOException {if (tableConnectionMgr.get(tableName) != null) {return tableConnectionMgr.get(tableName);}Connection connection = ConnectionFactory.createConnection(config);BufferedMutator table = connection.getBufferedMutator(TableName.valueOf(tableName));tableConnectionMgr.put(tableName, table);log.info("hbase table: {} connect established!", tableName);return tableConnectionMgr.get(tableName);
}

相关文章:

HBase客户端的批量写缓存BufferedMutator

HBase数据刷写 之前提到过这个方法&#xff0c;那么BufferedMutator是什么&#xff1f;又应该如何实现呢&#xff1f; 写缓存 HBase的每一个put操作实际上是一个RPC操作&#xff0c;将客户端的数据传输到服务器再返回结果&#xff0c;这只适用于小数据量的操作&#xff0c;如…...

从多个角度详解map转为list

从多个角度详解map转为list 更新&#xff1a;2023-05-20 19:24 在Java编程中&#xff0c;我们经常使用map存储键值对数据&#xff0c;而有时我们需要把map转为list&#xff0c;本文将从多个方面对map转list做详细的阐述。 一、map转为list的基础方法 Java提供了多种方法将m…...

PHP用CURL发送Content-type为application/json的POST请求方法

HELLO 各位伙伴&#xff0c;最近一直在做项目&#xff0c;没有及时更新。望请见谅。 今天&#xff0c;给大家讲一下php请求第三方接口的时候遇到的问题&#xff0c;大家都知道&#xff0c;在请求第三方接口的时候&#xff0c;会要求我们用post还是get来传参 一般我们传参的时候…...

【程序猿书籍大放送:第二期】《强化学习:原理与Python实战》

&#x1f339;欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 爱书不爱输的程序猿&#xff1a;送书第二期 一、搞懂大模型的智能基因&#xff0c;RLHF系统设计关键问答1.RLHF是什么&#xff1f;2.RLHF适用于哪些任务&#xff1f;3…...

SV-6002Y 网络对讲求助模块,带3W功放输出和一路30W功放输出

SV-6002Y 网络对讲求助模块&#xff0c;带3W功放输出和一路30W功放输出 SV-6002Y是我司一款求助对讲模块&#xff0c;具有10/100M以太网接口&#xff0c;其接收网络的音频数据&#xff0c;实时解码播放&#xff0c;还可配置麦克风输入和扬声器输出。SV-6002Y可实现对讲、广播、…...

Nginx详解 二:配置文件部分

文章目录 1. Nginx 配置文件1.1 主配置文件1.2 子配置文件1.3 全局配置1.3.1 修改启动的进程数1.3.2 cpu和work进程绑定&#xff08;nginx调优&#xff09;1.3.3 修改PID路径1.3.4 nginx进程的优先级&#xff08;work进程的优先级&#xff09;1.3.5 调试work进程打开的文件的个…...

SMC_TRAFO_GantryCutter2 (FB) 带刀片旋向龙门

裁布机&#xff1a;刀片按XY走向&#xff0c;偏转刀片角度。 pi&#xff1a;目标位置矢量&#xff08;x&#xff0c;y&#xff09;&#xff0c;插值器的输出 v&#xff1a;当前路径切线的矢量&#xff0c;插值器的输出 dOffsetX&#xff1a; x轴的附加偏移 dOffsetY&#xf…...

『PyQt5-Qt Designer篇』| 07 Qt Designer中栅格布局和表单布局的使用

07 Qt Designer中栅格布局和表格布局的使用 1 栅格布局1.1 按钮布局1.2 栅格布局中拖入控件1.3 保存并调用2 表单布局2.1 标签+输入控件2.2 保存并调用3 组合水平和垂直布局1 栅格布局 1.1 按钮布局 拖入几个按钮,如图: 选中所有按钮,右键点击布局-栅格布局: 之后可以看到…...

无涯教程-分类算法 - 多项式逻辑回归模型函数

Logistic逻辑回归的另一种有用形式是多项式Lo​​gistic回归&#xff0c;其中目标或因变量可以具有3种或更多可能的unordered类型&#xff0c;即没有定量意义的类型。 用Python实现 现在&#xff0c;无涯教程将在Python中实现上述多项式逻辑回归的概念。为此&#xff0c;使用…...

【C++】开源:Box2D动力学库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Box2D动力学库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c…...

Druid连接池和Apache的DBUtils

背景 jdbc连接数据库存在着大批量用户进行短时间的SQL连接操作的 需求&#xff0c;而普通用户连接后直接断开与数据库的连接&#xff0c;下次连接需要重新建立桥梁&#xff0c;再频繁访问时。这是很消耗性能的一个操作&#xff0c;因此诞生了数据库连接池技术。提前创建 一些连…...

怎样快速选择正确的可视化图表?

数据可视化的图表类型十分丰富&#xff0c;好的图表可以有效、清晰地呈现数据的信息。对于用户而言&#xff0c;选择正确的图表是十分关键的&#xff0c;不仅可以达到“一图胜千言”的效果&#xff0c;而且会直接影响分析的结果。 用户选择正确的数据可视化图表前&#xff0c;…...

6路液体水位检测芯片VK36W6D SOP16 抗电源干扰及手机干扰特性好

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK36W6D 封装形式&#xff1a;SOP16/QFN16L 详细资料&#xff1a;13.5/5.474/4.703 概述 VK36W6D具有6个触摸检测通道&#xff0c;可用来检测6个点的水位。该芯片具有较高的集成度&#xff0c;仅需极少的外部组件便…...

【设备树笔记整理6】中断系统中的设备树

1 中断概念的引入与处理流程 1.1 中断处理框图 1.2 中断程序的使用 主函数() while(1) {do_routine_task(); }中断处理函数() {handle_interrupt_task(); }如何调用中断处理函数&#xff1f; 1.3 ARM对异常(中断)的处理过程 &#xff08;1&#xff09;初始化 ① 设置中断…...

微信小程序下载后端返回的文件流

downtest() {let temp {"title": ["排名", "车号", "车队", "车手", "领航", "赛段成绩", "距首车成绩", "距前车差距", "发车时间", "冲刺时间", "赛段…...

Autoware.universe部署04:universe传感器ROS2驱动

文章目录 一、激光雷达驱动二、IMU驱动2.1 上位机配置4.2 IMU校准4.3 安装ROS驱动 三、CAN驱动四、相机驱动4.1 安装驱动4.2 修改相机参数 五、GNSS驱动 本文介绍了 Autoware.universe 各个传感器ROS2驱动&#xff0c;本系列其他文章&#xff1a; Autoware.universe部署01&…...

Spring boot如何工作

越来越方便了 java技术生态发展近25年&#xff0c;框架也越来越方便使用了&#xff0c;简直so easy&#xff01;&#xff01;&#xff01;我就以Spring衍生出的Spring boot做演示&#xff0c;Spring boot会让你开发应用更快速。 快速启动spring boot 请参照官网 Spring | Quic…...

代码随想录打卡—day45—【DP】— 8.29 完全背包应用

1 70. 爬楼梯&#xff08;完全背包版&#xff09; 70. 爬楼梯 完全背包装满的选法排列的套路&#xff0c;AC代码&#xff1a; class Solution { public:/*完全背包的思路:1 2是两个物体 可以无限取*/int dp[50]; // 能爬到第i楼的选法的排列数/*dp[j] dp[j - i];dp[0] 1fo…...

2023.8.28日论文阅读

文章目录 NestFuse: An Infrared and Visible Image Fusion Architecture based on Nest Connection and Spatial/Channel Attention Models(2020的论文)本文方法 LRRNet: A Novel Representation Learning Guided Fusion Network for Infrared and Visible Images本文方法学习…...

HAproxy(四十七)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 简介 1.2 核心功能 1.3 关键特性 1.4 应用场景 二、安装 1.内核配置 2.编译安装 ​3. 建立配置文件 4. 添加为系统服务 5. 添加3和5运行级别下自启动…...

一键生成黑苹果EFI配置:OpCore Simplify新手完全指南

一键生成黑苹果EFI配置&#xff1a;OpCore Simplify新手完全指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore Simplify是一款革命性的黑苹果…...

告别OpenCV DNN!在Windows上用C++和ONNX Runtime部署PyTorch模型(附完整代码)

告别OpenCV DNN&#xff1a;用ONNX Runtime实现C高效模型部署实战 如果你正在Windows平台上用C部署PyTorch模型&#xff0c;大概率已经体验过OpenCV DNN模块的"龟速"推理。当项目从实验室走向生产环境时&#xff0c;性能瓶颈往往就藏在这些看似不起眼的环节里。今天…...

基于构件的软件工程(CBSE)全面解析:从理论到实践

1 CBSE的历史背景与核心理念1.1 起源与发展历程基于构件的软件工程&#xff08;Component-Based Software Engineering&#xff0c;CBSE&#xff09;是20世纪90年代兴起的一种主流软件开发方法论。其核心思想源于软件复用的理念&#xff0c;即通过集成预制的独立功能单元&#…...

【Altium】Draftsman 中钻表信息显示不全

1、 问题场景如下图所示在 PCB 内放置钻孔表信息完整&#xff0c;但是在 Draftsman 中添加钻孔表后发现钻孔信息被折叠&#xff0c;显示不全的现象。这里以【Hole Size】参数举例。图 12、软硬件环境1&#xff09;、软件版本&#xff1a;Altium Designer 24.5.22&#xff09;、…...

5个步骤掌握B站推流码获取与OBS直播系统搭建:从入门到专业的完整指南

5个步骤掌握B站推流码获取与OBS直播系统搭建&#xff1a;从入门到专业的完整指南 【免费下载链接】bilibili_live_stream_code 用于在准备直播时获取第三方推流码&#xff0c;以便可以绕开哔哩哔哩直播姬&#xff0c;直接在如OBS等软件中进行直播&#xff0c;软件同时提供定义直…...

重磅|微软打响第一枪:爆改HR体系,让组织像AI一样思考

微软打响第一枪&#xff1a;爆改HR体系&#xff0c;让组织像AI一样思考3月25日晚&#xff0c;一封来自微软首席人力资源官&#xff08;CPO&#xff09;Amy Coleman 的内部备忘录&#xff0c;把微软庞大的HR架构推倒重来。 这不仅宣告了几位见证微软文化转型期的资深高管&#x…...

AI Agent开发实战路线图:从入门到企业级应用的4阶段进阶指南

第一阶段&#xff5c;概念入门&#xff1a;从认知到代码 理解 AI Agent 的工作原理与架构。推荐课程&#xff1a;Microsoft《AI Agents for Beginners》、Hugging Face《AI Agents》。核心学习点&#xff1a;感知、决策、行动、反馈循环机制。第二阶段&#xff5c;核心技术&…...

Mamba模型实战:如何用S6替代Transformer处理长文本(附代码示例)

Mamba模型实战&#xff1a;如何用S6替代Transformer处理长文本&#xff08;附代码示例&#xff09; 在自然语言处理领域&#xff0c;Transformer架构因其强大的注意力机制而长期占据主导地位。然而&#xff0c;当面对长文本处理任务时&#xff0c;Transformer的二次方计算复杂度…...

图像降噪避坑指南:为什么你的sym4小波处理效果不明显?

图像降噪避坑指南&#xff1a;为什么你的sym4小波处理效果不明显&#xff1f; 当你在深夜调试代码&#xff0c;反复对比sym4小波处理前后的图像时&#xff0c;屏幕上的像素似乎在对你冷笑——降噪效果远不如论文里展示的那般惊艳。这不是个例&#xff0c;在计算机视觉开发者社群…...

Zotero插件市场:变革学术研究工具管理的创新解决方案

Zotero插件市场&#xff1a;变革学术研究工具管理的创新解决方案 【免费下载链接】zotero-addons Zotero add-on to list and install add-ons in Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons 在数字化学术研究的进程中&#xff0c;文献管理工具…...