這篇文章給大家分享的是有關Hbase如何優化的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網站建設、成都做網站、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的明水網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
HBase的LSM樹結構,緩存機制和日志機制對內存消耗非常大,所以內存越大越好。其中過濾器,數據壓縮,多條件組合掃描等場景都是cpu密集型的,所以cpu也要夠強悍選擇主流linux發行版,JVM推薦用Sun HotSpot64位的,能發揮hadoop最好的性能使用noatime掛載磁盤:一般數據庫的掛載磁盤沒有特殊要求情況下最好都設置位為noatime以提高性能關閉系統交換區: Linux內存反復交換會影響JVM性能,典型的異常就是導致zookeeper超時。所以設置vm.swappiness設置的比較低較好。由于hdfs對集群網絡吞吐有很高的要求,所以網絡必須保證低延遲高吞吐添加機架感知:機架感知是提升hadoop的寫入和讀取本地化。在core-site.xml中配置topology.script.file.name根據網絡上很多成熟引用驗證比較優秀的垃圾回收器搭配組合CMS+ParNewa. 設置scan緩存:scan的時候setCaching來設置緩存大小b. 確定所需要的列:scan時候addColumn來添加所需要的列減少數據的傳輸c. 如果批量進行全表掃描請禁用塊緩存,因為全表掃描每條記錄只讀取一遍d. 優化行鍵查詢:全表scan時,如果只需要行鍵,可以使用過濾器來減少服務器返回的數據量。e. 通過HBaseTool訪問:HTable對象對于客戶端讀寫數據來說不是線程安全的,多線程時要為每個線程創建一個HBase對象。而HBaseTool鏈接線程池機制可以解決線程安全問題,同事維持一定數量的HBasef. 使用批量讀:HTable.get(List)g. 使用Coprocessor統計行數: 具體原理請看協處理器原理a. 關閉WAL日志:如果能容忍一定的數據丟失風險,則可以關閉WALb. 設置AutoFlush: 關閉此功能等put到達到緩存閥值時候才提交到服務器c. 預創建Region: 預先創建region來避免寫入時region到達一定閥值而split影響性能,和MongoDB預分片原理一致d. 延遲WAL flush:如果開啟WAL則可以將WAL flush到磁盤的時間間隔調大一些來提高性能a. 優化分裂操作: 如果寫多讀少的場景則可以調高hbase.hregion.max.filesize來減少region分裂b. 優化合并操作:大合并非常消耗資源,且合并時候會阻塞寫操作。應該在集群不繁忙的時候進行大合并a. 設置regionserver handler數量:如果寫請求比較多則可以適當調高hbase.regionserver.handler.count的數量以提高寫吞吐。此參數調高很消耗內存,請注意。b. 調整blockCache大小:hfile.block.cache.size來設置regionserver查詢的內存設置。默認0.25指讀緩存占用堆內存25%。讀場景比較多可以適當調高。c. 設置MemStore的上下限:hbase.regionserver.global.memstore.upperLimit表示regionserver上所有region的Memstore的大小上限,超過上限會引發全局flush,這個參數主要防止regionserver內存占用過大被OOM Kill掉。讀為主的集群中,可以調小此參數,調高blockCache; 寫則相反d. 調整影響合并的文件數:hbase.hstore.blockingStoreFiles值用于控制超過此值的storefile則會出發合并。可以調大此值減少合并次數e. 調整MemStore的flush因子:當Memstore占用內存大小超過hbase.hregion.memstore.flush.size倍數時將阻塞region所有請求,出發flush,釋放內存。如果正常不會出現寫入或寫入數據量突然增大則可以保持默認,否則要調高此值。f. 調整單個文件大小:hbase.hregion.max.filesize用于定義單個hstorefile大小,超過此值則引發region文件split。 Region比較小則合并和split都很快,當然會造成集群響應時間波動。 大合并和split則造成較長時間阻塞。應該根據自己場景來定義5. 分布式協調系統zookeeper的優化:zookeeper的優化方法也很多,我就主要講hbase優化。只是說明下zookeeper優化也非常重要。a. 開啟布隆過濾器:布隆過濾器可以減少讀盤次數以降低延遲。原理和redis的hyperloglog一樣(我們以前有用此功能對用戶數量進行估算)b. 調整列族塊大小:較小的塊大小可以提高隨機讀的速度,同時導致塊索引變大。c. 設置in memory屬性:對于經常訪問的列族可以設置in memory,但是要考慮消耗內存的問題d. 調整列族最大版本數量:數量大占用磁盤空間,且導致集群變大。根據自己應用場景來選擇。像我們做畫像由于要統計用戶場景變化,所以版本數量有根據自己需求設置e. 設置TTL屬性:超過TTL的列將自動刪除。這個也根據自己場景選擇。我們做用戶畫像時會將某些用戶行為超過時間的就認為沒有必要在進行存儲分析了,所以可以設置TTL來自動刪除7. 關閉mapreduce的預測執行功能:若使用mapreduce來訪問hbase集群應該關閉,否則有可能導致hbase客戶端鏈接數陡增影響集群運行8. 修改負載均衡執行周期:當集群寫入頻繁時,可以調小,否則可以調大。感謝各位的閱讀!關于“Hbase如何優化”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
當前標題:Hbase如何優化
文章分享:
http://www.xueling.net.cn/article/jhjish.html