HBase平常維護

一,基本命令:node

    建表:create 'testtable','coulmn1','coulmn2'shell

     也能夠建表時加coulmn的屬性如:create 'testtable',{NAME => 'coulmn1', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '10', COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'false', BLOCKCACHE => 'false'}, {NAME => 'coulmn', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => '30', COMPRESSION => 'LZO', TTL => '30000', IN_MEMORY => 'true'}  (其中的屬性有versions:設置歷史版本數,TTL:過時時間,COMPRESSION:壓縮方式,當配置lzo的狀況)apache

    刪除表:drop 'testtable'   (刪除表以前先要禁用表,命令disable 'testtable')ruby

    啓用和禁用表: enable 'testtable' 和disable 'testtable'服務器

    其它的基本命令:describe 'testtable'(查看錶結構),alert 修改表結構,list 列出全部表。session

二,平常維護的命令多線程

    1,major_compact 'testtable',一般生產環境會關閉自動major_compact(配置文件中hbase.hregion.majorcompaction設 爲0),選擇一個晚上用戶少的時間窗口手工major_compact,若是hbase更新不是太頻繁,能夠一個星期對全部表作一次 major_compact,這個能夠在作完一次major_compact後,觀看全部的storefile數量,若是storefile數量增長到 major_compact後的storefile的近二倍時,能夠對全部表作一次major_compact,時間比較長,操做盡可能避免高鋒期。tcp

    2,flush 'testtable',將全部memstore刷新到hdfs,一般若是發現regionserver的內存使用過大,形成該機的 regionserver不少線程block,能夠執行一下flush操做,這個操做會形成hbase的storefile數量劇增,應儘可能避免這個操 做,還有一種狀況,在hbase進行遷移的時候,若是選擇拷貝文件方式,能夠先停寫入,而後flush全部表,拷貝文件。ide

    3,balance_switch true或者balance_switch flase,配置master是否執行平衡各個regionserver的region數量,當咱們須要維護或者重啓一個regionserver時,會 關閉balancer,這樣就使得region在regionserver上的分佈不均,這個時候須要手工的開啓balance。oop

三,重啓一個regionserver

    bin/graceful_stop.sh --restart --reload --debug nodename

    這個操做是平滑的重啓regionserver進程,對服務不會有影響,他會先將須要重啓的regionserver上面的全部 region遷移到其它的服務器,而後重啓,最後又會將以前的region遷移回來,但咱們修改一個配置時,能夠用這種方式重啓每一臺機子,這個命令會關 閉balancer,因此最後咱們要在hbase shell裏面執行一下balance_switch true,對於hbase regionserver重啓,不要直接kill進程,這樣會形成在zookeeper.session.timeout這個時間長的中斷,也不要經過 bin/hbase-daemon.sh stop regionserver去重啓,若是運氣不太好,-ROOT-或者.META.表在上面的話,全部的請求會所有失敗。

四,關閉下線一臺regionserver

    bin/graceful_stop.sh --stop  nodename

    和上面同樣,系統會在關閉以前遷移全部region,而後stop進程,一樣最後咱們要手工balance_switch true,開啓master的region均衡。

五,檢查region是否正常以及修復

    bin/hbase hbck  (檢查)

    bin/hbase hbck -fix  (修復)

    會返回全部的region是否正常掛載,如沒有正常掛載可使用下一條命令修復,若是仍是不能修復,那須要看日誌爲何失敗,手工處理。

六,hbase的遷移

    1,copytable方式

    bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=zookeeper1,zookeeper2,zookeeper3:/hbase 'testtable'

    目前0.92以前的版本的不支持多版本的複製,0.94已經支持多個版本的複製。固然這個操做須要添加hbase目錄裏的conf/mapred-site.xml,能夠複製hadoop的過來。

    2,Export/Import

    bin/hbase org.apache.hadoop.hbase.mapreduce.Export testtable /user/testtable [versions] [starttime] [stoptime]

    bin/hbase org.apache.hadoop.hbase.mapreduce.Import testtable  /user/testtable

    跨版本的遷移,我以爲是一個不錯的選擇,並且copytable不支持多版本,而export支持多版本,比copytable更實用一些。

    3,直接拷貝hdfs對應的文件

    首先拷貝hdfs文件,如bin/hadoop distcp hdfs://srcnamenode:9000/hbase/testtable/ hdfs://distnamenode:9000/hbase/testtable/

    而後在目的hbase上執行bin/hbase org.jruby.Main bin/add_table.rb /hbase/testtable

    生成meta信息後,重啓hbase

    這個操做是簡單的方式,操做以前能夠關閉hbase的寫入,執行flush全部表(上面有介紹),再distcp拷貝,若是hadoop版本不一致,能夠用hftp接口的方式,我推薦使用這種方式,成本低