中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HBase如何調優

發布時間:2021-12-08 14:53:47 來源:億速云 閱讀:162 作者:小新 欄目:云計算

小編給大家分享一下HBase如何調優,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1. 表的設計

1.1 提前創建多個Region
默認情況下,在創建HBase表的時候會自動創建一個Region分區,當導入數據的時候,所有的HBase客戶端都向這一個Region寫數據,直到這個Region足夠大了才進行切分。一種可以加快批量寫入速度的方法是通過預先創建一些空的Regions,這樣當數據寫入HBase時,會按照Region分區情況,在集群內做數據的負載均衡


1.2 Row Key設計
HBase中row key用來檢索表中的記錄,支持以下三種方式:
(1) 通過單個RowKey訪問:即按照某個RowKey鍵值進行Get操作;
(2) 通過RowKey的Range進行Scan:即通過設置Start RowKey和End RowKey,在這個范圍內進行掃描;
(3) 全表掃描:即直接掃描整張表中所有行記錄。
在HBase中,RowKey可以是任意字符串,最大長度64KB,實際應用中一般為10~100bytes,存為byte[]字節數組,一般設計成定長的。
RowKey是按照字典序存儲,因此,設計RowKey時,要充分利用這個排序特點,將經常一起讀取的數據存儲到一塊,將最近可能會被訪問的數據放在一塊。
舉個例子:如果最近寫入HBase表中的數據是最可能被訪問的,可以考慮將時間戳作為RowKey的一部分,由于是字典序排序,所以可以使用Long.MAX_VALUE – timestamp作為RowKey,這樣能保證新寫入的數據在讀取時可以被快速命中。


1.3 Column Family設計
不要在一張表里定義太多的column family。目前Hbase并不能很好的處理超過2~3個Column family的表。因為某個Column Family在Flush的時候,它鄰近的Column Family也會因關聯效應被觸發Flush,最終導致系統產生更多的I/O。

 
1.4 In Memory設置(可選)
創建表的時候,可以通過HColumnDescriptor.setInMemory(true)將表放到RegionServer的緩存中,保證在讀取的時候被cache命中。

  
1.5 版本限制
創建表的時候,可以通過HColumnDescriptor.setMaxVersions(int maxVersions)設置表中數據的最大版本,對于一些不是特別重要的數據,可以設置setMaxVersions(1)。

  
1.6 數據生命周期限制
創建表的時候,可以通過HColumnDescriptor.setTimeToLive(int timeToLive)設置表中數據的存儲生命期,過期數據將自動被刪除,例如如果只需要存儲最近兩天的數據,那么可以設置setTimeToLive(2 * 24 * 60 * 60)。

1.7 Compact 和Split(可選)

實際應用中,如果有必要可以手動觸發Compact和split。

1.8 采用壓縮(可選)

壓縮需要根據實際業務和機器性能來衡量是否要采用犧牲CPU來換取存儲上的節約,并且能節省I/O和網絡開銷,可以使用Lzo或Snappy壓縮的方式,大致可以壓縮4~5倍。

2. 讀取

2.1 掃描緩存

在進行掃描時可以設置一次讀取多條,緩存數據,減少I/O開銷。代碼實現:

hTable.setScannerCaching(50); // 參數50表示一次性掃描50條

2.2 掃描指定列

Scan時指定需要的Column Family,可以減少網絡傳輸數據量,否則默認scan操作會返回整行所有Column Family的數據。

  

2.3 釋放資源

通過scan取完數據后,記得要關閉ResultScanner,否則RegionServer可能會出現問題(對應的Server資源無法釋放)。

  

3. 寫入優化 

3.1 寫入緩存

寫入HBase表的時候最好不要一條一條的寫,采用批量的方式,在代碼里設置:

hTable.setAutoFlush(false, false); // 不讓hbase自動刷新數據到數據庫
hTable.setWriteBufferSize(1024 * 1024 * 10);// 緩存大小10M

當緩存的數據達到10M的時候會觸發flush操作,另外當hTable.flushCommits();或hTable.close();時也會flush數據到數據庫中。而且Hbase的API中支持數據已list的方式插入。

 

4. 參數優化

4.1 連接時間

參數:zookeeper.session.timeout
RegionServer與Zookeeper間的連接超時時間,默認值:3分鐘(180000ms),我們配置:300000ms(5min)。

4.2 線程數控制

參數:hbase.regionserver.handler.count
RegionServer的請求處理IO線程數,默認值:10,我們配置:200。
 

4.3 split閾值

參數:hbase.hregion.max.filesize
單個region觸發split的大小閾值,默認值:256M,我們配置:4G。
 

4.4 開啟mslab方案

參數:hbase.hregion.memstore.mslab.enabled
減少因內存碎片導致的Full GC,提高整體性能,默認值:true。
 

4.5 掃描緩存

參數:hbase.client.scanner.caching
scanner調用next方法一次獲取的數據條數,默認值:1。
 

4.6 MemStore大小控制

參數:hbase.regionserver.global.memstore.upperLimit/lowerLimit
hbase.regionserver.global.memstore.upperLimit :防止memstore來不及flush成storefile,堆積對內存占用過大,當某region的所有memstore占用大于40%,hbase會強制block所有的更新(請求)并flush這些memstore釋放內存。
hbase.regionserver.global.memstore.lowerLimit 默認值就可以,不用調。

以上是“HBase如何調優”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節
推薦閱讀:
  1. 三、hbase--調優
  2. php調優

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锡林郭勒盟| 贺兰县| 郯城县| 惠来县| 广宁县| 宣汉县| 化州市| 宝清县| 武乡县| 商南县| 监利县| 永靖县| 确山县| 沙湾县| 朝阳市| 绵竹市| 萨嘎县| 汉阴县| 全椒县| 阳新县| 理塘县| 巩留县| 张家川| 临邑县| 绥化市| 新民市| 河北区| 甘孜| 新邵县| 九台市| 苗栗市| 高密市| 永善县| 扶余县| 青冈县| 工布江达县| 佛学| 顺昌县| 自贡市| 侯马市| 安吉县|