2018-04-04 HBase常見的運維工具

HBase自帶許多運維工具,為用戶提供管理、分析、修復和調試的功能,這些工具一部分的入口是hbase shell客戶端,另一部分是在hbase的jar包中。

大多數可通過執(zhí)行以下形式的命令實現:

hbase[<options>]<command>[<agrs>]

Canary

HBase Canary 是檢測HBase系統(tǒng)狀態(tài)的工具,檢測粒度可以是列族、Region或Region Server等。Canary會對指定表的每一個Region抓取一行,通過探測失敗或延遲來判斷集群當前情況。常用的三個場景是:檢查集群中所有Region是否可查;檢查集群中某些特定表的所有Region是否可查;檢查RegionServer的服務狀態(tài)。

sudo -u hbase hbase org.apache.hadoop.hbase.tool.Canary

sudo -u hbase hbase org.apache.hadoop.hbase.tool.Canary -t 600000

sudo -u hbase hbase org.apache.hadoop.hbase.tool.Canary -t 600000 table_name1 table_name2...

sudo -u hbase hbase org.apache.hadoop.hbase.tool.Canary -t 600000 -regionserver

hbck工具

hbck工具用于檢查HBase集群一致性。命令為:

sudo -u hbase hbase hbck

這條命令輸出的末尾,會打印出OK或者INCONSISTENCY信息。若返回OK,說明保持一致。如果報出INCONSISTENCY,說明處于不一致狀態(tài),需要解決問題,此時可以通過-details來查看更多的細節(jié)。

注意出現INCONSISTENCY時,可以重復執(zhí)行hbck工具若干次以確認。因為INCONSISTENCY可能只是暫時的,例如集群正在啟動或者某個Region正在被拆分時會報INCONSISTENCY,但不意味著穩(wěn)定時也不一致。

HFile查看工具

當需要查看HFile內容的文本化版本時,可以使用org.apache.hadoop.hbase.io.hfile.HFile工具實現,執(zhí)行語句如下:

$${HBASE_HOME}/bin/hbase org.apache.hadoop.hbase.io.hfile.HFile

例如,查看文件hdfs://10.81.47.41:8020/hbase/TEST/1418428042/DSMP/4759508618286845475中的內容,可以敲入一下命令:

sudo -u hbase hbase org.apache.hadoop.hbase.io.hfile.Hfile -v -f hdfs:://10.81.47.41:8020/hbase/TEST/1418428042/DSMP/4759508618286845475

選項-v表示查看詳細內容,如果去掉則只返回簡化過的摘要內容。

CopyTable

CopyTable可以用來拷貝部分或者全部的表的內容,無論表是在同一集群或是不同集群。待操作的表必須存在才能執(zhí)行CopyTable操作,用法如下:

sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.CopyTable --help

/bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable -- help

Usage: CopyTable [general options] [--starttime=X] [--endtime=Y] [--new.name=NEW] [--peer.adr=ADR]

其中<tablename>表示待考別的表的名稱。例如我們可以將 TestTable 拷貝到某個集群,該集群是1小時時間窗口區(qū)間段的備份:

hbase org.apache.hadoop.hbase.mapreduce.CopyTable -Dhbase.client.scanner.caching=100 -Dmapred.map.tasks.speculative.execution=false --startrow=rk1 --stoprow=rk4 --starttime=1265875194289 --endtime=1265878794289 --peer.adr=transwarp-perf1,transwarp-perf2,transwarp-perf3:2181:/hyperbase1 --new.name=TestTableNew --families=cf1:cf2 TestTable 該命令中各選項的含義如下: startrow:起始行; stoprow:結束行; starttime:起始時間(毫秒級unixtime),如果沒有設定結束時間意味著永遠執(zhí)行; endtime:結束時間,若沒有明確指定起始時間,可忽略該選項; new.name:新的表名; peer.adr:目標對等集群地址(實為Zookeeper地址),采用如下格式: 【hbase.zookeeper.quorum:hbase.zookeeper.client.port:zookeeper.znode.parent;】 families:需拷貝的列族列表,如有多個用逗號分隔。此處cf1:cf2表示從cf1拷貝到cf2。

