10大HBase常見運維工具整理

wjaning發表於2021-09-11
摘要:HBase自帶許多運維工具,為使用者提供管理、分析、修復和除錯功能。本文將列舉一些常用HBase工具,開發人員和運維人員可以參考本文內容,利用這些工具對HBase進行日常管理和運維。

HBase元件介紹

HBase作為當前比較熱門和廣泛使用的NoSQL資料庫,由於本身設計架構和流程上比較複雜,對大資料經驗較少的運維人員門檻較高,本文對當前HBase上已有的工具做一些介紹以及總結。

10大HBase常見運維工具整理

寫在前面的說明:

1) 由於HBase不同版本間的差異性較大(如HBase2.x上移走了hbck工具),本文使用的所有命令列執行的環境為MRS_1.9.3,對應的HBase版本為1.3.1,部分命令在HBase2上不支援(有時間的話會對HBase2做單獨的介紹)。

2) 本文所涉及的HBase工具均為開源自帶工具,不涉及廠商自研的最佳化和運維工具。

Canary工具

HBase Canary是檢測HBase叢集當前狀態的工具,用簡單的查詢來檢查HBASE上的region是否可用(可讀)。它主要分為兩種模式

1) region模式(預設),對每個region下每個CF隨機查詢一條資料,列印是否成功以及查詢時延。

    #對t1和tsdb-uid表進行檢查
    hbase org.apache.hadoop.hbase.tool.Canary t1 tsdb-uid
    #注意:不指定表時掃所有region

2) regionserver模式,對每個regionserver上隨機選一個表進行查詢,列印是否成功以及查詢時延。

    #對一個regionserver進行檢查
    hbase org.apache.hadoop.hbase.tool.Canary -regionserver node-ana-coreQZLQ0002.1432edca-3d6f-4e17-ad52-098f2adde2e6.com
    #注意:不指定regionserver時掃所有regionserver

Canary還可以指定一些簡單的引數,可以參考如下

10大HBase常見運維工具整理

總結:

  • 對叢集影響:2星(只是簡單的讀操作,region個數極多的時候會佔用少部分請求吞吐)
  • 實用性:2星

HFile工具

HBase HFile檢視工具,主要用來檢查當前某個具體的HFile的內容/後設資料。當業務上發現某個region無法讀取,在regionserver上由於檔案問題無法開啟region或者讀取某個檔案出現異常時,可用此工具單獨來檢查HFile是否有問題

#檢視t1表下的其中一個HFile的詳情,列印KV
hbase org.apache.hadoop.hbase.io.hfile.HFile -v -m -p -f /hbase/data/default/t1/4dfafe12b749999fdc1e3325f22794d0/cf1/06e102be436c449693734b222b9e9aab

使用引數如下:

10大HBase常見運維工具整理

總結:

  • 對叢集影響:1星(此工具不走HBase通道,只是單純的讀取檔案,不影響叢集)
  • 實用性:4星(可精確判斷具體的HFile內容是否有問題)

RowCounter和CellCounter工具

RowCounter 是用MapReduce任務來計算錶行數的一個統計工具。而和 RowCounter類似,但會收集和表相關的更細節的統計資料,包括:表的行數、列族數、qualifier數以及對應出現的次數等。兩個工具都可以指定row的起止位置和timestamp來進行範圍查詢

# RowCounter掃描t1
hbase org.apache.hadoop.hbase.mapreduce.RowCounter t1
#用CellCounter掃描t1表並將結果寫入HDFS的/tmp/t1.cell目錄
hbase org.apache.hadoop.hbase.mapreduce.CellCounter t1 /tmp/t1.cell

使用引數如下:

10大HBase常見運維工具整理

10大HBase常見運維工具整理

總結:

  • 對叢集影響:3星(需要起MapReduce對錶所有region進行scan,佔用叢集資源)
  • 實用性:3星(HBase統計自身錶行數的唯一工具, hbase shell中count效率比較低)

Clean工具

clean命令是用來清除HBase在ZooKeeper合HDFS上資料的工具。當叢集想清理或剷除所有資料時,可以讓HBase恢復到最初的狀態。

#清除HBase下的所有資料
hbase clean --cleanAll使用引數如下:

10大HBase常見運維工具整理

總結:

  • 對叢集影響:5星(刪除HBase叢集上所有資料)
  • 實用性:2星(除開需要重新設定HBase資料的場景如要切換到HBase on OBS,平時很少會用到)

HBCK工具

HBase的hbck工具是日常運維過程中使用最多的工具,它可以檢查叢集上region的一致性。由於HBase的RIT狀態較複雜也最容易出現問題,日常運維過程中經常會遇到region不線上/不一致等問題,此時就可以根據hbck不同的檢查結果使用相應的命令進行修復。

#檢查t1表的region狀態
hbase hbck t1
#修復t1表的meta並重新assign分配
hbase hbck -fixMeta -fixAssignments t1

由於該工具使用的場景太多太細,此處就不作展開介紹了,可以檢視引數的描述來對各種異常場景進行修復。注意:在不清楚異常原因的情況下,千萬不要亂使用修復命令病急亂投醫,很有可能會使問題本身更糟糕。

使用引數如下:

10大HBase常見運維工具整理

總結:

  • 對叢集影響:4星(個別meta相關命令對叢集影響極大)
  • 實用性:5星(hbck是HBase運維人員的最基本運維工具)

RegionSplitter工具

RegionSplitter是HBase的Pre-splitting工具,在table初始化的時候如果不配置pre-split的話,HBase不知道如何去split region,這就很大可能會造成後續的region/regionserver的熱點,最好的辦法就是首先預測split的切分點,在建表的時候做pre-splitting,保證一開始的業務訪問總體負載均衡。RegionSplitter能夠透過具體的split演算法在建表的時候進行pre-split,自帶了兩種演算法:

  • HexStringSplit

