HBase原理 | HBase Compaction介紹與參數調優

2021-03-01 大數據技術架構

我們知道,數據達到HBase服務端會寫WAL-寫Memstore,然後定期或滿足一定條件時刷寫磁碟生成一個HFile文件,隨著時間推移生成的HFile會越來越多,將會影響HBase查詢性能,同時會對HDFS造成一定影響。因此HBase會定期執行Compaction操作以合併減少HFile數量。

HBase中Compaction分為兩種。Minor Compaction稱為小合併,主要是選取一些小的、相鄰的HFile將他們合併成較大的HFile,並刪除HFile中的過期數據。Major Compaction稱為大合併,會將一個列族下的所有HFile合併成一個大的HFile,同時刪除過期數據、已刪除數據(打了Delete標記的)、版本過大的數據等三類無效數據。

1).hbase.hstore.compaction.min

默認值 3,一個列族下的HFile數量超過該值就會觸發Minor Compaction,這個參數默認值小了,一般情況下建議調大到5~10之間,注意相應調整下一個參數。(舊版本中該參數是hbase.hstore.compactionthreshold)2).hbase.hstore.compaction.max默認值 10,一次Minor Compaction最多合併的HFile文件數量,這個參數基本控制著一次壓縮即Compaction的耗時。這個參數要比上一個參數hbase.hstore.compaction.min值大,通常是其2~3倍。3).hbase.regionserver.thread.compaction.throttle

HBase RS內部設計了兩個線程池:large compactions與small compactions,用來分開處理Compaction操作,這個參數就是控制一個Compaction應該交由哪一個線程池處理,默認值2 * hbase.hstore.compaction.max * hbase.hregion.memstore.flush.size,即2*10*128M=2.5G,如果待合併文件的總大小大於該值則交給large compactions線程池處理,否則交給small compactions線程池處理。一般建議不調整或稍微調大。

4).hbase.regionserver.thread.compaction.small

默認值 1,RS中small compactions線程池的大小。一般建議調整到2~5,不建議調太大,否則可能會消費過多的服務端資源得不償失。

5).hbase.regionserver.thread.compaction.large

默認值 1,RS中large compactions線程池的大小。調整建議同上。

6).hbase.hstore.blockingStoreFiles

默認值 10,一個列族下HFile數量達到該值就會阻塞寫入,等待Compaction完成。生產環境中默認值太小了,一般建議設置大點比如100,避免出現阻塞更新的情況。

7).hbase.hregion.majorcompaction

默認值 604800000,就是7天,這是Major Compaction周期性觸發的時間間隔。因為通常Major Compaction持續時間長、資源消耗大,建議關閉HBase Major Compaction,參數設為0,並在業務低峰期手動執行。

