實現hive到hive數據遷移(同步)

背景:

存在某種情況,HIVE數據可能要從一個HDFS中,傳到另一個hdfs中。可以說是遷移,也可能是數據同步。

步驟:

假設有一張user表如下:

CREATE TABLE `jc_db.t_user` (
  `id` bigint COMMENT '主鍵',
  `username` string COMMENT '賬號',
  `password` string COMMENT '密碼', 
  `create_time` string COMMENT '創建時間' 
)
PARTITIONED BY ( 
  `c_date` string)
STORED AS ORC;

c_date字段是年月日yyyyMMdd,也就是按天分區。

1.在舊的HDFS的集羣中的hive裏執行命令,將hive數據導出到一個HDFS目錄下

export table jc_db.t_user to '/tmp/hive-export/jc_db_t_user';

以上默認是將jc_db.t_user所有數據都會導出到HDFS目錄/tmp/hive-export/jc_db_t_user。

2.用DistCp將剛剛的HDFS目錄/tmp/hive-export/jc_db_t_user 複製進新的HDFS,在新的HDFS集羣執行以下命令:

hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true -D dfs.checksum.type=CRC32 hdfs://舊的namenode ip:9000/tmp/hive-export/jc_db_t_user /tmp/hive-export/jc_db_t_user

3.在新的HDFS恢復數據到hive中

import table jc_db.t_user from '/tmp/hive-export/jc_db.t_user';



如使用分區表:

1.在舊的HDFS的集羣中的hive裏執行命令,將hive數據導出到一個HDFS目錄下,但是要c_date分區:

export table jc_db.t_user partition(l_date=20180826) to '/tmp/hive-export/jc_db_t_user_20180826';

2.用DistCp將剛剛的HDFS目錄/tmp/hive-export/jc_db_t_user_20180826 複製進新的HDFS,在新的HDFS集羣執行以下命令:

hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true -D dfs.checksum.type=CRC32 hdfs://舊的namenode ip:9000/tmp/hive-export/jc_db_t_user_20180826 /tmp/hive-export/jc_db_t_user_20180826

3.在新的HDFS恢復分區數據到hive中,並不會影響歷史數據。

import table jc_db.t_user from '/tmp/hive-export/jc_db_t_user_20180826';

報錯:

Failed with exception Cannot get DistCp constructor: org.apache.hadoop.tools.DistCp.<init>()

下載DistCp依賴放入hive的lib目錄:

wget http://central.maven.org/maven2/org/apache/hadoop/hadoop-distcp/2.6.5/hadoop-distcp-2.6.5.jar
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章