fkjava

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            49 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

          hbase參數配置及優化

           

           

          接觸hbase已有半年的時間,查了很多資料,也參考了很多別人心得,也希望把自己的心得以及理解寫出來,我把配置hbase必調的幾個參數寫一下,以及它們的意義。

          zookeeper.session.timeout

          這個參數的意義是regionserverzookeeper的會話過期時間,默認是3分鐘,如果regionserver zookeeper.session.timeout這個配置的時間沒有去連zookeeper的話,zookeeper會將該regionserverzookeeper摘除,不讓該regionserver向提供服務,很多人都該值配置很大,原因是生產環境中regionserver的內存都配置很大,以擴大memstorecache的大小,提高性能,但是內存配置大了以后,regionserverjvm做一次內存大回收時,時間也會變長,很有可能這個時間超過zookeeper.session.timeout時間,導致regionserverjvm回收內存的時候,zookeeper誤以為regionserver掛掉而將regionserver摘除。但我認為該值還是不要配的過大,首先地java已支持cms方式回收內存,每次內存回收的時間不是太長,并且生產環境中,我們也不允許過長時間的服務中斷,配置大了,容易造成一個regionserver的服務真出現異常時,zookeeper不會切除該regionserver,使得很多請求失敗。

          hbase.regionserver.handler.count

          regionserver的工作線程數量,默認是10,沒有疑問,官方默認值太小,通常都調到100~200之間,提高regionserver性能。

          hbase.regionserver.lease.period

          regionserer租約時間,默認值是60s,也有點小,如果你的生產環境中,在執行一些任務時,如mapred時出現lease超時的報錯,那這個時候就需要去調大這個值了。

          hfile.block.cache.size

          regionserver cache的大小,默認是0.2,是整個堆內存的多少比例作為regionservercache,調大該值會提升查詢性能,當然也不能過大,如果你的hbase都大量的查詢,寫入不是很多的話,調到0.5也就夠了,說到這個值,有一個地方需要說明一下,如果生產環境有mapred任務去scan hbase的時候,一些要在mapred scan類中加一個scan.setCacheBlocks(false),避免由于mapred使用regionservercache都被替換,造成hbase的查詢性能明顯下降。

          hbase.hregion.memstore.flush.size

          一個regionserver的單個region memstore的大小,默認是64M,在hbase結構中,一個regionserver管理多個region,一個region對應一個hlog和多個store,一個store對應多個storefile和一個memstore,這里的hbase.hregion.memstore.flush.size意思一個region下面的所有store里面的memstore的達到多少時,開始將這些memstore flushhdfs中去,配置這個值,需要參考一下,平均每個regionserver管理的region數量,如果每臺regionsever管理的region不多的話,可以適當的調大該值,如512M時再flush。

          hbase.regionserver.global.memstore.upperLimit/hbase.regionserver.global.memstore.lowerLimit

          配置一臺regionserver所有memstore占整個堆的最大比例,默認是0.4/0.35,二個值的差異在于是做局部的flush,還是全部flush,如果你的regionserver日志中,頻發出現因為超過hbase.regionserver.global.memstore.lowerLimit而做flush的信息,我覺得有必要調小hbase.hregion.memstore.flush.size,或者適當調大這二個值,當然hbase.regionserver.global.memstore.upperLimithfile.block.cache.size的和不能大于1,到0.8我覺得已經夠大了。如果你的jvm內存回收是使用cms的話,有一個值CMSInitiatingOccupancyFraction(內存使用到時多少時,一始cms回收內存)的大小和覺得和這個有關系,略小于hbase.regionserver.global.memstore.upperLimithfile.block.cache.size的和是一個不錯的選擇。

          hbase.hstore.compactionThreshold/hbase.hregion.majorcompaction

          hbase.hstore.compactionThreshold執行compactionstore數量,默認值是3,如果需要提高查詢性能,當然是storefile的數量越小,性能越好,但是執行compaction本身有性能資源的開消,如果regionserver頻繁在compacion對性能影響也很大。hbase.hregion.majorcompaction表示majorcompaction的周期,默認是1天,majorcompaction與普通的compaction的區別是majorcompaction會清除過期的歷史版本數據,同時合并storefile,而普通的compaction只做合并,通常都是majorcompaction,調為0,然后手工定期的去執行一下majorcompaction,適當調小點compacionThreshold。

          hbase.hregion.max.filesize

          一個regionsever的最大值,默認是256M,如果數據量特別大的話,調大該值可以減少region的數量,調到2G我覺得都不為過。

          hbase配置調優太多,jvm,mslab內存管理以及hdfs append方式等等,需要太多的知識面,很多東西,我也在學習之中,先寫這么多。

               您正在看的文章來自瘋狂軟件教育中心 www.fkjava.org

               信息咨詢:Q564205990            星老師

          posted on 2012-09-03 15:14 瘋狂軟件 閱讀(2059) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 南丰县| 秭归县| 藁城市| 云梦县| 青浦区| 和田市| 潮安县| 林周县| 如皋市| 周至县| 乌拉特前旗| 博爱县| 同仁县| 抚顺县| 靖江市| 时尚| 景谷| 阿坝| 九龙县| 安岳县| 双牌县| 谷城县| 黄梅县| 威海市| 中阳县| 华坪县| 内黄县| 特克斯县| 牡丹江市| 正定县| 荥经县| 赤峰市| 当阳市| 宕昌县| 合肥市| 保靖县| 六枝特区| 霍邱县| 丹巴县| 水富县| 舟曲县|