hive数据迁移解决表同步问题

Hive数据迁移方案:

  1. 先通过shell脚本将集群1中hive的数据导入到hdfs中
  2. 将集群1的hdfs中的数据下载在本地
  3. 将集群1的本地数据发送到集群2的本地上;
  4. 将集群2的本地的数据导入到集群2的hdfs上;
  5. 将集群的hdfs上的数据导入到hive中。

步骤:

1.对集群1节点与集群2节点进行免密登录

[root@节点1 .ssh]# ssh-keygen -t rsa

[root@节点1  .ssh]# ssh-copy-id 节点2地址

[root@ 节点2  .ssh]# ssh-keygen -t rsa

[root@节点2  .ssh]# ssh-copy-id 节点1地址

2.将集群1的hive下载到本地并发送到集群2的hive上

     [节点1 bin]# vim脚本名称

#!/bin/bash

#将集群1的hive数据导入到集群1的hdfs,此处注意使用的队列,尝试了其他队列任务失败

hive -e "set mapreduce.job.queuename=kdid5134a7c0789b6bde79a5fa3275ba9addefault;export table 库名.表名 to 'hdfs文件路径'"

#集群1的hdfs数据下载到本地节点1

hadoop fs -get hdfs文件路径 本地路径

#将节点1的本地数据传输到节点2的本地

xsync 节点2的地址

#将集群1的hdfs数据删除

hadoop fs -rm -r 集群1的hdfs文件路径

#将节点1本地信息删除

rm -rf  本地文件路径

#将节点2的本地数据上传到集群2的hdfs

ssh 节点2地址 "hadoop fs -put -p 集群2 hdfs存储路径"

#将集群2的hdfs数据导入到hive表

ssh 节点2地址 "/bin/inputhive.sh"

Path:节点1:/bin/xsync

#!/bin/bash

#xsync用于异地数据传输

#1. 判断参数个数

if [ $# -lt 1 ]

then

  echo Not Enough Arguement!

  exit;

fi

#2. 遍历集群所有机器

for host in 10.10.3.67

do

  #3. 遍历所有目录,挨个发送

  for file in $@

  do

    #4 判断文件是否存在

    if [ -e $file ]

    then

      #5. 获取父目录

      pdir=$(cd -P $(dirname $file); pwd)

      #6. 获取当前文件的名称

      fname=$(basename $file)

      ssh $host "mkdir -p $pdir"

      rsync -av $pdir/$fname $host:$pdir

    else

      echo $file does not exists!

    fi

  done

done

Path: 节点2/bin/inputhive.sh

#!/bin/bash

#如果要导入的表存在则删除该表

hive -e "drop table if exists 库名.表名"

#集群2的hdfs数据导入到hive表,注意此处导入的外部表,如果不添加external导入失败(没有要求外部表的可以忽略)

hive -e "import external table 库名.表名 from 'hdfs存储路径'"

#删除节点2的本地数据

rm -rf 节点2本地数据路径                                       

使用方法:节点1运行脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值