Python 代码检查配置

为避免出现未知异常,当在平台上运行python脚本时,系统会默认禁用部分模块。python的代码检查借鉴了linkis的相关设计,关键数据存储在三个表中。具体字段参见表描述。

表名 描述
cluster_exception_msg 代码检查规则对应的报错信息
source_code_check_rule 代码检查规则,正则
source_code_check_rule_interrupt_level 对面检查规则中断执行的默认级别

预置规则列表

默认禁用的函数列表如下:

规则名称 禁用模块的正则表达式
不允许用户导入sys模块 import\s+sys
from\s+sys\s+import\s+.
不允许用户导入os模块 import\s+os
from\s+os\s+import\s+.
不允许用户私自开启进程 import\s+multiprocessing
from\s+multiprocessing\s+import\s+.
import\s+subprocess
from\s+subprocess\s+import\s+.
不允许用户导入numpy包 from\s+numpy\s+import\s+.*
禁止用户stop sparkContext sc\.stop

如何新增规则?

  1. 在 cluster_exception_msg 表中插入对应的异常信息。

    INSERT INTO `cluster_exception_msg` (`code`, `en_msg`, `cn_msg`, `param_num`) values (20100, 'can not use sys module', '不能使用sys模块', 0);
  2. 在 source_code_check_rule 表中插入对应的规则,需要确定 代码类型、规则级别等字段。例如:

    INSERT INTO `source_code_check_rule` (`code_type`, `rule_level`, `check_rule`, `exception_msg_code`) values ('PYTHON',  'ERROR', 'import\\s+sys', 对应异常信息的ID);
  3. 如果表 source_code_check_rule_interrupt_level 中没有对应代码类型的中断级别,需要新增,例如:

    INSERT INTO `source_code_check_rule_interrupt_level` (`code_type`, `rule_level`) values ('PYTHON',  'ERROR');
  4. 重启所有的Azkaban executor。

如何关闭规则?

  1. 在 source_code_check_rule 表中找到对应规则,把 rule_level字段的级别 (ERROR、WARING、INFO)调整到大于 source_code_check_rule_interrupt_level 中对应代码类型的中断规则即可。例如: Python 默认的中断级别是 ERROR,需要把对应的规则调整成 WARING或INFO。
    update source_code_check_rule set rule_level = "INFO" where id = 对应的规则id;
  2. 重启所有的Azkaban executor。