但是這個(gè)做法并不推薦, 因?yàn)檫@個(gè)操作會(huì)忽略文件的狀態(tài)和內(nèi)存中還沒(méi)有被刷寫(xiě)的數(shù)據(jù)
CopyTable工具
另一個(gè)導(dǎo)出HBase表數(shù)據(jù)的工具是CopyTable,該工具的使用方式很簡(jiǎn)單,參考幫助信息中的例子即可操作
其是通過(guò)mr程序?qū)?shù)據(jù)逐條put到目標(biāo)表中的(TableInputFormat和TableOutputFormat)
使用方式如下:
hadoop jar hbase-server-*.jar copytable -D <propertyproperty=value>*
-D的參數(shù)涵括但不限于以下幾個(gè)
–startrow=起始Rowkey
–stoprow=終止Rowkey
–starttime=起始時(shí)間戳
–endtime=終止時(shí)間戳
–versions=保留的版本數(shù)
–all.cells=是否拷貝刪除標(biāo)記的數(shù)據(jù)
–new.name=目標(biāo)表名
–peer.adr=目標(biāo)zk-ip:zk-port:hbase在zk中的根目錄, 必須指定
–families=舊列族名:新列族名,如果一致則指定一個(gè)即可
表名
批量導(dǎo)入
批量導(dǎo)入可以有多種不同的形式,常見(jiàn)的是使用MapReduce和普通的客戶(hù)端API
但是這兩種方式都不高效,這里推薦另外一種做法:blukload
blukload是一種將數(shù)據(jù)文件(可能是普通的文本文件)導(dǎo)入到hbase中的一種工具
其運(yùn)作流程是:
1.讀取數(shù)據(jù)文件,格式為Rowkey+\t+col1數(shù)據(jù)+\t+col2數(shù)據(jù)…
2.將數(shù)據(jù)文件轉(zhuǎn)換為hfile文件
3.讀取hfile文件導(dǎo)入hbase
使用方式1
數(shù)據(jù)文件可以是由程序生成的
使用
hadoop jar hbase-server-*.jar importtsv 列名參數(shù) 表名 數(shù)據(jù)文件位置
直接將數(shù)據(jù)文件導(dǎo)入hbase,其中列名參數(shù)具體為 -Dimporttsv.columns=HBASE_ROW_KEY,”列族名:列名”…
使用方式2
編寫(xiě)mr程序讀源hbase庫(kù),生成hfile文件,OutputFormat要設(shè)置為HFileOutputFormat類(lèi)
之后使用
hadoop jar hbase-server-*.jar completebulkload mr結(jié)果文件目錄 表名
將hfile文件導(dǎo)入目標(biāo)hbase數(shù)據(jù)庫(kù)
注意,該mr程序可以只有mapper過(guò)程,輸出的 類(lèi)型為ImmutableBytesWritable和KeyValue
復(fù)制
hbase中的replication相當(dāng)于mysql中的主從同步技術(shù),RegionServer會(huì)在后臺(tái)啟動(dòng)一個(gè)進(jìn)程不斷put或者delete到同步的集群上
比較適合小集群的熱備
使用replication需要在hbase-site.xml文件中配置以下選項(xiàng):

配置完畢之后在hbase shell中設(shè)置replication的信息:
add_peer '1','目標(biāo)zk-ip:zk-port:hbase在zk中的根目錄'
之后可以通過(guò)list_peer命令查看設(shè)置的replication
集群遷移方法對(duì)比

改變?nèi)罩炯?jí)別
默認(rèn)HBase的日志是DEBUG級(jí)別的,這在安裝和設(shè)計(jì)階段比較有用
它可以讓用戶(hù)在系統(tǒng)出現(xiàn)問(wèn)題的時(shí)候在日志文件中搜尋到比較多的信息
生產(chǎn)環(huán)境中用戶(hù)可以根據(jù)需要修改日志的級(jí)別為INFO或者WARN
修改方式如下:
編輯conf目錄下的log4j.properties文件
將log4j.logger.org.apache.hadoop.hbase=INFO