HBase写入异常RejectedExecutionException

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

从异常堆栈信息能够看出是flush请求时被拒绝引发的,核对一下flush的代码。java

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

 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.htmlspa

相关文章
相关标签/搜索