<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Hbase優(yōu)化指南

          共 2735字,需瀏覽 6分鐘

           ·

          2020-11-04 00:54


          文對hbase集群進行優(yōu)化,主要涵蓋硬件和操作系統(tǒng),網(wǎng)絡(luò)通信,JVM,查詢,寫入,核心服務(wù),配置參數(shù),zookeeper,表設(shè)計等多方面。
          我們對hbase的應(yīng)用主要是用戶畫像,根據(jù)自身使用場景做一些優(yōu)化。難免有片面之處。
          一、軟硬件優(yōu)化:
          1.?配置內(nèi)存,cpu
          HBase的LSM樹結(jié)構(gòu),緩存機制和日志機制對內(nèi)存消耗非常大,所以內(nèi)存越大越好。
          其中過濾器,數(shù)據(jù)壓縮,多條件組合掃描等場景都是cpu密集型的,所以cpu也要夠強悍
          2.?操作系統(tǒng)
          選擇主流linux發(fā)行版,JVM推薦用Sun?HotSpot64位的,能發(fā)揮hadoop最好的性能
          使用noatime掛載磁盤:一般數(shù)據(jù)庫的掛載磁盤沒有特殊要求情況下最好都設(shè)置位為noatime以提高性能
          關(guān)閉系統(tǒng)交換區(qū): Linux內(nèi)存反復(fù)交換會影響JVM性能,典型的異常就是導(dǎo)致zookeeper超時。所以設(shè)置vm.swappiness設(shè)置的比較低較好。
          3.??網(wǎng)絡(luò)通信
          由于hdfs對集群網(wǎng)絡(luò)吞吐有很高的要求,所以網(wǎng)絡(luò)必須保證低延遲高吞吐
          添加機架感知:機架感知是提升hadoop的寫入和讀取本地化。在core-site.xml中配置topology.script.file.name
          4.?JVM優(yōu)化
          根據(jù)網(wǎng)絡(luò)上很多成熟引用驗證比較優(yōu)秀的垃圾回收器搭配組合CMS+ParNew
          二、進入主題:Hbase本身優(yōu)化
          1. Hbase查詢優(yōu)化:
          a. 設(shè)置scan緩存:scan的時候setCaching來設(shè)置緩存大小
          b. 確定所需要的列:scan時候addColumn來添加所需要的列減少數(shù)據(jù)的傳輸
          c.?如果批量進行全表掃描請禁用塊緩存,因為全表掃描每條記錄只讀取一遍
          d. 優(yōu)化行鍵查詢:全表scan時,如果只需要行鍵,可以使用過濾器來減少服務(wù)器返回的數(shù)據(jù)量。
          e. 通過HBaseTool訪問:HTable對象對于客戶端讀寫數(shù)據(jù)來說不是線程安全的,多線程時要為每個線程創(chuàng)建一個HBase對象。而HBaseTool鏈接線程池機制可以解決線程安全問題,同事維持一定數(shù)量的HBase
          f. 使用批量讀:HTable.get(List)
          g.?使用Coprocessor統(tǒng)計行數(shù):?具體原理請看協(xié)處理器原理
          h. 緩存查詢結(jié)果:對于查詢頻繁的應(yīng)用場景
          2. HBase寫入優(yōu)化:
          a. 關(guān)閉WAL日志:如果能容忍一定的數(shù)據(jù)丟失風(fēng)險,則可以關(guān)閉WAL
          b.?設(shè)置AutoFlush:?關(guān)閉此功能等put到達到緩存閥值時候才提交到服務(wù)器
          c.?預(yù)創(chuàng)建Region:?預(yù)先創(chuàng)建region來避免寫入時region到達一定閥值而split影響性能,和mongodb預(yù)分片原理一致
          d. 延遲WAL flush:如果開啟WAL則可以將WAL flush到磁盤的時間間隔調(diào)大一些來提高性能
          e.?使用批量寫HTable.put(List)
          3.?HBase基本核心服務(wù)優(yōu)化
          a. 優(yōu)化分裂操作:?如果寫多讀少的場景則可以調(diào)高h(yuǎn)base.hregion.max.filesize來減少region分裂
          b. 優(yōu)化合并操作:大合并非常消耗資源,且合并時候會阻塞寫操作。應(yīng)該在集群不繁忙的時候進行大合并
          4. Hbase配置參數(shù)優(yōu)化:
          a. 設(shè)置regionserver handler數(shù)量:如果寫請求比較多則可以適當(dāng)調(diào)高h(yuǎn)base.regionserver.handler.count的數(shù)量以提高寫吞吐。此參數(shù)調(diào)高很消耗內(nèi)存,請注意。
          b. 調(diào)整blockCache大小:hfile.block.cache.size來設(shè)置regionserver查詢的內(nèi)存設(shè)置。默認(rèn)0.25指讀緩存占用堆內(nèi)存25%。讀場景比較多可以適當(dāng)調(diào)高。
          c. 設(shè)置MemStore的上下限:hbase.regionserver.global.memstore.upperLimit表示regionserver上所有region的Memstore的大小上限,超過上限會引發(fā)全局flush,這個參數(shù)主要防止regionserver內(nèi)存占用過大被OOM Kill掉。
          讀為主的集群中,可以調(diào)小此參數(shù),調(diào)高blockCache;?寫則相反
          d. 調(diào)整影響合并的文件數(shù):hbase.hstore.blockingStoreFiles值用于控制超過此值的storefile則會出發(fā)合并。可以調(diào)大此值減少合并次數(shù)
          e. 調(diào)整MemStore的flush因子:當(dāng)Memstore占用內(nèi)存大小超過hbase.hregion.memstore.flush.size倍數(shù)時將阻塞region所有請求,出發(fā)flush,釋放內(nèi)存。如果正常不會出現(xiàn)寫入或?qū)懭霐?shù)據(jù)量突然增大則可以保持默認(rèn),否則要調(diào)高此值。
          f. 調(diào)整單個文件大?。篽base.hregion.max.filesize用于定義單個hstorefile大小,超過此值則引發(fā)region文件split。Region比較小則合并和split都很快,當(dāng)然會造成集群響應(yīng)時間波動。?大合并和split則造成較長時間阻塞。應(yīng)該根據(jù)自己場景來定義
          5. 分布式協(xié)調(diào)系統(tǒng)zookeeper的優(yōu)化:zookeeper的優(yōu)化方法也很多,我就主要講hbase優(yōu)化。只是說明下zookeeper優(yōu)化也非常重要。
          6.?表設(shè)計優(yōu)化
          a. 開啟布隆過濾器:布隆過濾器可以減少讀盤次數(shù)以降低延遲。原理和redis的hyperloglog一樣(我們以前有用此功能對用戶數(shù)量進行估算)
          b. 調(diào)整列族塊大?。狠^小的塊大小可以提高隨機讀的速度,同時導(dǎo)致塊索引變大。
          c. 設(shè)置in memory屬性:對于經(jīng)常訪問的列族可以設(shè)置in memory,但是要考慮消耗內(nèi)存的問題
          d. 調(diào)整列族最大版本數(shù)量:數(shù)量大占用磁盤空間,且導(dǎo)致集群變大。根據(jù)自己應(yīng)用場景來選擇。像我們做畫像由于要統(tǒng)計用戶場景變化,所以版本數(shù)量有根據(jù)自己需求設(shè)置
          e. 設(shè)置TTL屬性:超過TTL的列將自動刪除。這個也根據(jù)自己場景選擇。我們做用戶畫像時會將某些用戶行為超過時間的就認(rèn)為沒有必要在進行存儲分析了,所以可以設(shè)置TTL來自動刪除
          7. 關(guān)閉mapreduce的預(yù)測執(zhí)行功能:若使用mapreduce來訪問hbase集群應(yīng)該關(guān)閉,否則有可能導(dǎo)致hbase客戶端鏈接數(shù)陡增影響集群運行
          8. 修改負(fù)載均衡執(zhí)行周期:當(dāng)集群寫入頻繁時,可以調(diào)小,否則可以調(diào)大。

          --end--


          掃描下方二維碼
          添加好友,備注【交流
          可私聊交流,也可進資源豐富學(xué)習(xí)群
          瀏覽 34
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  就要撸在线视频 | 六月丁香五月婷婷 | 欧美激情亚洲五码 | 91在线无码精品秘 入口色 | 肏屄综合网 |