metastore和hdfs事务一致性设计

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目录

  1. 删除表时,先将表进行 rename 操作(完整的 mysql 事务)
  2. 开启 mysql 事务
  3. 尝试创建 /tmp/metastore/transaction/dd_edw/20230315 目录
  4. 将表rename 到 /tmp/metastore/transaction/dd_edw/20230315 进行备份
  5. 事务提交成功后,直接将备份目录数据删除,即直接移动到Trash目录,hdfs://ns1/user/dd_edw/.Trash/Current/tmp/metastore/transaction/dd_edw/20230315/user/dd_edw/app.db/app_dd_edw230315_1700_001
  6. 如果事务提交失败,将备份目录的数据恢复到原始表目录,并将 rename 的表恢复

moveToTrash 换成rename

分布式锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值