فهرست منبع

docs(kb): 90 §2.6 平迁收敛 + 新增 §九 待讨论议题

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
tianyu.chu 2 هفته پیش
والد
کامیت
f27e4d2d1e
2فایلهای تغییر یافته به همراه25 افزوده شده و 9 حذف شده
  1. 24 9
      kb/90-重构路线.md
  2. 1 0
      kb/92-重构进度.md

+ 24 - 9
kb/90-重构路线.md

@@ -13,7 +13,7 @@
 |------|------|------|-----------|
 | **A** | 配置外移 / 硬编码清理 | `conf/env.sh` / `workers.ini` / `alerter.ini` / `spark-defaults.conf` / `datax-speed.ini` / datasource 多环境 / DataX 路径解耦 | 阶段 2 主体 |
 | **B** | `dw_base/` 重组 | B1 `__init__.py` 瘦身 · B2 `common/utils/io/ops` 四模块边界定稿 · B3 代码风格修正(`__contains__` / SQL 注入 / Shell-Python 重复) · B4 新占位模块 registry | 阶段 2 / 4 混合 |
-| **C** | `bin/` 入口收口 | `datax-import` / `datax-export` 两命令收口 · `datax-gc-generator` 从零重写 · `csv-to-hdfs-starter` 实现 · `publish.sh` 已入 `bin/` | 阶段 1 尾 + 阶段 2 |
+| **C** | `bin/` 入口收口 | `datax-import` / `datax-export` 两命令收口 · `datax-gc-generator` 从零重写 · `csv-to-hdfs-starter` 实现 | 阶段 1 尾 + 阶段 2 |
 | **D** | 基础设施 | `tests/` 测试体系 · 告警模块重写 · 日志模块统一 · `dq/` 数据质量 · `wiki/` Docmost · `pm/` 项目管理集成 | 阶段 2 / 4 |
 | **F** | 老代码删除 | `launch-pad/` 整删 · 其他已确认废弃 | 阶段 5 |
 
@@ -174,19 +174,28 @@ L3   SparkSQL(...) 显式传参  +  extra_spark_config  +  命令行 -sc
 - `bin/datax-job-config-generator.py` — ini → json 翻译器(内部工具)
 - `bin/datax-gc-generator.py` — ini 元生成器(详见 §2.7)
 
-**目标态**:顶层收成两个命令,每个命令内部吃 single / batch 两种输入形态;底层的 json 翻译 / worker 选择 / 日志路径由公共模块承担,调用方不感知。
+**目标态**:顶层收成两个命令,命名锁定 `bin/datax-hive-import-starter.sh` / `bin/datax-hdfs-export-starter.sh`(对齐现有 `spark-sql-starter` / `datax-*-starter` 命名风格);参数按老入口一比一平迁、不引入新能力;底层 worker 选择 / 日志路径 / json 翻译下沉到 `dw_base/datax/` 包内,调用方不感知。
 
-| 顶层命令 | 语义 | 关键参数 |
+| 顶层命令 | 语义 | 参数集(老入口平迁) |
 |---|---|---|
-| **`bin/datax-import`**(命名待确认) | 导入到 Hive(目标侧带分区管理) | `-ini <file>` 单 ini · `-inis <dir>` 批量 · `-dt <yyyymmdd>` 指定分区 · `-start-date / -stop-date` 日期范围展开 · `-skip-exist` 默认开,已存在分区跳过 · `-force-overwrite` 强制覆盖 · `-skip-partitions <csv>` 手动跳过特定分区 · `-env <dev\|test\|prod>` |
-| **`bin/datax-export`**(命名待确认) | 从 Hive/HDFS 导出到外部系统(源侧带路径探测) | `-ini / -inis` 同上 · `-src-check`(默认 fail-fast)· `-skip-missing` 源路径缺失时跳过不报错 · `-dt / -start-date / -stop-date` · `-env` |
+| **`bin/datax-hive-import-starter.sh`** | 目标=Hive(reader=外部 / writer=hdfs + 自动分区),对应 `jobs/raw/` | `-ini <file>` 单 ini · `-inis <dir>` 目录批量 · `-start-date / -stop-date` · `-host / -random` · `-parallel` · `-skip-datax` · `-skip-partition`(默认开启分区管理)· `-t <db.table>` 显式追加需建分区的表 |
+| **`bin/datax-hdfs-export-starter.sh`** | 源=HDFS(reader=hdfs / writer=外部如 ES/Mongo/MySQL/Kafka),对应 `jobs/ads/` | 同上减 `-skip-partition` / `-t`;源路径存在性 check 沿用老 `check_data_exists` 默认 fail-fast 行为,不暴露开关 |
+
+**老参数不平迁**(新入口移除):
+
+- `-c / -cd / -jc / -jcd`:json 输入形态不再对外暴露,入口自动调 ini→json 翻译
+- `--override` + 5 个脚本内 `xxx_array=()`(`partitioned_tables` 等):数组在老 `datax-multiple-hive-job-starter.sh` 中本就是未激活的空壳(2026-04-23 查证),一并删除
 
 **实现建议**:
 
