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"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值