hive迁移要迁移元数据(mysql),要迁移实际数据hdfs,迁移完后如果有分区,通常是不能访问的。
这里就要修复分区了,如果是大表,几十T这种,迁移可能花了24小时,那么你修复分区也可能花这么久,这种表就得手动分区比较快。参考这个几分钟。hive迁移后修复分区慢,怎么办?-CSDN博客
大表就只有那么多张,其他大部分都是小表,比如我这个小表有2000张。
主要用的是MSCK REPAIR TABLE table_name
脚本如下
repair_table.sh
bash
#!/bin/bash
# 设置beeline的连接信息
BEELINE_CMD="beeline -u jdbc:hive2://your_hive_server:10000 -n your_username -p your_password"
#kerbers方式
#BEELINE_CMD="beeline -u jdbc:hive2://xxx:7001/xxx;principal=hadoop/xxx@xxxx"
# 读取包含表名的txt文件
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"
建议第一次,先在下面的table.txt,提供几张小表,测试下,然后没问题,在一次性丢几千张表进去。
用法,准备一个含所有表名的txt
table.txt
里面的内容是
table_name123
ods_a
ods_a12
dwd_b
用法
sh repair_table.sh table.txt
成功,之后自己beeline去hive里面查下就行了