集群A上HIVE表数据需同步到集群B上,由于每张表做了日分区,传输部分日期数据,通过手工方式一一筛选比较复杂,编写脚本实现。
#!/bin/sh
hdfs_src="hdfs://源集群NN地址:8020"
hdfs_dst="hdfs://目标集群NN地址:8020"
hadoop_cmd="hadoop distcp -update -bandwidth 50"
declare -A dict //声明字典
dict['talbe1']="/hdfs上table1对应的上层目录/table1"
dict['talbe2']="/hdfs上table2对应的上层目录/table2"
start_day="20190303"
end_day="20190509"
for table in $(echo ${!dict[*]}) //遍历字典所有key值,即表名
do
hdfs_path=$(echo ${dict[$table]}) //赋值每张表对应的hdfs路径
start_date=`date -d "$start_day" +%Y%m%d` //获取日期变量
end_date=`date -d "$end_day" +%Y%m%d`
while [[ $start_date < $end_date ]]
do
hadoop distcp -update -bandwith 15 $hdfs_src$hdfs_path/dt=$start_date $hdfs_dst$hdfs_path/dt=$start_date
start_date=`date -d "+1 day $start_date" +%Y%m%d`
done
done
之后在集群B上建库建表,执行msck repair table 表名。这步后面再更新到脚本中。