客戶一共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)