W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
如果可以,請使用批量加載工具。請參閱HBase批量加載。否則,請注意以下內(nèi)容。
默認情況下,HBase中的表最初是使用一個區(qū)域創(chuàng)建的。對于批量導入,這意味著所有客戶端都將寫入同一區(qū)域,直到它足夠大,可以拆分并在集群中分布。加速批量導入過程的一個有用模式是預(yù)先創(chuàng)建空白區(qū)域。在這方面要保守一點,因為太多的區(qū)域?qū)嶋H上會降低性能。
使用HBase API預(yù)創(chuàng)建拆分有兩種不同的方法。第一種方法是依靠默認Admin策略(在Bytes.split中實現(xiàn))......
byte[] startKey = ...; // your lowest key
byte[] endKey = ...; // your highest key
int numberOfRegions = ...; // # of regions to create
admin.createTable(table, startKey, endKey, numberOfRegions);
而使用HBase API的另一種方法是自己定義拆分...
byte[][] splits = ...; // create your own splits
admin.createTable(table, splits);
使用HBase Shell可以通過指定拆分選項來創(chuàng)建表,從而實現(xiàn)類似的效果。
# create table with specific split points
hbase>create 't1','f1',SPLITS => ['\x10\x00', '\x20\x00', '\x30\x00', '\x40\x00']
# create table with four regions based on random bytes keys
hbase>create 't2','f1', { NUMREGIONS => 4 , SPLITALGO => 'UniformSplit' }
# create table with five regions based on hex keys
create 't3','f1', { NUMREGIONS => 5, SPLITALGO => 'HexStringSplit' }
有關(guān)理解鍵空間和預(yù)創(chuàng)建區(qū)域的相關(guān)問題,請參閱RowKeys和區(qū)域分割之間的關(guān)系。有關(guān)手動預(yù)分割區(qū)域的討論,請參閱手動拆分區(qū)域決策。有關(guān)使用HBase shell預(yù)拆分表的詳細信息,請參閱使用HBase shell預(yù)分割表。
使用Write Ahead Log(WAL)的Puts的默認行為是將WAL立即寫入編輯。如果使用延遲日志刷新,則WAL編輯將保留在內(nèi)存中直到刷新周期。好處是聚合和異步WAL- 寫入,但潛在的缺點是,如果RegionServer發(fā)生故障,那么尚未刷新的編輯將丟失。然而,這比完全不使用具有Puts的WAL更安全。
可以通過HTableDescriptor在表上配置延遲日志刷新。hbase.regionserver.optionallogflushinterval的默認值為1000毫秒。
經(jīng)常請求禁用WAL以提高Puts的性能。這僅適用于批量加載,因為它會在區(qū)域服務(wù)器崩潰時通過刪除WAL的保護來使您的數(shù)據(jù)處于危險之中。在發(fā)生崩潰時可以重新運行批量加載,幾乎沒有數(shù)據(jù)丟失的風險。
注意:如果為批量加載以外的任何操作禁用WAL,則數(shù)據(jù)存在風險。
通常,最好使用WAL進行Puts,而使用批量加載技術(shù)時,加載吞吐量是一個問題。對于正常的Puts,您不太可能看到性能的改善會超過風險。要禁用WAL,請參閱禁用WAL。
除了使用writeBuffer之外,通過RegionServer分組的Put還可以減少每次writeBuffer刷新時客戶端RPC調(diào)用的數(shù)量。目前在MASTER上有一個實用程序的HTableUtil,可以這樣做,但是對于那些仍然在0.90.x或者更早的版本上的應(yīng)用程序,您可以復(fù)制它,或者實現(xiàn)您自己的版本。
從MR作業(yè)(例如,使用TableOutputFormat)向HBase表寫入大量數(shù)據(jù)時,特別是從Mapper發(fā)出Puts的地方時,跳過Reducer步驟。當使用Reducer步驟時,來自Mapper的所有輸出(Puts)將被假脫機(spooled)到磁盤,然后排序/混洗到其他很可能是非節(jié)點的Reducers。直接寫入HBase效率更高。
對于將HBase用作源和接收器的摘要作業(yè),則寫入將來自Reducer步驟(例如,匯總值然后寫出結(jié)果)。這是與上述情況不同的處理問題。
如果您的所有數(shù)據(jù)一次寫入一個區(qū)域,則重新閱讀有關(guān)處理時間序列數(shù)據(jù)的部分。
此外,如果您正在預(yù)分割區(qū)域,并且即使您的密鑰沒有單調(diào)增加,您的所有數(shù)據(jù)仍然在單個區(qū)域中清盤,請確認您的密鑰空間實際上與分離策略一起使用。區(qū)域可能出現(xiàn)“分裂”的原因有多種,但不適用于您的數(shù)據(jù)。由于HBase客戶端直接與RegionServers通信,因此可以通過RegionLocator.getRegionLocation獲取。
請參閱上文的“表創(chuàng)建:預(yù)創(chuàng)建區(qū)域”以及HBase配置。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: