使用腳本的方式來批量統計hbase表的記錄數和字節數

最近因爲運維工做須要要對系統中的全部hbase表進行一次統計記錄數和佔用空間大小,若是不借助腳本的話,統計記錄數能夠在hbase shell中用count命令,而統計表佔用的空間大小可使用hadoop fs –du –s /hbase/data/default/tablename來統計該表所打敗的空間大小,但這樣作須要人工干預,統計空間大小還好很快,但count記錄數的快慢與表的大小有關,有些表可能須要幾個小時來count。java

後來發現hbase shell能夠批量的執行文件中的命令,就是說他能夠在一個文件中定義好全部須要執行的hbase命令,如定義一個文件,文件名爲batch.txt:shell

count ‘table1’api

count ‘table2’ruby

….運維

這後就可使用hbase shell batch.txt來批量執行這個文件中的命令。oop

但因爲hbase shell執行每條命令時會打印一些不相關的信息,這樣就須要對執行結果再進行解析從中提取出每張表的記錄數,並且hbase shell的count命令是在客戶端來統計的,它至關於執行一個針對表的scan,而後對scan的結果result進行輪循的方式來統計,這樣等於串行的去訪問每一個region server結果是很是慢。server

最後經過查看hbase腳本的代碼發現,實際上hbase是經過jruby來實現的,而jruby是能夠與java互動的,最後咱們寫了一個jruby腳本調用hbase client的api,而咱們的每張表中都增長了一個對hbase統計記錄數進行統計的協處理器,這樣對記錄進行count就能夠走這個協處理器(這個協處理器是經過並行的方式來統計表的記錄數的),也比較快。具體的jruby腳本以下(因爲工做環境不能拷貝粘貼代碼,只能截圖了):hadoop

相關文章
相關標籤/搜索