Hive增量迁移方案与实操PB级
客户一共1PB数据,每天新增10T,有些表只保留3天。
需要客户提供:
a.tbl_size(大小GB) a.last_mtime(最新更新时间) a.tbl_ttl(保留时间) b.last_part_dt(分区值) b.last_part_size(最新分区大小) t_day(表更新规律,t+几)
因为目前离全量迁移,已经过了一个月了
1、先update全部的表(去掉30天以内不保留的)
删除30天内的,90T,重迁
2、其他表删除当前最新分区(不改历史,只改最近的,所以我删除最近的)
,直接迁移update
----检测当前最新分区脚本输出,删除最新分区,update迁移整张表
增量hdfs数据追平-CSDN博客
3、定时update-delete表,T+2分区数据。(客户自己跑T+1)
qianyi_delete_update.sh
#!/bin/bash#1.读取文件su - hadoop
#改成自己互信的票据
`kinit -kt /var/krb5kdc/emr.keytab hadoop/xx.xx.xx.107@TBDS-09XXXXXE`
#获取当天减2,T+2的时间
dt_jian_2=$(date -d "-2 days" +%Y%m%d)
echo $dt_jian_2BEELINE_CMD="beeline -u 'jdbc:hive2://xx.xx.xx.104:7001/cfc;principal=hadoop/xx.xx.xx.104@TBDS-09XXXXXE'"echo "时间$dt_jian_2-------------------------" >> /home/hadoop/qianyi_zengliang/rs.txt
while IFS= read -r table_name
dosource_path=hdfs://xx.xx.xx.7:8020/apps/hive/warehouse/bigdata.db/$table_nametarget_path=hdfs://xx.xx.xx.104:4007/apps/hive/warehouse/bigdata.db/$table_nameecho "删除表: $table_name ,开始hdfs://xx.xx.xx.104:4007/apps/hive/warehouse/bigdata.db/$table_name/dt=$dt_jian_2"hdfs dfs -rm -r hdfs://xx.xx.xx.104:4007/apps/hive/warehouse/bigdata.db/$table_name/dt=$dt_jian_2#2.distcp,update,delete迁移#手动指定分区hadoop distcp -skipcrccheck -i -strategy dynamic -bandwidth 30 -m 20 $source_path/dt=$dt_jian_2 $target_path/dt=$dt_jian_2#修复分区$BEELINE_CMD -e "MSCK REPAIR TABLE $table_name;"if [ $? -eq 0 ]; thenecho "Successfully repaired partitions for table: $table_name"elseecho "Failed to repair partitions for table: $table_name"fi echo "完成$source_path到$target_path的t-2的更新,$dt_jian_2" >> /home/hadoop/qianyi_zengliang/rs.txt
done < "$1"
b_input_table.txt
ods_xxx
dwd_xxx
crontab -e
46 12 * * * source /etc/profile && nohup sh /home/hadoop/qianyi_zengliang/qianyi_delete_update.sh /home/hadoop/qianyi_zengliang/b_input_table.txt > /home/hadoop/qianyi_z
engliang/b.log 2>&1 &
4、最后建表补数1241张
补数没有分区的,以及分区不是dt的(1T)