zoukankan      html  css  js  c++  java
  • HBase写入异常RejectedExecutionException

    HBase在大数据量并发写入时,写一段时间后HBase监控界面出现告警,写入程序日志里频繁出现异常java.util.concurrent.RejectedExecutionException:

    从异常堆栈信息可以看出是flush请求时被拒绝引起的,核对一下flush的代码。

    我们单位办公电脑在内网里,不便粘贴代码和异常信息,这里手动写几行代码大体说明情况。

     1 Configuration conf = HBaseConfiguration.create();
     2 Connection connection = ConnectionFactory.createConnection(conf);
     3 Table table = null;
     4 try (Admin admin = connection.getAdmin()) {
     5   TableName tableName = TableName.valueOf("test:table");
     6   table = connection.getTable(tableName);
     7   table.put(puts);//List<Put> puts
     8   admin.flush(tableName);
     9 } finally {
    10   if (table != null) {
    11     table.close();
    12   }
    13 }

    代码是每接受到一批List<Put> puts先进行写入然后立马flush。在大数据量的情况下导致flush请求太过频繁。HBase服务端一般是配置1-2个线程来处理flush请求,所以处理不完请求。

    这里的flush太频繁是不合理的,把flush机制修改为了写入一定数据量或超过一定时间没有后才触发,问题就解决了。

    这里顺便学习一下HBase触发flush的条件。引用前辈的链接吧,已经总结的很不错了。https://www.iteblog.com/archives/2497.html

  • 相关阅读:
    小程序云开发(一)
    原来你是这样的"layui"啊
    记个笔记(项目中遇到的关于input的一些操作)
    vue的学习之路 vue-cli与axios
    小程序 上传图片
    文字滚动
    css 隐藏滚动条
    linux基础
    接口测试
    整理python循环,列表,字典笔记
  • 原文地址:https://www.cnblogs.com/yudizhao/p/13255633.html
Copyright © 2011-2022 走看看