|
|
@@ -445,7 +445,7 @@ dfs.client.failover.proxy.provider.nameservice1 = org.apache.hadoop.hdfs.server.
|
|
|
| `dw_base/datax/datasources/hdfs_data_source.py` | 覆写 `get_datasource_dict()`:父类逻辑外,检测 `[hadoop_config]` 节是否存在;存在则把整节作为 dict 塞进 `ds_dict['hadoopConfig']` |
|
|
|
| `dw_base/datax/plugins/plugin.py` | **不用改** —— `load_data_source()` 的 `for key, value in ds_dict.items()` 里,value 是 dict 时走 Python 原生赋值,json 序列化自然成立 |
|
|
|
| `dw_base/datax/plugins/reader/hdfs_reader.py` / `writer/hdfs_writer.py` | **不用改**,`defaultFS + hadoopConfig` 由 `load_data_source()` 自动注入到 `parameter` |
|
|
|
-| `dw_base/__init__.py` | **保留** `os.environ['HADOOP_CONF_DIR']` + `os.environ['HIVE_CONF_DIR']`(Spark on YARN 启动强校验 + Spark Hive metastore 定位;DataX JVM 不读,HA 靠 ini `[hadoop_config]`) |
|
|
|
+| `dw_base/__init__.py` | **保留** `os.environ['HADOOP_CONF_DIR']`(Spark on YARN 启动强校验)+ `os.environ.setdefault('SPARK_CONF_DIR', '/etc/spark/conf')`(pip pyspark 默认指向自身空 conf/,需显式指到集群配置才能加载 hive-site.xml);DataX JVM 不读这些,HA 靠 ini `[hadoop_config]`。详见 `01-运行环境.md §4` |
|
|
|
| `bin/datax-gc-generator.py` | §2.7 从零重写时一并处理,这里不单独列 |
|
|
|
| `datasource/hdfs/{env}/*.ini` | 按新 schema 新建(prod 带 `[hadoop_config]`;dev/test 只写 `[base] defaultFS`) |
|
|
|
|
|
|
@@ -539,6 +539,31 @@ record_per_channel = 100000
|
|
|
|
|
|
**标准**:每个占位模块必须带 README,4 节(职责 / 接口 / 依赖 / 状态)—— 规则见 `kb/30-开发规范.md §4.5`。空 `__init__.py` + 无 README 直接删除,不保留"暂留"。
|
|
|
|
|
|
+### 2.12 通用 UDF 注释完整化 + 自查表(B 延伸) [聚簇 B]
|
|
|
+
|
|
|
+**现状**:`dw_base/udf/common/spark_common_udf.py` 500 行 40 函数由 6 份老文件合并而来(见 `kb/92` 2026-04-20 UDF 重组条目),函数签名齐全但注释粗细不一:部分函数只有函数名,部分 docstring 写了逻辑但没写入参约束 / 返回类型 / 异常路径 / SQL 调用示例。`common/` 目录 UDF 由 `bin/spark-sql-starter.py` 自动 `ADD FILE` 注册(启动日志 40 条 `注册 Python UDF xxx` 可证),理论上任意 SQL 都能用,但"能用"不等于"知道怎么用"。
|
|
|
+
|
|
|
+**问题**:
|
|
|
+- 注释不一致导致业务 SQL 开发时需要反复读源码猜参数语义,违背 common/ auto-load 的"开箱即用"初衷
|
|
|
+- 未来新增通用 UDF 如果没有登记表,规模大了之后"这个函数有没有 / 叫什么 / 谁加的"全靠 grep
|
|
|
+- 业务 UDF 进 common 的准入标准缺失,容易出现"为了省事放 common"与"只在一处用也塞 common"两类误伤
|
|
|
+
|
|
|
+**目标态**:
|
|
|
+
|
|
|
+1. **注释完整化**:40 函数全部补齐 docstring,统一 5 段模板 —— 一句话摘要 / 入参(名 · 类型 · 约束 / 可空 / 单位) / 返回(类型 · 语义 · 空值场景) / 异常与边界 / SQL 调用示例。按分类分批推进:JSON 段 → Array 段 → String 段 → Numeric-Date-Hash 段 → Cross-type 段,5 批独立 commit。
|
|
|
+
|
|
|
+2. **UDF 自查表**:新建 `kb/31-UDF 手册.md`(与 `30-开发规范.md` 同级独立文档;40 函数规模独立成文更稳,新增 UDF 需要稳定引用锚点)。表头 `函数名 | 分类 | 入参 | 返回 | 摘要 | 代码位置 | 补注释状态`。初版把现有 40 函数全量登记,后续新增通用 UDF(进 `common/`)必须同步登记此表;只进 `business/` 的 UDF 不走此表,在 `business/` 子目录 README 维护。
|
|
|
+
|
|
|
+3. **注册准入规则**:`kb/30-开发规范.md` 新增一节或 `CLAUDE.md` 一行硬约束 —— 向 `common/` 增删 UDF 前,先读 `kb/31` 自查表;新增必须同步更新表(函数名 / 分类 / 示例),否则 commit 不过。与 `tests/unit/udf/test_spark_common_udf.py`(阶段 4 首批单测目标,见 §2.11 占位 registry)是配套的:自查表为开发者服务,单测为回归服务。
|
|
|
+
|
|
|
+**回归检验**:
|
|
|
+- 任意 SQL 文件直接 `SELECT my_udf(col)` 能跑通(common auto-load 链路未变,保留现状)
|
|
|
+- 自查表行数 = `spark_common_udf.py` 中 `@udf` / `def` 导出函数数(启动日志中 `注册 Python UDF` 的条数即真值)
|
|
|
+
|
|
|
+**与其他条目的关系**:
|
|
|
+- 2026-04-20 UDF 模块重组(kb/92)已完成重组动作,本节是其延伸(补注释 + 登记表 + 准入规则)
|
|
|
+- 不动 auto-load 机制(`bin/spark-sql-starter.py` + `dw_base/__init__.py:29 COMMON_SPARK_UDF_FILE` 常量),只补文档与规则
|
|
|
+
|
|
|
## 三、`__init__.py` 瘦身(高优先级) [聚簇 B(B1)]
|
|
|
|
|
|
**现状:** `tendata/__init__.py` 约 120 行,import 即执行以下操作:
|
|
|
@@ -671,6 +696,7 @@ tests/
|
|
|
- LAZY 类依赖关联的老代码:`get_oldmongo_*` / `mg2es/` / `ent_interface_dingtalk*` 于 2026-04-20 第一批提前清理;同日第二批清理 `dw_base/oss/` 整目录、`dw_base/scheduler/` 整目录(含 polling_scheduler / drop_partitions / drop_daily_full_snapshot_tbls)、`dw_base/hive/` 整目录、`dw_base/utils/` 7 文件(data_distinct / diff_utils / excel_to_hive_utils / hive_diff_database / hive_to_excel_utils / pdt_check_table\*);剩余 `customs/similarity.py` 等在阶段 4 / 阶段 5 一并清理
|
|
|
- 不需要 `requirements-base.txt` / `requirements-dev.txt` 分文件——当前依赖规模下单文件已经足够
|
|
|
- pyspark==2.4.0 固定(对齐 CDH 6.3.2 parcel 自带版本):`pip install` 把 pyspark 装进解释器 site-packages 解决 PyCharm 远程解释器静态索引红线 + 本地 pytest;运行时 `findspark.init()` 指向集群 `$SPARK_HOME/python/`,两条链路同版本不冲突
|
|
|
+- **TODO 评估 `findspark` 移除**:`findspark` 原本解决的是 Spark Python 代码不在 `sys.path` 的问题(HDP 时代常见);CDH + pip 安装的 pyspark 情境下,解释器 site-packages 自带 pyspark 包已能直接 `import pyspark`,再配合 `SPARK_CONF_DIR=/etc/spark/conf`(`01-运行环境.md §4`)完成 spark-env.sh / hive-site.xml 加载,`findspark.init()` 的价值趋近于零。评估时机:当前阶段 1-3 以稳定为先,保留不拆;阶段 5 老残留清理时一并 drop 依赖 + `dw_base/__init__.py:9` 的 import 与 `:127` 的 `findspark.init()` 调用
|
|
|
|
|
|
### 7.2 日志改进
|
|
|
|