hbase維護操作命令

1、基本命令:

      建表:  create 'hbase_t_m_user_personalmodel_recommend','modelinfo','recommendlist','baseinfo';

      也可以建表時加coulmn Family的屬性如:  (其中的屬性有versions:設置歷史版本數,TTL:過期時間,COMPRESSION:壓縮方式,當配置SNAPPY的情況)

       'hbase_t_m_user_personalmodel_recommend', {NAME => 'baseinfo', COMPRESSION => 'SNAPPY', TTL => '2592000 SECONDS (30 DAYS)'}, {NAME => 'modelinfo', COMPRESSION => 'SNAPPY', TTL => '2592000 SECONDS (30 DAYS)'}, {NAME => 'recommendlist', COMPRESSION => 'SNAPPY', TTL => '2592000 SECONDS (30 DAYS)'}

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

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

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

    清空表:truncate 'hbase_t_m_user_personalmodel_recommend'


   

二,日常維護的命令

    1,major_compact 'hbase_t_m_user_personalmodel_recommend',通常生產環境會關閉自動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 regionserver_nodename

    這個操作是平滑的重啓regionserver進程,對服務不會有影響,他會先將需要重啓的regionserver上面的所有region遷移到其它的服務器,然後重啓,最後又會將之前的region遷移回來,但我們修改一個配置時,可以用這種方式重啓每一臺機子,這個命令會關閉balancer,所以最後我們要在hbase shell裏面執行一下balance_switch true,對於hbase regionserver重啓,不要直接kill進程,這樣會造成在zookeeper.session.timeout這個時間長的中斷,也不要通過bin/hbase-daemon.sh stop regionserver去重啓,如果運氣不太好,-ROOT-(目前root表已經刪除)或者hbase:meta表在上面的話,所有的請求會全部失敗。

四,關閉下線一臺regionserver

    bin/graceful_stop.sh --stop  regionserver_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 'hbase_t_m_user_personalmodel_recommend'

        目前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:8020/hbase/hbase_t_m_user_personalmodel_recommend/ hdfs://distnamenode:8020/hbase/testtable/

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

    生成meta信息後,重啓hbase

    這個操作是簡單的方式,操作之前可以關閉hbase的寫入,執行flush所有表(上面有介紹),再distcp拷貝,如果hadoop版本不一致,可以用hftp接口的方式,我推薦使用這種方式,成本低。

   七、批量導入數據

     1、自己寫mr程序導入或者使用命令:         

        hbase org.apache.hadoop.hbase.mapreduce.ImportTsv  -Dimporttsv.columns=HBASE_ROW_KEY,recommendlist:shortstream_lists  hbase_t_m_user_personalmodel_recommend    /user/nlp/warehouse/dw1/shortuserrecommenddefault/

     數據格式:

        rowkey shortstream_lists


recommendlist爲column family,下面的column爲 shortstream_lists 

-Dimporttsv.columns 指定列,需要指定HBASE_ROW_KEY

 hbase_t_m_user_personalmodel_recommend 爲table名稱

-Dimporttsv.separator爲分隔符,默認爲\t

  2、bulkload :

    MapReduce生成HFile文件,再使用BulkLoad導入HBase中(完全分佈式運行)   

    A、這種方式有很多的優點

       a). 如果我們一次性入庫hbase巨量數據,處理速度慢不說,還特別佔用Region資源, 一個比較高效便捷的方法就是使用 “Bulk Loading”方法,即HBase提供的HFileOutputFormat類。

        b). 它是利用hbase的數據信息按照特定格式存儲在hdfs內這一原理,直接生成這種hdfs內存儲的數據格式文件,然後上傳至合適位置,即完成巨量數據快速入庫的辦法。配合mapreduce完成,高效便捷,而且不佔用region資源,增添負載。

  B、這種方式也有很大的限制

         a). 僅適合初次數據導入,即表內數據爲空,或者每次入庫表內都無數據的情況即bulkload這個命令只能執行一遍

         b). HBase集羣與Hadoop集羣爲同一集羣,即HBase所基於的HDFS爲生成HFile的MR的集羣.

   bulkload 方式需要兩個Job配合完成: 
   (1)第一個Job還是運行原來業務處理邏輯,處理的結果不直接調用HTableOutputFormat寫入到HBase,而是先寫入到HDFS上的一箇中間目錄下(如 middata) 
   (2)第二個Job以第一個Job的輸出(middata)做爲輸入,然後將其格式化HBase的底層存儲文件HFile 
   (3)調用BulkLoad將第二個Job生成的HFile導入到對應的HBase表中

具體命令操作見:http://hbase.apache.org/book.html#arch.bulk.load

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