|
@@ -116,14 +116,9 @@ D 基础设施 ─────┘
|
|
|
|
|
|
|
|
| 硬编码内容 | 所在位置 | 建议方案 |
|
|
| 硬编码内容 | 所在位置 | 建议方案 |
|
|
|
|-----------|---------|---------|
|
|
|-----------|---------|---------|
|
|
|
-| `DATAX_HOME=/opt/datax`(2026-04-20 默认值对齐新环境 + 改条件赋值 `${DATAX_HOME:-/opt/datax}`) | `bin/common/init.sh` | 条件赋值铺垫已就位;完整迁入 `conf/env.sh` 待 §2.1 正式推进 |
|
|
|
|
|
-| `PYTHON3_PATH="/usr/bin/python3"` | `bin/common/init.sh` | 移入 `conf/env.sh` |
|
|
|
|
|
-| `RELEASE_USER="alvis"` | `bin/common/init.sh` | 改为 `RELEASE_USER="bigdata"` 并移入 `conf/env.sh` |
|
|
|
|
|
-| `RELEASE_ROOT_DIR="/home/alvis/release"` | `init.sh`、`__init__.py` | 改为 `/home/bigdata/release` 并移入 `conf/env.sh` |
|
|
|
|
|
| 项目部署目录 `poyee-data-warehouse/` | `bin/publish.sh`(2026-04-20 从根目录挪入 `bin/`) | 新项目发布目录为 `/home/bigdata/release/poyee-data-warehouse/` |
|
|
| 项目部署目录 `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:18-31`(含展开 `DATAX_WORKERS_QUEUE` 的循环) | workers 列表 + 权重 map **整体**移入 `conf/workers.ini`(ini 格式),`init.sh` 仅保留读取 + 展开逻辑 |
|
|
|
|
|
|
|
+| `DATAX_WORKERS=(m3 d1 d2 d3 d4)` + `DATAX_WORKERS_WEIGHTS` 权重 map | `init.sh`(含展开 `DATAX_WORKERS_QUEUE` 的循环) | workers 列表 + 权重 map **整体**移入 `conf/workers.ini`(ini 格式),`init.sh` 仅保留读取 + 展开逻辑 |
|
|
|
| `HADOOP_CONF_DIR='/etc/hadoop/conf'` | `__init__.py` | 使用系统环境变量 |
|
|
| `HADOOP_CONF_DIR='/etc/hadoop/conf'` | `__init__.py` | 使用系统环境变量 |
|
|
|
-| `LOG_ROOT_DIR="/opt/data/log"` + whoami 分流 | `init.sh`、`__init__.py` | 删除 whoami 分支,单值改为 `${HOME}/log` 并迁入 `conf/env.sh`,见 §7.2.1 |
|
|
|
|
|
| 告警 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` 整个删除;新项目不再使用钉钉 |
|
|
| 告警 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 |
|
|
| Spark 默认参数(executor/driver/shuffle/sql.*) | `dw_base/spark/spark_sql.py` 构造函数 + `.config(...)` 链 | 移入 `conf/spark-defaults.conf`,SQL 文件可用 `SET` 覆盖,见 §2.3 |
|
|
|
| DataX ini 路径前缀剥离 `conf/datax/config/` | `bin/datax-single-job-starter.sh`(TEMP 处理)、`bin/datax-job-config-generator.py`(`replace('conf/datax/config/', '')`)、`bin/datax-multiple-job-starter.sh`(日志路径派生) | 原目录已整体挪到 `conf/bak/` 并 gitignore,脚本里 replace 现在是 no-op 死逻辑。去除前缀假设,改为靠 ini 文件名(= 任务唯一标识,见 `21-命名规范.md` §3.9)识别用途 |
|
|
| DataX ini 路径前缀剥离 `conf/datax/config/` | `bin/datax-single-job-starter.sh`(TEMP 处理)、`bin/datax-job-config-generator.py`(`replace('conf/datax/config/', '')`)、`bin/datax-multiple-job-starter.sh`(日志路径派生) | 原目录已整体挪到 `conf/bak/` 并 gitignore,脚本里 replace 现在是 no-op 死逻辑。去除前缀假设,改为靠 ini 文件名(= 任务唯一标识,见 `21-命名规范.md` §3.9)识别用途 |
|
|
@@ -141,8 +136,7 @@ D 基础设施 ─────┘
|
|
|
|
|
|
|
|
```
|
|
```
|
|
|
conf/
|
|
conf/
|
|
|
-├── env.sh # Shell 环境变量(路径、用户、日志目录等)
|
|
|
|
|
-├── env.py # Python 环境变量(或直接读 env.sh)
|
|
|
|
|
|
|
+├── env.sh # Shell + Python 环境变量单源(Python 侧由 dw_base/utils/env_loader.py 通过 bash 子进程解析注入 os.environ)
|
|
|
├── workers.ini # DataX Worker 列表与权重
|
|
├── workers.ini # DataX Worker 列表与权重
|
|
|
├── alerter.ini # 告警 Webhook 配置(入库;见 §2.1)
|
|
├── alerter.ini # 告警 Webhook 配置(入库;见 §2.1)
|
|
|
└── spark-defaults.conf # Spark 默认参数(Spark 原生格式)
|
|
└── spark-defaults.conf # Spark 默认参数(Spark 原生格式)
|
|
@@ -701,37 +695,15 @@ tests/
|
|
|
- `Logging` 类定义了但很少使用
|
|
- `Logging` 类定义了但很少使用
|
|
|
- **建议**:统一使用 Python `logging` 模块,配置 handler 实现控制台+文件双输出
|
|
- **建议**:统一使用 Python `logging` 模块,配置 handler 实现控制台+文件双输出
|
|
|
|
|
|
|
|
-### 7.2.1 日志路径按 whoami 分流的硬编码逻辑
|
|
|
|
|
|
|
+### 7.2.1 日志路径约定
|
|
|
|
|
|
|
|
-**现状:** `bin/common/init.sh` 和 `dw_base/__init__.py` 硬编码 `RELEASE_USER="alvis"`,并按 `whoami` 是否等于该用户分流日志目录:
|
|
|
|
|
|
|
+日志文件统一落 `${LOG_ROOT_DIR}/{module}/{dt}/{file}.log`:
|
|
|
|
|
|
|
|
-```bash
|
|
|
|
|
-if [ "$(whoami)" = "${RELEASE_USER}" ]; then
|
|
|
|
|
- LOG_ROOT_DIR="/opt/data/log" # release 用户走系统日志目录
|
|
|
|
|
-else
|
|
|
|
|
- LOG_ROOT_DIR="${HOME}/data/log" # 其他用户走自己家目录
|
|
|
|
|
-fi
|
|
|
|
|
-```
|
|
|
|
|
-
|
|
|
|
|
-**方向:删除 whoami 分流,统一落 `${HOME}/log/{module}/{dt}/{file}.log`**
|
|
|
|
|
-
|
|
|
|
|
-- release 用户 `bigdata`:`$HOME` = `/home/bigdata`,日志落 `/home/bigdata/log/{module}/{dt}/{file}.log`
|
|
|
|
|
-- 个人调试用户:`$HOME` = 各自家目录,日志落 `/home/{user}/log/{module}/{dt}/{file}.log`
|
|
|
|
|
-- `$HOME` 本身就按用户隔离,无需代码再判断 `whoami`
|
|
|
|
|
-
|
|
|
|
|
-**为什么去掉 `/opt/data/log` 这条路**:原来 release 用户走系统级 `/opt/data/log` 的理由是"生产日志不应混在个人 home",但 `bigdata` 本身就是专属调度账号,它的 `$HOME` 就是生产日志的合法归宿,不需要再多开一条系统目录。路径统一后,权限 / 轮转 / 清理策略只需按一套做。
|
|
|
|
|
-
|
|
|
|
|
-**为什么保留 `LOG_ROOT_DIR` 在 `conf/env.sh` 里**:虽然默认值只有 `${HOME}/log` 一条,但仍作为**单一默认值**外配到 `conf/env.sh`,保留后期改路径的口子(比如某天运维要求共享一块专用盘,改一处即可,无需改代码)。
|
|
|
|
|
-
|
|
|
|
|
-**为什么改目的地形态为 `{module}/{dt}/{file}.log`**:
|
|
|
|
|
-- 当前老结构 `/opt/data/log/datax/20260418/xxx.log` 已按 `{module}/{dt}/` 分,但不是所有入口都遵守(spark、ds 等散落在各自子结构下)
|
|
|
|
|
-- 新结构强制三级 `{module}/{dt}/{file}.log`,便于按天归档 + 按模块清理
|
|
|
|
|
-- `{module}` 取值:`datax` / `spark` / `ds` / `csv` / `export` 等顶层入口名
|
|
|
|
|
|
|
+- `LOG_ROOT_DIR` 默认 `${HOME}/log`,外配在 `conf/env.sh`
|
|
|
|
|
+- `{module}` 取值 `datax` / `spark` / `ds` / `csv` / `export` 等顶层入口名
|
|
|
|
|
+- `{dt}` 格式 `yyyymmdd`
|
|
|
|
|
|
|
|
-**代码改动:**
|
|
|
|
|
-1. 删除 `whoami == RELEASE_USER` 分支逻辑,`LOG_ROOT_DIR` 单值从 `conf/env.sh` 读,默认 `${HOME}/log`
|
|
|
|
|
-2. 日志文件路径拼接统一走一个工具函数 `log_path(module, dt, file)`(Python 和 Shell 各一份),避免入口脚本各自拼
|
|
|
|
|
-3. `RELEASE_USER` 作为单一来源定义在 `conf/env.sh`,与 publish.sh 共用(日志路径已不依赖它,但 publish.sh 仍要)
|
|
|
|
|
|
|
+**待建**:`log_path(module, dt, file)` 工具函数 Python / Shell 各一份,避免入口脚本各自拼。
|
|
|
|
|
|
|
|
### 7.3 部署改进
|
|
### 7.3 部署改进
|
|
|
|
|
|