drop_table(内部表)
- 极光格式
- hdfs://ns*/tmp/aurora/lifecycle/业务线/日期 /user/账号/库/表
- hdfs://ns*/tmp/aurora/lifecycle/mart_dapb/2023-03-10/user/mart_dapb/app.db/test_wq_sc__mart_dapd_prod_table_002_bak_20230310153537
- metastore格式:
- hdfs://ns*/tmp/metastore/transaction(每个ns上有一个固定目录)
- drwxrwxrwx - hadp hadoop 0 2023-03-15 18:59 hdfs://ns1/tmp/metastore/transaction
- hdfs://ns1/tmp/metastore/transaction/dd_edw/20230315/ (帐号/日期,由 metastore 创建)
- drwxr-xr-x - dd_edw hadoop 0 2023-03-15 19:00 hdfs://ns1/tmp/metastore/transaction/dd_edw/20230315
- 示例:
- 表原始路径:hdfs://ns1/user/dd_edw/app.db/app_dd_edw_230314_001
- path.toUri().getPath() -> /user/dd_edw/app.db/app_dd_edw230315_1700_001
- tblPath.uri.getHost() -> ns1
- 原始移动到回收站的目录结构:
- hdfs://ns1/user/dd_edw/.Trash
- hdfs://ns1/user/dd_edw/.Trash/Current/tmp/metastore/transaction/dd_edw/20230315/user/dd_edw/app.db/app_dd_edw230315_1700_001
- 事务改造完后,移动到 hms 专用目录后的结构:
- hdfs://ns1/tmp/metastore/transaction/dd_edw/20230315/user/dd_edw/app.db/app_dd_edw230315_1700_001
- hdfs://ns1/tmp/metastore/transaction/erps/个人账号/20230315/user/dd_edw/app.db/app_dd_edw230315_1700_001
- 个人账号直接erps目录;生产账号 ugi目录
- 表原始路径:hdfs://ns1/user/dd_edw/app.db/app_dd_edw_230314_001
- 删除表时,先将表进行 rename 操作(完整的 mysql 事务)
- 开启 mysql 事务
- 尝试创建 /tmp/metastore/transaction/dd_edw/20230315 目录
- 将表rename 到 /tmp/metastore/transaction/dd_edw/20230315 进行备份
- 事务提交成功后,直接将备份目录数据删除,即直接移动到Trash目录,hdfs://ns1/user/dd_edw/.Trash/Current/tmp/metastore/transaction/dd_edw/20230315/user/dd_edw/app.db/app_dd_edw230315_1700_001
- 如果事务提交失败,将备份目录的数据恢复到原始表目录,并将 rename 的表恢复
- 注
moveToTrash 换成rename
分布式锁