1. 程式人生 > >大資料平臺--資料庫的遷移(HBase、Hive、Mysql)

大資料平臺--資料庫的遷移(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;