Sfoglia il codice sorgente

refactor(workers): DATAX_WORKERS + RELEASE_HOST 外移到 conf/workers.ini

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
tianyu.chu 2 settimane fa
parent
commit
05c3f52a23
4 ha cambiato i file con 48 aggiunte e 15 eliminazioni
  1. 32 12
      bin/common/init.sh
  2. 12 0
      conf/workers.ini
  3. 2 2
      kb/90-重构路线.md
  4. 2 1
      kb/92-重构进度.md

+ 32 - 12
bin/common/init.sh

@@ -10,22 +10,42 @@ fi
 BANNED_USER="root"
 USER="$(whoami)"
 CURRENT_HOST=$(hostname -s)
-RELEASE_HOST="m3"
 PROJECT_NAME=$(basename "${BASE_DIR}")
-DATAX_WORKERS=(
-  m3 d1 d2 d3 d4
-)
-declare -A DATAX_WORKERS_WEIGHTS=(
-  ["m3"]=1
-  ["d1"]=2 ["d2"]=2 ["d3"]=3 ["d4"]=3
-)
+
+# 从 conf/workers.ini 加载 RELEASE_HOST + DATAX_WORKERS + 权重 + 加权随机池
+declare -A DATAX_WORKERS_WEIGHTS
+DATAX_WORKERS=()
+_section=""
+while IFS= read -r _line; do
+  _line="${_line%%[;#]*}"
+  _line="$(echo -n "${_line}" | xargs)"
+  [[ -z "${_line}" ]] && continue
+  if [[ "${_line}" =~ ^\[(.+)\]$ ]]; then
+    _section="${BASH_REMATCH[1]}"
+    continue
+  fi
+  case "${_section}" in
+    release)
+      if [[ "${_line}" =~ ^host[[:space:]]*=[[:space:]]*(.+)$ ]]; then
+        RELEASE_HOST="${BASH_REMATCH[1]}"
+      fi
+      ;;
+    weights)
+      if [[ "${_line}" =~ ^([^[:space:]=]+)[[:space:]]*=[[:space:]]*([0-9]+)$ ]]; then
+        DATAX_WORKERS+=("${BASH_REMATCH[1]}")
+        DATAX_WORKERS_WEIGHTS["${BASH_REMATCH[1]}"]="${BASH_REMATCH[2]}"
+      fi
+      ;;
+  esac
+done < "${BASE_DIR}/conf/workers.ini"
+
 DATAX_WORKERS_QUEUE=()
-# 定义一个map存储机器的ip地址和分配的权重
-for key in ${!DATAX_WORKERS_WEIGHTS[*]}; do
-  for ((i = 0; i < ${DATAX_WORKERS_WEIGHTS[$key]}; i++)); do
-    DATAX_WORKERS_QUEUE+=("$key")
+for _key in "${!DATAX_WORKERS_WEIGHTS[@]}"; do
+  for ((_i = 0; _i < DATAX_WORKERS_WEIGHTS[$_key]; _i++)); do
+    DATAX_WORKERS_QUEUE+=("${_key}")
   done
 done
+unset _section _line _key _i
 if [ "${USER}" == "${BANNED_USER}" ]; then
   pretty_print "${NORM_RED}Project ${NORM_GRN}${PROJECT_NAME}${NORM_RED} is running by banned user ${NORM_GRN}${BANNED_USER}${NORM_RED}, exit with error code ${NORM_GRN}18"
   exit 18

+ 12 - 0
conf/workers.ini

@@ -0,0 +1,12 @@
+; DataX Worker 列表与权重 + RELEASE_HOST
+; key = 短名(hostname -s),value = 权重整数(越大越常被随机选中)
+; 消费点:bin/common/init.sh 解析后展开 RELEASE_HOST + DATAX_WORKERS + DATAX_WORKERS_WEIGHTS + DATAX_WORKERS_QUEUE(加权随机池)
+
+[release]
+host = cdhmaster02
+
+[weights]
+cdhmaster02 = 1
+cdhnode01 = 3
+cdhnode02 = 3
+cdhnode03 = 3

+ 2 - 2
kb/90-重构路线.md

@@ -108,7 +108,7 @@ D 基础设施 ─────┘
 | 硬编码内容 | 所在位置 | 建议方案 |
 |-----------|---------|---------|
 | 项目部署目录 `poyee-data-warehouse/` | `bin/publish.sh`(2026-04-20 从根目录挪入 `bin/`) | 新项目发布目录为 `/home/bigdata/release/poyee-data-warehouse/` |