-1. 把老脚本 worker 选择、日志路径、json 翻译提到 Python 模块 `dw_base/datax/entry.py`,两个 sh 只做参数解析 + 调用
-2. 分区检查:`datax-import` 在执行前 `SHOW PARTITIONS` 目标表 → 命中则按 `-skip-exist` / `-force-overwrite` 决策;`datax-export` 在执行前 `hdfs dfs -test -e <源路径>` → 不存在按 `-src-check` / `-skip-missing` 决策
-3. `-inis` 的批量展开规则:传目录则递归扫 `.ini` 文件,传文件列表(`jobs.list`)则读文件每行一个 ini
-4. 老脚本 `datax-single-job-starter.sh` / `datax-multiple-*-starter.sh` 在两个新命令稳定后整体删除,保留一期转发封装作为兼容
+1. 新增 `dw_base/datax/{entry,runner,batch,worker,partition,path_utils}.py` 6 个模块,把老 shell 脚本里的 worker 选择 / 批量展开 / 日志路径派生 / ini→json 翻译 / Hive 分区管理逻辑全部搬迁,两个 sh 只做 bash 环境初始化 + 参数解析 + 调 python
+2. 模块放 `dw_base/datax/` 包内,不横跨 `io/` / `utils/` —— **放宽聚簇 B2 前置**(四模块边界定稿前先落地)。等 B2 定稿后,`path_utils.log_path` 等纯函数、`worker.ssh_run` 中跨包部分再挪到 `dw_base/utils/` / `dw_base/io/`,只改 import 路径
+3. `-inis <dir>` 目录扫描只递归 `.ini` 文件
+4. 老脚本 `datax-{single,multiple,multiple-hive}-job-starter.{sh,py}` + `datax-job-config-generator.py` 在冒烟 2(新入口端到端通过)后整体删,**不保留兼容转发封装**
+
+**本轮不做、后延 ADR**:下列能力属新增需求、非老入口平迁,暂不实现;若将来出现明确场景,单独开 ADR 落 `kb/93`:
+
+- 日期范围自动按日展开 + N 个 json 分发多 worker(`-start-date 20260401 -stop-date 20260410` → 自动切 10 份 json,每份独立选 worker)
 
 **第三条命令 `datax-gc-generator`(ini 元生成器)独立保留**:用户已确认。职责是"从 PG 扫 schema 生成 ini 参考模板",和"执行 ini"不是一回事,不收口到上面两条里。详见 §2.7。
 
@@ -640,3 +649,9 @@ else:
 - C `bin/` 两命令 / `datax-gc-generator` 重写 ← B2 + A datax
 - D `ops/` 下两个工具 ← B2
 - F `launch-pad/` 整删 ← 新业务 SQL 生产稳定一个完整周期(新业务开发本身不属于重构 scope)
+
+## 九、待讨论议题
+
+以下议题已登记为未来专题讨论对象,暂不展开、不纳入聚簇推进:
+
+- **分布式任务分发**:DolphinScheduler worker 分发机制 × 新入口 `dw_base/datax/` 内部实现(worker 选择 / 批量展开 / 日志路径 / ssh 并发)的交互关系。

+ 1 - 0
kb/92-重构进度.md

@@ -192,3 +192,4 @@
 | 2026-04-23 | **kb/00 §2 模块关系图并入 §5 执行链路 + 新增 §6 基础模块骨架**:`模块关系图`(静态依赖拓扑)与 `执行链详解`(动态调用)在本项目线性链式结构下几乎 1:1,合并为 §5 **执行链路**(业界更通用表述);新增 §6 **基础模块** 骨架,后续介绍 `dw_base/` 除 `spark/` / `datax/` / `udf/` 外的其他模块。子节编号随父节上移:§3.1 配置分类 → §2.1;§5.1 常用参数 → §4.1;§5.2 Spark 参数优先级 → §4.2。最终 §1 目录结构 / §2 配置管理体系 / §3 DataX 入口 / §4 Spark 入口 / §5 执行链路 / §6 基础模块 / §7 部署架构 | — |
 | 2026-04-23 | **新增 kb/93-架构决策.md 骨架(永久文档)**:作为重构收尾后 `90-重构路线.md` / `91-重构备忘.md` / `92-重构进度.md` 三份过程文档压缩留档的 ADR 沉淀点;当前仅留"说明 + 决策清单(待补充)"骨架;README §9x 过渡资料表加行 | — |
 | 2026-04-23 | **kb/00 改名项目导览 + kb/93 补 ADR 模板 + kb/91 入库**:(a) `kb/00-项目架构.md` → `kb/00-项目导览.md`(git mv),文档定位收敛为"新人 / 外部协作者入口";级联改 README(索引行 + 阅读建议 #1)、CLAUDE.md 冷启动必读、kb/02 §4 + kb/30 §6 + kb/90 §1.2 跨文档引用、kb/92 阶段 0 checklist;历史 changelog 里的 `00-项目架构.md` 字面量保留为 snapshot 不改;(b) kb/93 按业界主流(Michael Nygard)补 5 段 ADR 模板(Context / Decision / Consequences / Alternatives / Reversal Trigger);(c) `kb/91-重构备忘.md` 从 untracked 入库(保留现有 DataX 脚本使用说明内容,作为重构期间的独立备忘文件) | — |
+| 2026-04-23 | **kb/90 §2.6 两入口收口按老入口平迁收敛 + 新增 §九 待讨论议题**:(a) §2.6 命名锁定 `datax-hive-import-starter.sh` / `datax-hdfs-export-starter.sh`(对齐 `-starter` 风格);参数表删 6 项新设计(`-dt` / `-skip-exist` / `-force-overwrite` / `-skip-partitions` / `-src-check` / `-env`),改为老参数平迁集,其中 `-env` 本轮不做且未来不规划(datasource 已扁平化);`-c` / `-cd` / `-jc` / `-jcd` + `--override` + 5 个 `xxx_array=()` 不平迁(后两者在老脚本从未激活使用,2026-04-23 查证);实现建议改为 6 个新模块落 `dw_base/datax/` 包内(放宽 B2 前置)、老脚本冒烟 2 通过后整体删不留转发封装;后延 ADR 锚点 1 项(日期范围展开);(b) 新增 §九 待讨论议题锚点,先登记"分布式任务分发"(DS worker × 新入口内部实现)一项 | — |