相關焦點

  • HBase調優 | HBase Compaction參數調優
    hbase.hstore.compaction.max一次最多可以合併多少個HFile,默認為 10 限制某個列族下面選擇最多可選擇多少個文件來進行合併 注意需要滿足條件hbase.hstore.compaction.max > hbase.hstore.compaction.minhbase.hstore.compaction.max.size
  • HBase調優|HBase + G1GC 性能調優
    先傳送門一下,之前在HBaseConAsia2017分享過一個G1GC調優的PPT: http://openinx.github.io/2012/01/01/my-share/首先,對G1算法不熟悉的同學,可以仔細讀一讀Oracle的G1算法教程,教程基本交代了G1的運行原理以及和CMS本質區別,如果對算法細節感興趣,可以讀一下Garbage-First
  • 10大HBase常見運維工具整理
    HBase組件介紹HBase作為當前比較熱門和廣泛使用的NoSQL資料庫,由於本身設計架構和流程上比較複雜,對大數據經驗較少的運維人員門檻較高,本文對當前HBase上已有的工具做一些介紹以及總結。#清除HBase下的所有數據hbase clean --cleanAll使用參數如下:總結:
  • HBase的讀寫和javaAPI的使用
    一、hbase系統管理表hbase:namespace,記錄了hbase中所有namespace的信息 ,當前系統下有哪些namespace信息scan 'hbase:namespace'hbase:meta,記錄了region信息scan 'hbase:meta'二、讀寫思想client(get、scan)rowkey條件(1)由於rowkey是存儲在region
  • 關於Hbase的一些常見問題
    一、通常向HBase批量導入數據有三種常用方式1、使用HBase提供的TableOutputFormat,原理是通過一個Mapreduce作業將數據導入HBase2、還有一種方式就是使用HBase原生Client
  • Flink SQL 實戰:HBase 的結合應用
    當然,本文假設用戶有一定的 HBase 知識基礎,不會詳細去介紹 HBase 的架構和原理,本文著重介紹 HBase 和 Flink 在實際場景中的結合使用。主要分為兩種場景,第一種場景:HBase 作為維表與 Flink Kafka table 做 temporal table join 的場景;第二種場景:Flink SQL 做計算之後的結果寫到 HBase 表,供其他用戶查詢的場景。
  • HBase與mapreduce集成
    在公司中,大多數都是hbase和mapreduce共同進行業務操作,hbase多數都是讀寫操作,hbase和hadoop在內部已經封裝好了,我們要做的就是調用。常見的模式1、從hbase讀取數據將hbase的數據作為map的輸入2、將數據寫入hbase將hbase作為reduce輸出3、從hbase讀,再寫入hbase
  • Hbase命令大全
    通過help 『hbase』 命名來查看hbase shell 支持的所有命令,hbase將命令進行分組,其中ddl、dml使用較多。默認為 『summary』hbase> statushbase> status 'simple'hbase> status 'summary'hbase> status 'detailed'hbase> status 'replication'hbase> status 'replication', 'source'hbase
  • HBase實踐篇 | 為HBase的Thrift 客戶端API設計連接池
    這些參數更詳細的說明以及調優建議,可以參考阿里雲資料庫 Redis 的實踐文檔: https://help.aliyun.com/document_detail/98726.html上述內容的參考連結:https://blog.csdn.net/u_ascend/article/details/80594306https://help.aliyun.com
  • 深入 HBase 架構解析
    前文已經介紹過了HMaster的主要用於HRegion的分配和管理,DDL(Data Definition Language,既Table的新建、刪除、修改等)的實現等,既它主要有兩方面的職責:1.協調HRegionServer啟動時HRegion的分配,以及負載均衡和修復時HRegion的重新分配。
  • HBase學習之路 (四)HBase的API操作
    ;  6 import org.apache.hadoop.hbase.HColumnDescriptor;  7 import org.apache.hadoop.hbase.HTableDescriptor;  8 import org.apache.hadoop.hbase.TableName;  9 import org.apache.hadoop.hbase.client.Admin; 10
  • 如何將Hive與HBase整合聯用
    2、確保 Hive 的 lib 目錄下有 hive-hbase-handler-xxx.jar、Zookeeper jar、HBase Server jar、HBase Client jar 包。HBase表不存在CREATE EXTERNAL TABLE hive_table (key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val"
  • Hive整合HBase完整筆記(親測)
    TBLPROPERTIES("hbase.table.name"= "hbase_testcourse"); 指定HBase表名內部表創建語句如下:create tablecourse.hbase_testcourse(cname string,score int) STORED BY 'org.apache.
  • Apache HBase 出現信息洩漏漏洞 - OSCHINA - 中文開源技術交流社區
    任何連接到 HBase 集群的授權用戶都可以修改參數和看到他們本沒有權限看到的 HBase 數據信息。    setAcl /hbase world:anyone:r,sasl:hbase:cdrwa    setAcl /hbase/backup-masters sasl:hbase:cdrwa    setAcl /hbase/draining sasl:hbase:cdrwa    setAcl /hbase/flush-table-proc sasl:hbase
  • 通過Java API 像 MySQL一樣查詢HBASE
    所以本文介紹一種使用Java API構造查詢HBASE的實現思路,旨在通過程序設計統一HBASE和MySQL的處理。  本文首先簡單介紹了HBASE和關係型資料庫的差異,之後說明了HBASE查詢命令的使用,詳細給出了查詢過濾器的API,最後重點介紹了通過Java API實現的HBASE如同MySQL一樣查詢的程序實現,並對其中重要的查詢給出流程說明。
  • HBase基礎環境搭建
    遠程工具連接關閉Selinux關閉防火牆chkconfig iptables off修改主機名第一個network,修改後,將主機命名為masterhbaseNETWORKING=yes#HOSTNAME=localhost.localdomainHOSTNAME=masterhbase
  • HBase二級索引方案
    Apache Phoenix: 功能圍繞著SQL on hbase,支持和兼容多個hbase版本, 二級索引只是其中一塊功能。 二級索引的創建和管理直接有SQL語法支持,使用起來很簡便, 該項目目前社區活躍度和版本更新迭代情況都比較好。
  • HBase基礎學習之bulkload了解
    之前在學習importTSV我們準備兩份數據這兩份數據在導入hbase後,數據還是存在的,我們如果想要實現和hive中類似「剪切」的功能該怎麼辦?這種可以跨過先寫入memstore,直接將數據轉換為storefile文件。
  • 從零開始學習大數據系列(六十二)HBase Client API使用入門
    [本文字數2500字左右,閱讀需要10-15分鐘,操作需要約30分鐘]我們已經學習HBase的原理及HBase的Shell操作,但是想要基於
  • 深入淺出HBase keyValue動態讀寫流程
    帶著這個問題,我們來一起學習下客戶端是如何讀寫HBase數據的,進而幫助大家理解HBase讀寫相關原理。-ROOT-表被去掉了,同時zk中的/hbase/root-region-server也被去掉了。還直接把.META.表所在的RegionServer信息存儲到了zk中的/hbase/meta-region-server去了。再後來引入了namesapce,.META.表被更名為hbase:meta。