1. 程式人生 > >Hbase hbase-site.xml引數 效能調優

Hbase hbase-site.xml引數 效能調優

1.配置優化:

1.zookeeper.session.timeout

預設值: 3min(180000ms)
說明: RegionServer與Zookeeper間的連線超時時間。當超時時間到後,ReigonServer會被Zookeeper從RS叢集清單中移除,HMaster收到移除通知後,會對這臺server負責的regions重新balance,讓其他存活的RegionServer接管.
調優:

這個timeout決定了RegionServer是否能夠及時的failover。設定成1分鐘或更低,可以減少因等待超時而被延長的failover時間。

不過需要注意的是,對於一些Online應用,RegionServer從宕機到恢復時間本身就很短的(網路閃斷,crash等故障,運維可快速介入),如果調低timeout時間,反而會得不償失。因為當ReigonServer被正式從RS叢集中移除時,HMaster就開始做balance了 (讓其他RS根據故障機器記錄的WAL日誌進行恢復)。當故障的RS在人工介入恢復後,這個balance動作是毫無意義的,反而會使負載不均勻,給RS 帶來更多負擔。特別是那些固定分配regions的場景。

2. hbase.regionserver.handler.count

預設值: 10

說明: RegionServer的請求處理IO執行緒數。

調優:
這個引數的調優與記憶體息息相關。
較少的IO執行緒,適用於處理單次請求記憶體消耗較高的Big PUT場景(大容量單詞PUT或設定了較大cache的scan,均屬於Big PUT)或RegionServer的記憶體比較緊張的場景。
較多的IO執行緒,適用於單詞請求記憶體消耗低,TPS要求非常高的場景。設定該值的時候,以監控記憶體為主要參考。
如果server的region數量很少,大量的請求都落在一個region上,因快速充滿menstore觸發flush導致的讀寫鎖會影響全域性TPS,不是IO執行緒數越高越好。
壓測時,開啟Enabling RPC-level logging ,可以同時監控每次請求的記憶體消耗和GC的狀況,最後通過多次壓測結果來合理調節IO執行緒數。
這裡是一個案例

Hadoop and HBase Optimization for Read Intensive Search Applications ,作者在SSD的機器上設定IO執行緒數為100,僅供參考。

3.hbase.hregion.max.filesize

預設值: 256M

說明: 在當前ReigonServer上單個Reigon的最大儲存空間,單個Region超過該值時,這個Region會被自動split成更小的region。

調優:

小region對split和compaction友好,因為拆分region或compact小region裡的storefile速度很快,記憶體佔用低。缺點是split和compaction會很頻繁。

特別是數量較多的小region不停地split, compaction,會導致叢集響應時間波動很大,region數量太多不僅給管理上帶來麻煩,甚至會引發一些Hbase的bug。

一般512以下的都算小region。

大region,則不太適合經常split和compaction,因為做一次compact和split會產生較長時間的停頓,對應用的讀寫效能衝擊非常大。此外,大region意味著較大的storefile,compaction時對記憶體也是一個挑戰。

當然,大region也有其用武之地。如果你的應用場景中,某個時間點的訪問量較低,那麼在此時做compact和split,既能順利完成split和compaction,又能保證絕大多數時間平穩的讀寫效能。

既然split和compaction如此影響效能,有沒有辦法去掉?

compaction是無法避免的,split倒是可以從自動調整為手動。

只要通過將這個引數值調大到某個很難達到的值,比如100G,就可以間接禁用自動split(RegionServer不會對未到達100G的region做split)。

再配合RegionSplitter這個工具,在需要split時,手動split。

手動split在靈活性和穩定性上比起自動split要高很多,相反,管理成本增加不多,比較推薦online實時系統使用。

記憶體方面,小region在設定memstore的大小值上比較靈活,大region則過大過小都不行,過大會導致flush時app的IO wait增高,過小則因store file過多影響讀效能。

4.hbse.regionserver.global.memstore.upperLimit/LowerLimit

預設值: 0.4/0.35

upperlimit說明:
hbase.hregion.memstore.flush.size 這個引數的作用是 當單個memstore達到指定值時,flush該memstore。但是,一臺ReigonServer可能有成百上千個memstore,每個 memstore也許未達到flush.size,jvm的heap就不夠用了。該引數就是為了限制memstores佔用的總記憶體。

