hbase日常操作以及日常維護

一,基本命令:

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

     也可以建表時加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的情況)

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

    啓用和禁用表: enable 'testtable' 和disable 'testtable'

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

二,日常維護的命令

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

    2,flush 'testtable',將所有memstore刷新到hdfs,通常如果發現regionserver的內存使用過大,造成該機的regionserver很多線程block,可以執行一下flush操作,這個操作會造成hbase的storefile數量劇增,應儘量避免這個操作,還有一種情況,在hbase進行遷移的時候,如果選擇拷貝文件方式,可以先停寫入,然後flush所有表,拷貝文件。

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

三,重啓一個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接口的方式,我推薦使用這種方式,成本低。

    先總結這麼多,有空我再詳細寫一下region壞時怎麼修復。

發佈了6 篇原創文章 · 獲贊 40 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章