将批处理放入HBase表时出现RejectedExecutionException

use*_*268 4 hbase

我试图将行批量放入HBase(0.90.0)中,大小约为1000(行),我有多个生产者线程将数据写入队列,还有一个消费者线程每隔几分钟就会唤醒一次,并写入所有在队列中以批处理形式发送到HBase。但是,我收到以下异常,并且我不确定这意味着什么。

Caused by: java.util.concurrent.RejectedExecutionException
    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1760)
    at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:658)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:92)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:1135)
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏!

And*_*ltz 5

如果可以,请避免Put对HTable close()过去执行过的操作或其他操作。

通常,没有充分的理由htable.close()在代码中间进行操作,一个htable.flushCommits()就足够了。htable.close()当您的代码不再使用HBase时,请尝试保留作为完成步骤。

此Jira对该漏洞的细节进行了更深入的介绍:https : //issues.apache.org/jira/browse/HBASE-3692

因此,检查您的代码,搜索对它们的调用,close()然后将其删除,或者flushCommits()在需要时将其替换。我遇到了与您相同的问题,删除不必要的htable.close()电话足以避免此问题。