大資料平臺--資料庫的遷移(HBase、Hive、Mysql)
一、HBase的遷移
步驟:獲取表-->壓縮-->遷移到目標叢集-->解壓-->把檔案上傳到HDFS的HBase目錄下-->利用hbase hbck修復 (注意:不需要事先在目標群集上建立表)
//------在源群集上的操作----------
//flush源HBase將表的快取資料都寫進磁碟
hbase -> flush 'tableName'
//將源HBase表所在檔案從HDFS複製到本地檔案(表名即檔名)
hdfs dfs -get /hbase/data/default/tableName .
//壓縮
tar -zcvf tableName.tar tableName/
//將tar包從源群集遷移到目標群集上
//如XShell 的sz 和 rz命令
//------在目標群集的操作-----------
//解壓縮
tar -zxvf tableName.tar
//將表文件上傳到HBase的HDFS目錄下(檔名即表名)
hdfs dfs -put tableName /hbase/data/default/
//再執行下面四條命令就ok了
hbase hbck -fixTableOrphans tableName
hbase hbck -fixMeta tableName //重新修復hbase meta表(根據hdfs上的regioninfo檔案,生成meta表)
hbase hbck -fixAssignments tableName //重新將hbase meta表分給regionserver(根據meta表,將meta表上的region分給regionservere
hbase hbck -repair tableName
二、Hive表匯出:
//在源群集執行命令
hive -e "use databaseName;
insert overwrite local directory '/data/hiveData/tableName' select * from tableName;
...
"
//壓縮:
tar cvf hiveData.jar hiveData
//將jar包從源群集遷移到目標群集上
//如XShell 的sz 和 rz命令
//解壓:
tar xvf hiveData.jar hiveData
//在目標群集先建資料表和資料表的臨時表
create table tableName(...) row format delimited fields terminated by ',' ;
create table tableName_tmp(...) ;
//HIVE資料匯入
hive -e "use databaseName;
LOAD DATA LOCAL INPATH '/data/hiveData/tableName' OVERWRITE into TABLE tableName_tmp;
INSERT OVERWRITE TABLE tableName SELECT * FROM tableName_tmp;
DROP TABLE tableName_tmp;
...
"
三.一、Mysql的資料庫的遷移(來源於 https://www.cnblogs.com/abc8023/p/6745402.html)
1. 匯出資料庫資料
mysqldump -uroot -ppasswd source_db > /存放目錄/dumpout.sql
其中 source_db 是需要匯出的資料庫名稱
dumpout.sql 儲存匯出的資料
2. 將匯出的資料dumpout.sql放到你的目標機器上(如果是遠端目標機器的話,直接將dunmpout.sql copy到目標機器就行)。這裡假設cp到主目錄下~/
3. 在目標機器的資料庫裡建立新資料庫,這裡建立名為 target_db 的資料庫
mysql> create database target_db;
4. 向 target_db 資料庫匯入資料
mysql -uroot -ppasswd target_db < /存放目錄/dumpout.sql
其中 target_db 是新資料庫
dumpout.sql是第一步匯出的資料檔案
P.S. 如果在匯入匯出資料的時候遇到檔案太大異常退出的情況,可使用split/cat來進行檔案的分割和合並
mysqldump -uroot -ppasswd dp_db | split -b 10m - tempfile
cat all_tempfile > targetfile
三.二、Mysql匯出表結構及表資料 mysqldump用法
1、匯出資料庫為dbname的表結構(其中使用者名稱為root,密碼為dpasswd,生成的指令碼名為db.sql)
mysqldump -uroot -ppasswd -d dbname >db.sql;
2、匯出資料庫為dbname某張表(test)結構
mysqldump -uroot -ppasswd -d dbname test>db.sql;
3、匯出資料庫為dbname所有表結構及表資料(不加-d)
mysqldump -uroot -ppasswd dbname >db.sql;
4、匯出資料庫為dbname某張表(test)結構及表資料(不加-d)
mysqldump -uroot -ppasswd dbname test>db.sql;