當ReigonServer內所有的memstore所佔用的記憶體總和達到heap的40%時,HBase會強制block所有的更新並flush這些memstore以釋放所有memstore佔用的記憶體。

lowerLimit說明:
同upperLimit,只不過當全域性memstore的記憶體達到35%時,它不會flush所有的memstore,它會找一些記憶體佔用較大的 memstore,做個別flush,當然更新還是會被block。lowerLimit算是一個在全域性flush導致效能暴跌前的補救措施。為什麼說是效能暴跌?可以想象一下,如果memstore需要在一段較長的時間內做全量flush,且這段時間內無法接受任何讀寫請求,對HBase叢集的效能影響是很大的。

調優:

這是一個Heap記憶體保護引數,預設值已經能適用大多數場景。它的調整一般是為了配合某些專屬優化,比如讀密集型應用,將讀快取開大,降低該值,騰出更多記憶體給其他模組使用。

這個引數會給使用者帶來什麼影響?

比如,10G記憶體,100個region,每個memstore 64M,假設每個region只有一個memstore,那麼當100個memstore平均佔用到50%左右時,就會達到lowerLimit的限制。假設此時,其他memstore同樣有很多的寫請求進來。在那些大的region未flush完,就可能又超過了upperlimit,則所有 region都會被block,開始觸發全域性flush。

不過,除了你的記憶體非常小或你的應用場景裡大多數都是讀,我覺得不需要去調這個引數。

5.hfile.block.cache.size

預設值: 0.2

說明: storefile的讀快取佔用Heap的大小百分比,0.2表示20%。該值直接影響資料讀的效能。

調優:

當然是越大越好,如果讀比寫多,開到0.4-0.5也沒問題。如果讀寫較均衡,0.3左右。如果寫比讀多,果斷預設吧。設定這個值的時候,你同時要參考 hbase.regionserver.global.memstore.upperLimit(沒錯,就是上面第4個) ,該值是memstore佔heap的最大百分比,兩個引數一個影響讀,一個影響寫。如果兩值加起來超過80-90%,會有OOM的風險謹慎設定

6.hbase.hstore.blockingStoreFiles

預設值: 7

說明: 在compaction時,如果一個Store(Coulmn Family)內有超過7個storefile需要合併,則block所有的寫請求,進行flush,限制storefile數量增長過快。

調優:

block寫請求會影響當前region的效能,將值設為單個region可以支撐的最大store file數量會是個不錯的選擇,即允許comapction時,memstore繼續生成storefile。最大storefile數量可通過 region size/memstore size來計算。如果你將region size設為無限大,那麼你需要預估一個region可能產生的最大storefile數。

7.hbase.hregion.memstore.block.multiplier

預設值: 2

說明: 當一個region裡的memstore超過單個memstore.size兩倍的大小時,block該region的所有請求,進行 flush,釋放記憶體。雖然我們設定了memstore的總大小,比如64M,但想象一下,在最後63.9M的時候,我Put了一個100M的資料,此時 memstore的大小會瞬間暴漲到超過預期的memstore.size。這個引數的作用是當memstore的大小增至超過 memstore.size時,block所有請求,遏制風險進一步擴大。

調優:

這個引數的預設值還是比較靠譜的。如果你預估你的正常應用場景(不包括異常)不會出現突發寫或寫的量可控,那麼保持預設值即可。如果正常情況下,你的寫請求量就會經常暴長到正常的幾倍,那麼你應該調大這個倍數並調整其他引數值,比如hfile.block.cache.sizehbase.regionserver.global.memstore.upperLimit/lowerLimit,以預留更多記憶體,防止HBase server OOM。

8.其他:

  • 啟用LZO壓縮:LZO對比HBase預設的GZip,前者效能較高,後者壓縮比較高,具體見 Using LZO Compression. 對於想提高Hbase效能的開發者,採用LZO是比較好的選擇。對於在乎儲存空間的開發者,建議保持預設。
  • 不要在一張表裡定義太多的Column Family。Hbase目前不能良好的處理超過包含2-3個CF的表。因為某個CF在flush發生時,它鄰近的CF也會因關聯效應被觸發flush,最終導致系統產生更多IO。
  • 避免 CMS concurrent mode failure
    HBase使用CMS GC。預設觸發GC的時機是當年老代記憶體達到90%的時候,這個百分比由 -XX:CMSInitiatingOccupancyFraction=N 這個引數來設定。concurrent mode failed發生在這樣一個場景:

    當年老代記憶體達到90%的時候,CMS開始進行併發垃圾收集,於此同時,新生代還在迅速不斷地晉升物件到年老代。當年老代CMS還未完成併發標記時,年老代滿了,悲劇就發生了。CMS因為沒記憶體可用不得不暫停mark,並觸發一次全jvm的stop the world(掛起所有執行緒),然後採用單執行緒拷貝方式清理所有垃圾物件。這個過程會非常漫長。為了避免出現concurrent mode failed,我們應該讓GC在未到90%時,就觸發。

    通過設定 -XX:CMSInitiatingOccupancyFraction=N

    這個百分比, 可以簡單的這麼計算。如果你的 hfile.block.cache.size 和 hbase.regionserver.global.memstore.upperLimit 加起來有60%(預設),那麼你可以設定 70-80,一般高10%左右差不多。

