linux下進行hive數據遷移


嘗試了阿里雲上推薦的數據遷移方式

https://yq.aliyun.com/articles/66042

首先確定一個默認的導出的hive數據庫

vi ~/.hiverc use test;

然后在hdfs上創建一個臨時目錄

hdfs dfs -mkdir /tmp/test

通過hive生成默認的導出數據庫的表 轉換成導出的hql文件

 

hive -e "show tables " | awk '{printf "export table %s to |/tmp/test/%s|;\n",$1,$1}' | sed "s/|/'/g" > /home/hive/qcf/export.hql

手動運行hql文件 把hive數據庫中的表和數據先存儲到hdfs中創建的臨時目錄中

hive -f export.hql

將hdfs上存儲到臨時目錄的數據下載到本地集群

hdfs dfs -get /tmp/test /home/test

下載完成在把數據文件遷移到新的hadoop集群中

遷移完成后把遷移的數據放到新的集群環境的臨時目錄中

hdfs dfs -put /home/test /tmp/test 

把上面的腳本備份一下由導出腳本通過sed命令轉換成導入腳本

cp export.hql import.sql

sed -i 's/export table/import table/g' import.sql

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

在新的集群中也要設置hive的默認導入數據庫

vi ~/.hiverc use test;

執行命令

hive -f import.sql

到此hive數據遷移過程已經完成

由於hive中的數據過大所以在執行hive -f操作的時候盡量通過linux的后台進行運行

同時在做導出操作時會發現hive報錯  原因是hive缺少hadoop中的兩個jar包

hadoop-common-2.6.2.jar  hadoop-distcp-2.6.2.jar

使用是將這兩個jar包放到hive/lib目錄下面

導出過程也會遇到hive在執行是 java.lang.OutOfMemoryError: GC overhead limit exceeded 

這個問題我是通過修改hive-env.sh文件來修改的

在else 中增加-Xmx4096m  加大初始化堆內存的大小,根據linux系統實際運行內存決定

if [ "$SERVICE" = "cli" ]; then
if [ -z "$DEBUG" ]; then
    export HADOOP_OPTS="$HADOOP_OPTS -XX:NewRatio=12 -Xms10m -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=15 -XX:+UseParNewGC -XX:-      UseGCOverheadLimit"
  else
    export HADOOP_OPTS="$HADOOP_OPTS -XX:NewRatio=12 -Xms10m -Xmx4096m -XX:MaxHeapFreeRatio=40 -XX:MinHeapFreeRatio=15 -XX:-UseGCOverheadLimit"
  fi
fi

之后在導入數據的時候也遇到一個問題  java.lang.OutOfMemoryError: Java heap space

這個問題沒有得到解決 導致數據無法正常導入

然后我就直接將本地文件put到hive的/warehouse/*.db 的目錄中

數據轉存到對應的實際上並沒有在hive數據庫中存在映射關系

我們需要手動創建分區  分區創建好之后 put進去的數據就會在hive命令中可以被查到了

本篇文章只是描述和分享一下hive數據遷移的一些過程和遇到的問題,如果有什么疑問可以留言。

 


免責聲明!

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



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