-| `DATAX_WORKERS=(m3 d1 d2 d3 d4)` + `DATAX_WORKERS_WEIGHTS` 权重 map | `init.sh`(含展开 `DATAX_WORKERS_QUEUE` 的循环) | workers 列表 + 权重 map **整体**移入 `conf/workers.ini`(ini 格式),`init.sh` 仅保留读取 + 展开逻辑 |
+| `DATAX_WORKERS` + `DATAX_WORKERS_WEIGHTS` + `RELEASE_HOST` 硬编码 | `bin/common/init.sh:13-28` | ✅ 2026-04-23 整体移入 `conf/workers.ini`(`[release] host` + `[weights]` 两 section,ini 格式入库),init.sh 改为纯 bash 解析;新集群 hostname cdhmaster02 / cdhnode01-03 |
 | `HADOOP_CONF_DIR='/etc/hadoop/conf'` | `__init__.py` | 使用系统环境变量 |
 | 告警 Webhook(钉钉 / 企微 Key) | `dw_base/common/alerter_constants.py`(老告警模块已于 2026-04-20 删除,含 `dingtalk_notifier.py` / `ent_interface_dingtalk*` / `bin/dingtalk-work-alert.sh`) | 新告警模块重写时 Webhook Key 外移到 `conf/alerter.ini`(**入库**——部署靠 git pull,gitignore 会拉不到;webhook key 不算高敏感,最多被拿去发垃圾消息),Python 侧改 ConfigParser 加载;`alerter_constants.py` 整个删除;新项目不再使用钉钉 |
 | Spark 默认参数(executor/driver/shuffle/sql.*) | `dw_base/spark/spark_sql.py` 构造函数 + `.config(...)` 链 | 移入 `conf/spark-defaults.conf`,SQL 文件可用 `SET` 覆盖,见 §2.3 |
@@ -588,7 +588,7 @@ else:
 | 子项 | 状态 | 依赖 | 参见 |
 |------|------|------|------|
 | `conf/env.sh`(LOG_ROOT_DIR / RELEASE_USER / RELEASE_ROOT_DIR / PYTHON3_PATH / DATAX_HOME) | 待启动 | — | §2.1 / §7.2.1 |
-| `conf/workers.ini`(DataX Workers + 权重 map 外移) | 待启动 | — | §2.1 |
+| `conf/workers.ini`(DataX Workers + 权重 map 外移) | ✅ 2026-04-23 | — | §2.1 |
 | `conf/alerter.ini`(告警 Webhook,入库) | 待启动 | 旧告警代码删除(已 2026-04-20 完成) | §2.1 |
 | `conf/spark-defaults.conf`(底层 11 条)+ `conf/spark-tuning.conf`(调优 10 条)+ `spark_sql.py` 三级覆盖 | ✅ 2026-04-21 | — | §2.3 |
 | `conf/datax-speed.ini`(DataX 分时速率) | 待启动 | — | §2.9 |

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

@@ -65,7 +65,7 @@
 - [ ] 新建项目根 `.gitignore`(清单与注意事项见 `90-重构路线.md` §2.4)
 - [x] 建立 `conf/env.sh`(Shell + Python 环境变量单源,5 vars:RELEASE_USER / RELEASE_ROOT_DIR / PYTHON3_PATH / DATAX_HOME / LOG_ROOT_DIR)
 - [x] Python 侧由 `dw_base/utils/env_loader.py` 通过 bash 子进程解析注入 `os.environ`(单源,不做双份配置)
-- [ ] 建立 `conf/workers.ini`(DataX Worker 列表 + 权重 map,整体迁出 `bin/common/init.sh:18-31`
+- [x] 建立 `conf/workers.ini`(DataX Worker 列表 + 权重 map,整体迁出 `bin/common/init.sh:13-28`;2026-04-23 落地,新集群 hostname 适配 cdhmaster02 / cdhnode01-03
 - [ ] 建立 `conf/alerter.ini`(企微 Webhook,**入库**;格式见 `90-重构路线.md` §2.1)
 - [x] `dw_base/__init__.py` 瘦身(2026-04-21,修剪式,不拆 `core/`;见 `90-重构路线.md` §三 已完成态)
 - [x] 建立 `conf/spark-defaults.conf`(底层行为/开关类 11 条,少改)+ `conf/spark-tuning.conf`(资源/并行度 10 条,业务常改)(2026-04-21,Spark 原生格式;两文件拆分,见 `90-重构路线.md` §2.3)
@@ -193,3 +193,4 @@
 | 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 × 新入口内部实现)一项 | — |
+| 2026-04-23 | **聚簇 A.2 `conf/workers.ini` 外配 + 新集群 hostname 适配**:`bin/common/init.sh` 原硬编码 `RELEASE_HOST="m3"` + `DATAX_WORKERS=(m3 d1 d2 d3 d4)` + `DATAX_WORKERS_WEIGHTS` map + 队列展开 for 循环(L13-28),整体外移到 `conf/workers.ini`(`[release] host` + `[weights]` 两 section,ini 格式入库);init.sh 改为纯 bash 读 ini(case + BASH_REMATCH 正则,不调 Python,避免 bash/py 双源漂移)。新集群 hostname 从老短名 m3/d1-d4 换到真实短名 cdhmaster02 / cdhnode01-03(用户 2026-04-23 提供),权重从 1/2/2/3/3 改为 1/3/3/3(master 1、3 个 worker 均权 3)。联动 kb/90 §2.1 行标 ✅ + §八 A 聚簇状态表行标 ✅ | — |