Hive數據遷移



簡介

基於全表導出和全表導入。流程爲Source Hive -> Source HDFS Cluster -> Destination HDFS Cluster -> Destination Hive

(Source端)羣集操作

1. 創建導出臨時目錄

這裏定爲hdfs://tmp/hive-export/<database name>
假設這裏導出的數據庫名爲cdp_data

$ sudo -u hdfs dfs -mkdir -p /tmp/hive-export/cdp_data
2. 生成導出數據腳本
$ sudo -u hdfs hive -e "use cdp_data; show tables;" | \awk '{printf "export table %s to @/tmp/hive-export/cdp_data%s@;\n",$1,$1}' | \sed "s/@/'/g" > export.hql
3. 執行導出數據腳本
$ sudo -u hdfs hive -e "use cdp_data; source export.hql"
4. 數據導出完成

(Destination端)羣集操作

1 創建導入臨時目錄

這裏定爲hdfs://tmp/hive-import/<database name>

$ sudo -u hdfs dfs -mkdir -p /tmp/hive-import/cdp_data
2. 從Source端複製導出到HDFS的數據

這裏用DistCp,該步只能在Destination端進行。並且需要用hftp連接Source端的hdfs文件系統。這是爲了避免因Cluster版本不同產生的問題。

$ sudo -u hdfs hadoop distcp hftp://<source host>:50070/tmp/hive-export/cdp_data \hdfs://<destination host>:8020/tmp/hive-import/cdp_data
3. 生成導入數據腳本
$ sudo -u hdfs hdfs dfs -ls /tmp/hive-import/cdp_data/ | \awk '{print $8}' | awk -F '/' '{print $5}' | grep -v "^$"  > table.list

$ cat table.list  | \awk '{printf "import table %s from @/tmp/hive-import/cdp_data/%s@;\n",$1,$1}' | \sed "s/@/'/g" > import.hql
4. 執行導入數據腳本
$ sudo -u hdfs hive -e "use cdp_data; source import.hql"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章