Procházet zdrojové kódy

refactor(env): dw_base/__init__.py 4 项环境硬编码收口到 conf/env.sh

- conf/env.sh 加 HADOOP_CONF_DIR / SPARK_CONF_DIR(${VAR:-default} 兜底,
  与 DATAX_HOME 同款 shell 优先模式)
- __init__.py 删 HADOOP_CONF_DIR / SPARK_CONF_DIR 直 set/setdefault
  (由 bootstrap_env 从 conf/env.sh 注入,shell export 优先)
- PYSPARK_DRIVER_PYTHON / PYSPARK_PYTHON 改用 os.environ['PYTHON3_PATH']
  复用,消除 /usr/bin/python3 重复硬编码
- 行为变化:HADOOP_CONF_DIR 从强制覆盖改为 setdefault(与 RELEASE_USER /
  PYTHON3_PATH 等 5 个已外置变量一致风格;shell 侧未 export 时默认
  /etc/hadoop/conf 不变)
- kb/01 §4 描述同步:默认值定义改为 conf/env.sh
- kb/90 §2.1 配置外移清单 4 项标 ✅
tianyu.chu před 1 týdnem
rodič
revize
4b05674b57
4 změnil soubory, kde provedl 11 přidání a 9 odebrání
  1. 3 1
      conf/env.sh
  2. 6 6
      dw_base/__init__.py
  3. 1 1
      kb/01-运行环境.md
  4. 1 1
      kb/90-重构路线.md

+ 3 - 1
conf/env.sh

@@ -7,4 +7,6 @@ RELEASE_ROOT_DIR="/home/bigdata/release"
 PYTHON3_PATH="/usr/bin/python3"
 DATAX_HOME="${DATAX_HOME:-/opt/datax}"
 LOG_ROOT_DIR="${HOME}/log"
-export RELEASE_USER RELEASE_ROOT_DIR PYTHON3_PATH DATAX_HOME LOG_ROOT_DIR
+HADOOP_CONF_DIR="${HADOOP_CONF_DIR:-/etc/hadoop/conf}"
+SPARK_CONF_DIR="${SPARK_CONF_DIR:-/etc/spark/conf}"
+export RELEASE_USER RELEASE_ROOT_DIR PYTHON3_PATH DATAX_HOME LOG_ROOT_DIR HADOOP_CONF_DIR SPARK_CONF_DIR

+ 6 - 6
dw_base/__init__.py

@@ -11,12 +11,12 @@ from dw_base.utils.env_loader import bootstrap_env
 bootstrap_env()
 
 
-# HADOOP_CONF_DIR:spark-submit 启动 YARN 校验需要;DataX JVM 不读 classpath conf,HA 由 ini [hadoop_config] 节显式注入
-os.environ['HADOOP_CONF_DIR'] = '/etc/hadoop/conf'
-# SPARK_CONF_DIR:pip pyspark 默认指向自身空 conf/,显式指到集群配置才能加载 hive-site.xml,否则 enableHiveSupport 回落 in-memory metastore
-os.environ.setdefault('SPARK_CONF_DIR', '/etc/spark/conf')
-os.environ["PYSPARK_DRIVER_PYTHON"] = "/usr/bin/python3"
-os.environ["PYSPARK_PYTHON"] = "/usr/bin/python3"
+# HADOOP_CONF_DIR / SPARK_CONF_DIR 由 conf/env.sh 提供默认值经 bootstrap_env 注入(shell 侧 export 优先):
+#   - HADOOP_CONF_DIR:spark-submit 启动 YARN 校验需要;DataX JVM 不读 classpath conf,HA 由 ini [hadoop_config] 节显式注入
+#   - SPARK_CONF_DIR:pip pyspark 默认指向自身空 conf/,显式指到集群配置才能加载 hive-site.xml,否则 enableHiveSupport 回落 in-memory metastore
+# PYSPARK_*:复用 PYTHON3_PATH,避免与 conf/env.sh 双份硬编码
+os.environ.setdefault('PYSPARK_DRIVER_PYTHON', os.environ['PYTHON3_PATH'])
+os.environ.setdefault('PYSPARK_PYTHON', os.environ['PYTHON3_PATH'])
 os.environ['PYTHONUNBUFFERED'] = 'x'
 PROJECT_ROOT_PATH = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
 PROJECT_NAME = os.path.basename(PROJECT_ROOT_PATH)

+ 1 - 1
kb/01-运行环境.md

@@ -74,7 +74,7 @@
 
 ## 4. Spark 运行时环境变量
 
-Spark 作业正常跑通依赖两个环境变量指到集群配置目录,`dw_base/__init__.py` 在导入时设默认值,shell 侧若已 export 则以外部值为准
+Spark 作业正常跑通依赖两个环境变量指到集群配置目录。默认值定义在 `conf/env.sh`,由 `dw_base/__init__.py` 通过 `bootstrap_env` 注入(shell 侧若已 export 则以外部值为准)
 
 | 环境变量 | 默认值 | 作用 |
 |---------|--------|------|

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

@@ -109,7 +109,7 @@ D 基础设施 ─────┘
 |-----------|---------|---------|
 | 项目部署目录 `poyee-data-warehouse/` | `bin/publish.sh`(2026-04-20 从根目录挪入 `bin/`) | 新项目发布目录为 `/home/bigdata/release/poyee-data-warehouse/` |
 | `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` | 使用系统环境变量 |
+| `HADOOP_CONF_DIR='/etc/hadoop/conf'` / `SPARK_CONF_DIR='/etc/spark/conf'` / `PYSPARK_DRIVER_PYTHON='/usr/bin/python3'` / `PYSPARK_PYTHON='/usr/bin/python3'` | `__init__.py` | ✅ 2026-04-29 收口:HADOOP_CONF_DIR / SPARK_CONF_DIR 加 `${VAR:-default}` 落 `conf/env.sh`,由 `bootstrap_env` setdefault 注入;PYSPARK_DRIVER_PYTHON / PYSPARK_PYTHON 改用 `os.environ['PYTHON3_PATH']` 复用,消除双份硬编码 |
 | 告警 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 |
 | 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 文件名(= 任务唯一标识)识别用途 |