使用8個16進位制字元來進行split,適合row key是十六進位制的字串(ASCII)作為字首的時候

  • UniformSplit

使用一個長度為8的byte陣列進行split,按照原始byte值(從0x00~0xFF)右邊以00填充。以這種方式分割槽的表在Put資料的時候需要對rowkey做一定的修飾, 比如原來的rowkey為rawStr,則需要對其取hashCode,然後進行按照byte位反轉後放在最初rowkey串的前面

#建立test_table表,並使用HexStringSplit演算法預分割槽10個
hbase org.apache.hadoop.hbase.util.RegionSplitter test_table HexStringSplit -c 10 -f f1
#Tips:此操作等價於在hbase shell中create ' test_table ', { NAME => 'f1'},{NUMREGIONS => 10, SPLITALGO => 'HexStringSplit'}

10大HBase常見運維工具整理

總結:

不管是HBase自帶的哪一種pre-split演算法,都是建立在表資料本身的rowkey符合它約定格式的條件下,實際使用者還是需要按業務來設計rowkey,並實現自己的pre-split演算法(實現SplitAlgorithm介面)

  • 對叢集影響:1星(建立表操作,不影響其他叢集業務)
  • 實用性:3星(實際pre-split都是按實際業務來的,對於測試來說可以使用HBase預設的split演算法來構造rowkey格式)

FSHLog工具

FSHLog是HBase自帶的一個WALs檔案檢查和split工具,它主要分為兩部分功能

  • dump

將某個WAL檔案中的內容dump出來具體的內容

  • split

觸發某個WAL資料夾的WAL split操作

#dump出某個當前的WALs檔案中的內容
hbase org.apache.hadoop.hbase.regionserver.wal.FSHLog --dump /hbase/WALs/node-ana-coreqzlq0002.1432edca-3d6f-4e17-ad52-098f2adde2e6.com,16020,1591846214733/node-ana-coreqzlq0002.1432edca-3d6f-4e17-ad52-098f2adde2e6.com%2C16020%2C1591846214733.1592184625801

相關引數

10大HBase常見運維工具整理

總結:

  • 對叢集影響:2星(觸發的WAL split操作會對相應的Worker節點增加少量的負載,當需要split的WAL極大時,會對region級別的業務有影響)
  • 實用性:4星(可以很好的檢查WAL內容的準確性,以及適用於WAL搬遷的場景)

WALPlayer工具

WALPlayer是一個將WAL檔案中的log回放到HBase的工具。可以透過對某個表或者所有表進行資料回放,也可以指定相應的時間區間等條件進資料回放。

#回放一個WAL檔案的資料到表t1
hbase org.apache.hadoop.hbase.mapreduce.WALPlayer /tmp/node-ana-coreqzlq0002.1432edca-3d6f-4e17-ad52-098f2adde2e6.com%2C16020%2C1591846214733.1592184625801 t1

Q&A:FSHLog和WALPlayer都能將WAL檔案中的資料恢復到HBase中,有什麼差異區別?

FSHLog是觸發WAL split請求到HMaster中,會對WAL中的所有資料恢復到HBase,走的是HBase自己的WAL split流程。而WALPlayer是本身起MR任務來掃WAL檔案中的資料,對符合條件的資料put到特定的表中或輸出HFile到特定目錄

相關引數:

10大HBase常見運維工具整理

總結:

  • 對叢集影響:3星(起MR任務會佔用部分叢集資源)
  • 實用性:4星(在某些特定的場景下實用性很高,如replication預同步,表資料恢復)

OfflineMetaRepair工具

OfflineMetaRepair工具由於修復HBase的後設資料。它會基於HBase在HDFS上的region/table後設資料,重建HBase後設資料。

#重新建立hbase的後設資料
hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair

Q&A: hbck的fixMeta同樣可以修復HBase的後設資料,還能指定具體的表使用更加靈活,還有必要使用OfflineMetaRepair?

hbck工具是HBase的線上修復工具,如果HBase沒有啟動是無法使用的。OfflineMetaRepair是在離線狀態修復HBase後設資料

相關引數:

10大HBase常見運維工具整理

總結:

  • 對叢集影響:5星(備份原始後設資料表後,會重建HBase後設資料)
  • 實用性:4星(當HBase由於後設資料原因無法啟動時,此工具可以恢復HBase)

Sweeper工具

Sweeper工具(HBASE-11644)可以合併HBase叢集中小的MOB檔案並刪除冗餘的MOB檔案。它會基於Column Family起相應的SweepJob任務來對相應的MOB檔案進行合併。注意,此工具不能與MOB的major compaction同時執行,並且同一個Column Family的Sweeper任務不能同時有多個一起執行。

#對t1表執行Sweeper
hbase org.apache.hadoop.hbase.mob.mapreduce.Sweeper t1 cf1

相關引數:

10大HBase常見運維工具整理

總結:

  • 對叢集影響:5星(合併MOB任務會佔用大量的Yarn資源和IO,對業務影響很大)
  • 實用性:2星(只適合MOB場景,使用MOB會存在HMaster上compact的瓶頸暫不推薦(社群HBASE3上才支援,相關jira HBASE-22749))

以上就是此次介紹的所有HBase運維工具,其他的如Bulkload批次匯入,資料遷移,測試相關的pe等暫不描述。如果有寫的不對的請指正,多謝。

官方文件:

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2983/viewspace-2796532/,如需轉載,請註明出處,否則將追究法律責任。

相關文章