hive全量迁移脚本
- 互联网
- 2025-09-03 12:48:02

#!/bin/bash #场景:数据在同一库下,并且hive是内部表(前缀的hdfs地址是相同的) #1.读取一个文件,获取表名 #echo "时间$dt_jian_2-------------------------" >> /home/hadoop/qianyi_zengliang/rs.txt #跟客户宽带有关,万兆(1.2g),然后咨询业务后,看监控高峰,大概可以用一般600mb/s pinjie="hadoop distcp -skipcrccheck -i -strategy dynamic -bandwidth 30 -m 20 " while IFS= read -r table_name do source_path=hdfs://xx.xx.xx.7:8020/apps/hive/warehouse/bigdata.db/$table_name target_path=hdfs://xx.xx.xx.104:4007/apps/hive/warehouse/bigdata.db/$table_name echo "删除表: $table_name ,开始hdfs://xx.xx.xx.104:4007/apps/hive/warehouse/bigdata.db/$table_name" hdfs dfs -rm -r $target_path #2.删除目标表所有的路径,拼接起来 pinjie="$pinjie $source_path" done < "$1" #3.拼接所有的地址,迁移到一个库下,改成自己的 pinjie="$pinjie hdfs://xx.xx.xx.104:4007/apps/hive/warehouse/bigdata.db" $pinjie # 设置beeline的连接信息,改成自己的 BEELINE_CMD="beeline -u 'jdbc:hive2://xx.xx.xx.104:7001/cfc;principal=hadoop/xx.xx.xx.104@TBDS-09T7KXLE'" #4.进行表分区修复 while IFS= read -r table_name do # 执行MSCK REPAIR TABLE命令 echo "Repairing partitions for table: $table_name" $BEELINE_CMD -e "MSCK REPAIR TABLE $table_name;" if [ $? -eq 0 ]; then echo "Successfully repaired partitions for table: $table_name" else echo "Failed to repair partitions for table: $table_name" fi done < "$1"
使用方法
sh xx.sh input_table.txt
input_table.txt要保证,里面是一个个表名,并且他们都在同一个hdfs库的目录下。
hive全量迁移脚本由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“hive全量迁移脚本”