Hive全庫數據遷移方案


Hive的遷移涉及兩個技術點:

  1. 僅遷移元數據(參考網易雲提出的思路,https://sq.163yun.com/blog/article/173577620075286528);
  2. 元數據及Hive數據全量遷移。

考慮到多數場景是遷移整個Hive數據庫,該篇文章只介紹遷移的第二種,即元數據及Hive數據全量遷移。

這里使用的export/import這兩個指令
主要的流程:

  1. 將舊集群的hive數據導出至其hdfs中
  2. 將舊集群hdfs中的導出數據下載到本地中
  3. 將本地的導出數據上傳至新的集群hdfs中
  4. 將新集群hdfs中的數據導入至新集群中的hive中

● 將舊集群的hive數據導出至其hdfs中

數據導出

設置hive啟動默認數據庫

在家目錄中新建.hiverc文件,配置默認的數據庫(即你需要導出的數據庫)

vim ~/.hiverc
use export_db;

在hdfs上創建導出目錄

hdfs dfs -mkdir -p /tmp/export_db_export

導出舊集群的hive數據

生成導出腳本

hive -e "show tables;" | awk  '{printf "export table %s to |/tmp/export_db_export/%s|;\n",$1,$1}' | sed "s/|/'/g" | grep -v tab_name > ~/export.hql

導出數據

hive -f ~/export.hql

● 將導出的數據下載到本地

數據中轉

下載數據

hdfs dfs -get /tmp/export_db_export ~/export_db

● 將本地的導出數據上傳至新的集群hdfs中

數據遷移

前提:已將導出的數據目錄遷移至新集群

上傳數據

hdfs dfs -put ~/export_db /tmp/export_db_export
注:這里的/tmp/export_db_export需要提前創建

● 將新集群hdfs中的數據導入至新集群中的hive中

數據導入

生成導入腳本

我們將之前的export.hql腳本修改下就可以當做我們的import.hql腳本

cp ~/export.sql ~/import.sql
sed -i 's/export /import /g' ~/import.sql
sed -i 's/ to / from /g' ~/import.sql

導入數據

這里也需要設置hive的默認數據庫

vim ~/.hiverc
use import_db;

導入數據

hive -f ~/import.sql

至此Hive數據的遷移就完成.

在部分有安全控制的集群環境下,hive連接被禁用了。這時候需要使用beeline連接hive並進行數據遷移,下面給大家介紹下如何使用beeline來進行數據遷移

使用beeline進行導出腳本的生成

beeline -u jdbc:hive2://cdh01:10000 -e "use export_db;show tables;"| awk '{printf "export table %s to |/tmp/export_db_export/%s|;\n",$2,$2}' | sed "s/|/'/g"|sed '1,3d'|sed '$d' > ~/export.hql

執行導出腳本

sed -i '1i use export_db;' ~/export.hql
beeline -u jdbc:hive2://cdh01:10000 -n hdfs -f ~/export.hql

這里使用distcp來進行hdfs文件在新集群的上傳

hadoop distcp hdfs://cdh01:8020/tmp/export_db_export/ hdfs://cdh02:8020/tmp/export_db_export

新的集群hdfs目錄需要提前創建

修改import.hql

cp ~/export.hql ~/import.hql
sed -i 's/export /import /g' ~/import.hql
sed -i 's/ to / from /g' ~/import.hql
sed -i '1d' ~/import.hql
sed -i '1i use import_db;' ~/import.hql

導入數據

create database import_db;
beeline -u jdbc:hive2://cdh02:10000 -n hdfs -f ~/import.hql

至此數據遷移完成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM