一宣鄙、概述:
Hbase(Phoenix)數(shù)據(jù)遷移方案主要分為 Hadoop層面(distcp)、及Hbase層面(copyTable、export/import蹂随、snapshot)
二茁帽、以下針對distcp方案詳細(xì)說明(以親測阿里EMR為例):
step1:
首先打通兩個集群網(wǎng)絡(luò)(建議內(nèi)網(wǎng))玉罐,新建一個tmp安全組,將兩個集群的所有ECS都加入進(jìn)來潘拨;
step2:
Cluster-A中將HBase的表在HDFS存儲文件distcp到Cluster-B的HBase在HDFS中對應(yīng)的目錄(一定要用hdfs賬戶)
[root@emr-header-1 ~]# sudo su hdfs
[hdfs@emr-header-1 ~]# hadoop distcp hdfs://A:9000/hbase/data/default/safeclound.tb_ammeter hdfs://B:8020/hbase/data/default? ? ? # 將表safeclound.tb_ammeter從A集群在線拷貝到B集群吊输,注:老版本端口是9000新版本是8020
備注: /hbase/data/default是E-MapReduce中HBase表在HDFS存儲路徑,例如表TestTable 的存儲路徑是/hbase/data/default/TestHbase, 可以只有單個表的路徑铁追,
也可以是default下面所有表的路徑(即*表示)季蚂,EMR的老版本hdfs端口是9000,新版hdfs端口是8020,這個具體情況而定就行扭屁。
特別注意:千萬不能把hbase和Phoenix的系統(tǒng)表拷貝了算谈,只需拷貝自建的業(yè)務(wù)表即可(因?yàn)閐istcp對于Cluster-B是覆蓋操作),
根據(jù)本人親測經(jīng)驗(yàn)還是老老實(shí)實(shí)一張一張表拷貝吧料滥,非常不建議使用*然眼,一是多個表數(shù)據(jù)量可能巨大,二是會把系統(tǒng)表拷貝過去了
Cluster-B中執(zhí)行HBase repair修復(fù)(一定要用hbase賬戶)
[root@emr-ha-header-1 ~]# sudo su hbase
[hbase@emr-ha-header-1 ~]# hbase hbck -repair? ? ? ? ? ? #執(zhí)行hbase恢復(fù)命令葵腹,讓hbase引用distcp過來的hdfs表文件
[hbase@emr-ha-header-1 ~]# hbase shell? ? ? ? ? ? ? ? ? #進(jìn)入hbase shell檢查是否遷移成功
提示:根據(jù)親測經(jīng)驗(yàn)高每,若執(zhí)行hbase hbck -repair后在hbase shell中任然看不到遷移來的表,別急践宴,先喝杯茶稍等一會兒(內(nèi)網(wǎng)遷移通常1分鐘內(nèi))然后再重新執(zhí)行hbase hbck -repair命令鲸匿,
直到出現(xiàn)以下字幕,說明hbase遷移就要成功了浴井!
util.HBaseFsck: Sleeping 10000ms before re-checking after fix...
(猜測此問題可能是由于hdfs拷貝過來后有些異步操作未完成所導(dǎo)致)
step3:(若不是Phoenix+hbase架構(gòu)組合可忽略)
在上一步hbase shell檢查遷移成功之后晒骇,再測試Phoenix查詢,可能會出現(xiàn)在hbase shell中l(wèi)ist或者scan命令都完全正常磺浙,
但在Phoenix中看不到遷移過來的表洪囤,別急,因?yàn)镻hoenix還不知道你從hdfs遷移的表撕氧,經(jīng)過Google找到解決方法1:
1. 通過在Phoenix執(zhí)行create view ... 語句瘤缩,創(chuàng)建一個視圖就可以了(但后續(xù)還要維護(hù)視圖,如果不像創(chuàng)建view 可參考以下2方案)
2. 直接在Phoenix執(zhí)行create table ...語句伦泥,(警告:此方式可能會出現(xiàn)Huang住最后導(dǎo)致hbase某個節(jié)點(diǎn)宕機(jī)剥啤,親身經(jīng)歷!2桓府怯!
但也不是莫有辦法,親測一個巧妙的方法:在執(zhí)行create table 時無需等待執(zhí)行完成防楷,當(dāng)按下Enter鍵執(zhí)行后牺丙,立即Ctrl+C終止sqlline.py進(jìn)程
,然后重新打開sqlline.py复局,執(zhí)行!table命令就可以看到新遷移的表了)
三冲簿、FAQ:
1. 萬一誤覆蓋了Cluster-B的系統(tǒng)表如何恢復(fù)?亿昏?峦剔?(若操作正常可忽略)
step1:備份hbase在hdfs上的根目錄
[root@emr-ha-header-1 ~]# hadoop fs -mv /hbase /hbase_bak
step2:停掉hbase所有服務(wù)(若EMR新版角钩,可在阿里EMR控制臺stop hbase all)
step3:清除ZK里hbase的注冊信息(很關(guān)鍵吝沫,否則不會自動生成系統(tǒng)表)
[root@emr-ha-header-1 ~]# sh /usr/lib/zookeeper-current/bin/zkCli.sh -server 127.0.0.1:2181
[root@emr-ha-header-1 ~]# ls /
[root@emr-ha-header-1 ~]# rmr /hbase
step4:重新啟動hbase所有服務(wù)
step5:測試hbase是否自動生成
[root@emr-ha-header-1 ~]# hadoop fs -ls /? ? ? ? ? ? ? ? #查看hdfs里是否生成了 /hbase 目錄
[root@emr-ha-header-1 ~]# hbase shell? ? ? ? ? ? ? ? ? ? #進(jìn)入hbase shell
hbase(main):001:0> list? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #查看hbase里是否可見相應(yīng)的系統(tǒng)表SYSTEM.CATALOG呻澜、SYSTEM.FUNCTION 、SYSTEM.MUTEX野舶、SYSTEM.SEQUENCE易迹、SYSTEM.STATS等
TABLE
SYSTEM.CATALOG
SYSTEM.FUNCTION
SYSTEM.MUTEX
SYSTEM.SEQUENCE
SYSTEM.STATS
5 row(s) in 0.1010 seconds
... ...
恭喜,出現(xiàn)以上字幕即恢復(fù)成功平道!
2. 可否使用離線拷貝睹欲??一屋?(若無需離線拷貝可忽略)
step1:只需將distcp...命令改用 get窘疮、put通過本地中轉(zhuǎn)就行了(無關(guān)心執(zhí)行賬戶)
[root@emr-header-1 ~]$ hadoop fs -get /hbase/data/default/safeclound.tb_ammeter_analyze? ? ? ? ? ? #從源hbase集群下載業(yè)務(wù)表到本地? ? ? ?
step2:scp到目地hbase集群服務(wù)器
[root@emr-header-1 ~]$ tar -cvf safeclound.tb_ammeter_analyze.tar safeclound.tb_ammeter_analyze
[root@emr-header-1 ~]$ scp safeclound.tb_ammeter_analyze.tar root@target-hbase-master:/root
step3:在目地服務(wù)器上將業(yè)務(wù)表文件加載到hdfs(其中target-hbase-master安裝的是原生hbase且是默認(rèn)配置,因此在hdfs的數(shù)據(jù)文件路徑才是:/tmp/hbase-root/hbase/data/default/
冀墨,如果是阿里云的EMR闸衫,則在hdfs的數(shù)據(jù)路徑為:/hbase/data/default)
[root@target-hbase-master ~]# hadoop fs -put /root/safeclound.tb_ammeter_analyze/ /tmp/hbase-root/hbase/data/default/
step4:查看驗(yàn)證是否加載成功
[root@target-hbase-master ~]# hadoop fs -ls /tmp/hbase-root/hbase/data/default/
step5:接下來就同上面第二點(diǎn)的step2中的 運(yùn)行 hbase hbck -repair 命令一樣了。诽嘉。蔚出。
參考文獻(xiàn):
3. 若使用的是Phoenix+hbase組合,若Phoenix版本低于4.10升級到4.10之后虫腋,可能會出現(xiàn)除主鍵字段外其他字段都查不出數(shù)據(jù)骄酗,但在hbase shell中scan表又有數(shù)據(jù)的情況解決方案:phoenix官網(wǎng)
phoenix官網(wǎng)截圖: