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

相關文章
相關標籤/搜索