本文主要是從hbase應用程式設計與開發的角度,總結幾種常用的效能優化方法。有關hbase系統配置級別的優化,可參考:**ken wu同學的部落格。
下面是本文總結的第二部分內容:寫表操作相關的優化方法。
建立多個htable客戶端用於寫操作,提高寫資料的吞吐量,乙個例子:
static通過呼叫htable.setautoflush(false)方法可以將htable寫客戶端的自動flush關閉,這樣可以批量寫入資料到hbase,而不是有一條put就執行一次更新,只有當put填滿客戶端寫快取時,才實際向hbase服務端發起寫請求。預設情況下auto flush是開啟的。final configuration conf = hbaseconfiguration.create();
static
final string table_log_name = 「user_log」;
wtablelog = new htable[tablen];
for (int i = 0; i < tablen; i++)
通過呼叫htable.setwritebuffersize(writebuffersize)方法可以設定htable客戶端的寫buffer大小,如果新設定的buffer小於當前寫buffer中的資料時,buffer將會被flush到服務端。其中,writebuffersize的單位是byte位元組數,可以根據實際寫入資料量的多少來設定該值。
在hbae中,客戶端向集群中的regionserver提交資料時(put/delete操作),首先會先寫wal(write ahead log)日誌(即hlog,乙個regionserver上的所有region共享乙個hlog),只有當wal日誌寫成功後,再接著寫memstore,然後客戶端被通知提交資料成功;如果寫wal日誌失敗,客戶端則被通知提交失敗。這樣做的好處是可以做到regionserver宕機後的資料恢復。
因此,對於相對不太重要的資料,可以在put/delete操作時,通過呼叫put.setwritetowal(false)或delete.setwritetowal(false)函式,放棄寫wal日誌,從而提高資料寫入的效能。
值得注意的是:謹慎選擇關閉wal日誌,因為這樣的話,一旦regionserver宕機,put/delete的資料將會無法根據wal日誌進行恢復。
通過呼叫htable.put(put)方法可以將乙個指定的row key記錄寫入hbase,同樣hbase提供了另乙個方法:通過呼叫htable.put(list)方法可以將指定的row key列表,批量寫入多行記錄,這樣做的好處是批量執行,只需要一次網路i/o開銷,這對於對資料實時性要求高,網路傳輸rtt高的情景下可能帶來明顯的效能提公升。
在客戶端開啟多個htable寫執行緒,每個寫執行緒負責乙個htable物件的flush操作,這樣結合定時flush和寫buffer(writebuffersize),可以既保證在資料量小的時候,資料可以在較短時間內被flush(如1秒內),同時又保證在資料量大的時候,寫buffer一滿就及時進行flush。下面給個具體的例子:
for (int i = 0; i < threadn; i++) catch (interruptedexception e)synchronized (wtablelog[i]) catch (ioexception e) }}
} };
th.setdaemon(true);
th.start();
}
HBase效能優化方法總結(二) 寫表操作
本文主要是從hbase應用程式設計與開發的角度,總結幾種常用的效能優化方法。有關hbase系統配置級別的優化,可參考 ken wu同學的部落格 下面是本文總結的第二部分內容 寫表操作相關的優化方法。2.寫表操作 2.1 多htable併發寫 建立多個htable客戶端用於寫操作,提高寫資料的吞吐量,...
HBase效能優化方法總結(二) 寫表操作
本文主要是從hbase應用程式設計與開發的角度,總結幾種常用的效能優化方法。有關hbase系統配置級別的優化,可參考 ken wu同學的部落格。建立多個htable客戶端用於寫操作,提高寫資料的吞吐量,乙個例子 static final configuration conf hbaseconfigu...
HBase效能優化方法總結(二) 寫表操作
本文主要是從hbase應用程式設計與開發的角度,總結幾種常用的效能優化方法。有關hbase系統配置級別的優化,可參考 ken wu同學的部落格。建立多個htable客戶端用於寫操作,提高寫資料的吞吐量,乙個例子 static final configuration conf hbaseconfigu...