HBase客户端的批量写缓存BufferedMutator

这篇具有很好参考价值的文章主要介绍了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 提供了自动管理缓冲区和写入操作的功能,可以提高插入数据的性能。文章来源地址https://www.toymoban.com/news/detail-687730.html

单次一张表批量写入

        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "zookeeperHost");
        final BufferedMutator.ExceptionListener listener = new BufferedMutator.ExceptionListener() {
            @Override
            public 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 block
            e1.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的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git客户端的使用

    分布式版本控制工具。 具有中央服务器仓库和本地仓库。 客户端下载:GitHub Desktop | Simple collaboration from your desktop 左上角: File - New repository 本地的两个仓库: 查看当前仓库的路径并打开: 注意: 路径①是用户可以手动操作文件的工作目录;路径②存放该仓库所有的操作、

    2024年02月06日
    浏览(43)
  • 配置 Git 客户端的代理设置

    如果有用户名密码按照下面命令配置 取消代理 查看配置列表 打开配置界面如下   参考链接 https://m.php.cn/faq/506377.html

    2024年02月13日
    浏览(39)
  • Elasticsearch .NET 客户端的演变

    作者:Florian Bernd 在 .NET 世界中,与 Elasticsearch 的集成长期以来一直由 NEST 库提供支持,该库作为开发人员与 Elasticsearch 强大的搜索和分析功能进行交互的强大接口。NEST 是出于对 Elasticsearch 本地 .NET 客户端的需求而诞生的,由于其丰富的功能集和无缝的集成能力,很快就受到

    2024年04月26日
    浏览(30)
  • Transport Client 客户端的使用

    官方文档:TransportClient 这里描述操作elasticsearch采用TransportClient这种方式,官方明确表示在ES 7.0版本中将弃用TransportClient客户端,且在8.0版本中完全移除它. properties配置 1)通过配置类 2)使用@PostConstruct注解 如果整合其他客户端时使用这种方式 3)测试代码的时候使用这种 参

    2024年02月09日
    浏览(45)
  • ios客户端学习笔记(七):iOS客户端的UI设计

    iOS客户端的UI设计是指在iOS操作系统上开发应用程序时所涉及的用户界面设计,包括应用程序的布局、颜色、字体、图标等元素的设计。良好的UI设计应该能够提高用户体验,使用户能够轻松地使用应用程序。 在iOS客户端的UI设计中,需要考虑以下几个方面: 应用程序布局应

    2023年04月26日
    浏览(48)
  • 如何获取浏览器客户端的唯一标识

    在 Web 应用程序中, 可以使用浏览器的 window.navigator.userAgent 属性来获取浏览器的用户代理字符串。这个字符串包含有关浏览器类型和版本的信息, 但是它不是唯一的, 因为不同的浏览器可能具有相同的用户代理字符串。 要获取更加唯一的标识符, 可以使用浏览器提供的 Web 技术

    2024年02月13日
    浏览(52)
  • JavaWeb 获取客户端的真实IP地址

    通常我们在JavaWeb中获取客户端IP地址只需要使用 request.getRemoteAddr(); 方法即可 如果前端使用了Nginx等反向代理的话,我们使用 request.getRemoteAddr(); 方法获取到的IP地址就是 127.0.0.1 因为经过代理以后,在客户端和服务器之间增加了中间层,因此服务器无法直接拿到客户端的 IP 但

    2024年02月15日
    浏览(51)
  • QT学习笔记:TCP客户端的实现

    QT一般用来做客户端,我这里就简单讲一下怎么开发基于QT的TCP客户端。 1、用QtCreator创建项目   2、界面 3、.pro文件添加network  4、mainwindow.h 5、mainwindow.cpp 6、main.cpp 7、执行结果 (1)界面如下 (2)连接tcp服务端 参考: (1)Qt6教程之三(13) TCP/IP通讯与socket编程

    2024年02月12日
    浏览(35)
  • nginx配置获取客户端的真实ip

    场景描述: 访问路径: A机器 - B机器的 -C虚拟机 : A机器为客户端用户,本地地址为 192.168.0.110 B机器为服务端反向代理服务器 本地地址为192.168.0.128 –(192.168.56.1) C机器为B主机安装的linux虚拟机,并安装了nginx ,本地ip为**(192.168.56.10)** 从侧面反映了反向代理的好处,直

    2024年02月05日
    浏览(44)
  • SVN客户端的下载和安装(图文超详细)

    目录 0.准备工作 1.SVN客户端安装包安装 2.安装语言包 博主安装环境:windows  x86 SVN客户端下载地址:下载 ·SVN (tortoisesvn.net) 【下载地址中需下载 符合电脑版本的安装包 ,以及 语言包 】  注:下载两个包后,先运行安装包,安装完成后,再运行语言包 0)双击这个包 1)打开

    2024年02月07日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包