小編給大家分享一下HBase如何調優,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于網站設計制作、成都網站制作、莫力達網絡推廣、小程序定制開發、莫力達網絡營銷、莫力達企業策劃、莫力達品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創新互聯為所有大學生創業者提供莫力達建站搭建服務,24小時服務熱線:028-86922220,官方網址:vcdvsql.cn
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如何調優”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道!
當前標題:HBase如何調優
地址分享:http://vcdvsql.cn/article38/pdessp.html
成都網站建設公司_創新互聯,為您提供用戶體驗、Google、外貿建站、搜索引擎優化、靜態網站、手機網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