Export

Export 用來將表中的內容轉儲到HDFS上面的序列文件,可指定時間戳(timestamp),命令如下:sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.Export<tablename><outputdir>[<version>[<starttime>[endtime]]]

例如,如下命令用export指定時間戳(timestamp)導出表member5,到集群master24的HDFS:

hbase org.apache.Hadoop.hbase.mapreduce.Export member5 hdfs://master24:9000/user/hadoop/dump2 1 1401938590466 1401938590467

Import

Import 工具用來將之前被 Export 的數據載入HBase中。命令如下:

sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.Import<tablename><inputdir>

例如,用import將集群master24的HDFS中的表member5導入至HBase,實現命令如下:

sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.Import member5 hdfs://master24:9000/user/hadoop/dump2

ImportTsv

ImportTsv 工具的作用是把數據以TSV格式載入到HBase中。

它有以下兩個典型的用途:

通過 Puts 操作將數據從HDFS中的TSV格式載入到HBase中。

sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c<tablename><hdfs-inputdir>

TSV 是Tab-separated values的縮寫,即制表符分隔值。 CSV,Comma-separated values(逗號分隔值)。 TSV是用制表符(Tab,’\t’)作為字段值的分隔符; CSV是用半角逗號(’,’)作為字段值的分隔符; 注意:IANA規(guī)定的標準TSV格式,字段值之中是不允許出現制表符 Python對TSV文件的支持: Python的csv模塊準確的講應該叫做dsv模塊,因為它實際上是支持范式的分隔符分隔值文件(DSV,delimiter-separated values)的。 delimiter參數值默認為半角逗號,即默認將被處理文件視為CSV。 當delimiter=’\t’時,被處理文件就是TSV。

第二種用途是和completebulkload 配合使用,為要載入的StoreFiles做準備。sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c -Dimporttsv.bulk.output=<outputdir><tablename><hdfs-data-inputdir>

其中各選項的含義如下: Dimporttsv.columns:指定原數據對應映射到HBase中的哪些列。如果該列包括的是行鍵,那么則用 HBASE_ROW_KEY 來表示該列的列名。

?Dimporttsv.bulk.output:指定HFiles的存放目錄;若不指定該項,數據會直接存放在HBase對應的表中。

CompleteBulkload

completeBulkload工具會將產生的StoreFiles 移動到HBase表中。這個工具通常與ImportTsv的輸出配合使用。

sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles<hdfs://storefileoutput><tablename>

<hdfs://storefileoutput>通常表示經過ImportTsv載入到HDFS的StoreFiles的路徑。

RowCounter和CellCounter

RowCounter是用來計算表行數的MapReduce工程。通常,當用戶對元數據的一致性有疑問時,RowCounter可以作為一個比較實用的工具來全面檢查HBase是否讀取了表的所有block。它可以通過 --starttime=[starttime]和--endtime=[endtime]標簽來限定數據的時間范圍。

sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.RowCounter<tablename>[<column1><columb2>..]

HBase還有另一個具有診斷作用的MapReduce工程,叫做CellCounter。他和RowCounter類似,但會收集和表相關的更細節(jié)的統(tǒng)計數據,包括:表的行數、所有行的列族數、所有行的qualifier數,每個列族出現的次數,每個qualifier出現的次數、每個qualifier的版本總數。

該工具也可以通過--starttime=[starttime]和--endtime=[endtime]來限定掃描表的時間范圍。

sudo -u hbase hbase org.apache.hadoop.hbase.mapreduce.CellCounter<tablename><outputDir>[regex or prefix]

hbase clean 工具

hbase clean 命令是用于清除ZooKeeper或HDFS上的HBase相關數據的工具。它適用于測試或者鏟除HBase集群時對ZooKeeper或HDFS的清理。

sudo -u hbase clean (--cleanZk|--cleanHdfs|--cleanAll)

cleanZk:清除Zookeeper上的HBase數據。

cleanHdfs:清除HDFS 上的HBase數據。

cleanAll:清除Zookeeper和HDFS上HBase數據。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容