9.Hbase 客戶端優化

  • AutoFlush 將HTable的setAutoFlush設為false,可以支援客戶端批量更新。即當Put填滿客戶端flush快取時,才傳送到服務端。預設是true。
  • Scan Caching :scanner一次快取多少資料來scan(從服務端一次抓多少資料回來scan)。預設是1,一次只取1條。
  • Scan Attribute Selection : scan時建議指定需要的Column Family,減少通訊量,否則scan操作預設會返回整個row的所有資料(所有Coulmn Family)。
  • Close ResultScanners : 通過scan取完資料後,記得要關閉ResultScanner,否則RegionServer可能會出現問題(對應的Server資源無法釋放)。
  • Optimal Loading of Row Keys : 當你scan一張表的時候,返回結果只需要row key(不需要CF, qualifier,values,timestaps)時,你可以在scan例項中新增一個filterList,並設定 MUST_PASS_ALL操作,filterList中add FirstKeyOnlyFilter或KeyOnlyFilter。這樣可以減少網路通訊量。
  • Turn off WAL on Puts : 當Put某些非重要資料時,你可以設定writeToWAL(false),來進一步提高寫效能。writeToWAL(false)會在Put時放棄寫WAL log。風險是,當RegionServer宕機時,可能你剛才Put的那些資料會丟失,且無法恢復。
  • 啟用Bloom Filter : Bloom Filter 通過空間換時間,提高讀操作效能。

相關推薦

Hbase hbase-site.xml引數 效能調

1.配置優化: 1.zookeeper.session.timeout 預設值: 3min(180000ms) 說明: RegionServer與Zookeeper間的連線超時時間。當超時時間到後,ReigonServer會被Zookeepe

大資料效能調HBase的RowKey設計

1 概述 HBase是一個分散式的、面向列的資料庫,它和一般關係型資料庫的最大區別是:HBase很適合於儲存非結構化的資料,還有就是它基於列的而不是基於行的模式。 既然HBase是採用KeyValue的列儲存,那Rowkey就是KeyValue的Key了,表示唯

Dubbo效能調引數及原理

