时间:2020-07-06来源:www.pcxitongcheng.com作者:电脑系统城
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的条件。引用前辈的链接吧,已经总结的很不错了。
2023-03-15
Navicat远程连接MongoDB最全实现方法以及报错解决2023-03-15
MongoDB的启动方法详细总结2023-03-11
详解分库分表后非分片键如何查询GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组,下面这篇文章主要给大家介绍了关于高版本Mysql使用group by分组报错的解决方案,文中通过实例代码介绍的非常详细,需要的朋友可以参考下...
2023-03-06