Dubbo呼叫模型 常用效能調優引數 原始碼及原理分析 threads FixedThreadPool.java public Executor getExecutor(URL url) { Stri

Yarn 記憶體分配管理機制及相關引數配置(yarn效能調)

一、相關配置情況關於Yarn記憶體分配與管理,主要涉及到了ResourceManage、ApplicationMatser、NodeManager這幾個概念,相關的優化也要緊緊圍繞著這幾方面來開展。這裡還有一個Container的概念,現在可以先把它理解為執行map/redu

JVM效能調的6大步驟,及關鍵調引數詳解

JVM效能調優的6大步驟,及關鍵調優引數詳解 JVM效能調優方法和步驟 1.監控GC的狀態 2.生成堆的dump檔案 3.分析dump檔案 4.分析結果,判斷是否需要優化 5.調整GC型別和記憶體分配 6.不斷分析

HBase資料塊編碼壓縮機制調及客戶端API 新版本最佳實踐-OLAP商業環境實戰

版權宣告:本套技術專欄是作者(秦凱新)平時工作的總結和昇華,通過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和叢集環境容量規劃等內容,請持續關注本套部落格。QQ郵箱地址:[email protected],如有任何技術交流,可隨時聯絡。 網上的Hbase調優資料參差不齊,實在是不

linux下修改核心引數進行Tcp效能調 -- 高併發

前言: Tcp/ip協議對網路程式設計的重要性,進行過網路開發的人員都知道,我們所編寫的網路程式除了硬體,結構等限制,通過修改Tcp/ip核心引數也能得到很大的效能提升, 下面就列舉一

Tomcat併發數優化,修改service.xml效能調 增加最大併發連線數

可以在控制檯的啟動資訊裡看見,預設狀態下沒有被開啟nio配置,啟動時的資訊,如下: 2010-2-1 12:59:40 org.apache.coyote.http11.Http11Protocol init 資訊: Initializing Coyote HTTP/1.1 on http-8080 2010

HBase最佳實踐-CMS GC調

HBase發展到當下,對其進行的各種優化從未停止,而GC優化更是其中的重中之重。從0.94版本提出MemStoreLAB策略、Memstore Chuck Pool策略對寫快取Memstore進行優化開始,到0.96版本提出BucketCache以及堆外記憶體方案對讀快取BlockCache進行優化,再到後

Tomcat修改service.xml效能調 增加最大併發連線數

 詳細配置: <Connector executor="tomcatThreadPool"                port="80" protocol="HTTP/1.1"                 connectionTimeout="20000"

Android系統的效能調引數介紹

在Android系統中有一個類似Windows系統登錄檔的檔案build.prop。這個檔案內定義了系統初始(或永久)的一些引數屬性、功能的開放等。通過調整/增加引數可以達到較調系統性能偏重點和附加功能開啟的作用。在Android 2.2、2.3、4.0中雖然每一版都有自己

5.JVM三大效能調引數:-Xms -Xmx -Xss

1.-Xss是對每個執行緒stack大小的調整。直接影響對方法的呼叫次數 測試結果: 測試程式碼: package com.dt.spark.jvm.basics; public class HelloStackOverFlow {private static int c

JVM效能調2:JVM效能調引數整理

關閉新生代收集擔保。 在一次理想化的minor gc中,Eden和First Survivor中的活躍物件會被複制到Second Survivor。然而,Second Survivor不一定能容納下所有從E和F區copy過來的活躍物件。為了確保minor gc能夠順利完成,GC需要在年老代中額外保留一塊

第5課:實戰演示JVM三大效能調引數:-Xms -Xmx -Xss

第3課: 1、應用程式是多執行緒的,多執行緒共享全域性共享記憶體空間,每個執行緒也有自己的記憶體空間, 執行緒與全域性共享記憶體空間怎麼互動呢? 執行緒如果要使用全域性共享變數,就將全域性共享變數拷貝過去,拷貝到執行緒的記憶體空間,交給執行緒的程式碼去處理,而不是直接去操

HBase最佳實踐-CMS GC調(從gc本身參數調

部分 實踐 lock 讀寫 cms ofo mst 更多 操作 同誌們,此部分,重要的不能再重要了1、HBase發展到當下,對其進行的各種優化從未停止,而GC優化更是其中的重中之重。hbase gc調優方向從0.94版本提出MemStoreLAB策略、Memstore Ch

mysql學習筆記之--引數設定(效能調

MySQL效能調優之引數設定 命令 1.show processlist;  //檢視mysql的連線資訊 2.sel

1.效能調概覽

介紹 Optimization Overview 優化概述 Optimizing SQL Statements 優化SQL語句 Optimization and Indexes 優化和索引 Optimizing Database Structure 優化資料庫結

深入理解Java虛擬機器總結一虛擬機器效能監控工具與效能調(三)

深入理解Java虛擬機器總結一虛擬機器效能監控工具與效能調優(三) JDK的命令列工具 JDK的視覺化工具 效能調優 JDK的命令列工具 主要有以下幾種: jps (Java Process Status Tool): 虛擬機器程序

【Big Data 每日一題】Spark開發效能調總結

1. 分配資源調優 Spark效能調優的王道就是分配資源,即增加和分配更多的資源對效能速度的提升是顯而易見的,基本上,在一定範圍之內,增加資源與效能的提升是成正比的,當公司資源有限,能分配的資源達到頂峰之後,那麼才去考慮做其他的調優 如何分配及分配哪些資源 在生產環境中,提交spark作

nkv客戶端效能調

此文已由作者張洪簫授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 問題描述 隨著考拉業務的增長和規模的擴大,很多的應用都開始重度依賴快取服務,也就是杭研的nkv。但是在使用過程中,發現服務端壓力並不是特別大的情況下,客戶端的rt卻很高,導致應用在到達一定併發的情況下,服務的質量下降的