更新时间:2026-10-12 GMT+08:00
分享

配置是否显示包含敏感词的Spark SQL语句

操作场景

用户执行的SQL语句中可能会包含敏感信息(如用户密码等),如果泄漏出去会存在一定的安全风险。此时,用户可以通过设置“spark.sql.redaction.string.regex”,“spark.redaction.regex”,“spark.redaction.string.regex”和“spark.sql.redaction.options.regex”参数,在日志和Web UI上屏蔽包含敏感词的SQL关键词。

显示Spark SQL语句包含两部分:

  1. 在日志中显示SQL语句:
    • Driver日志:在JDBCServer服务中,每通过Beeline执行一句SQL语句就会在Driver日志中打印对应的SQL语句。如“Running query 'show tables' with 0f8fee16-4291-4854-a7b4-b87a162f7cbb”。
    • eventLog日志:每个Spark应用只要开启了写eventLog功能(设置spark.eventLog.enabled=true),就会写eventLog事件,而使用JDBCServer和Spark SQL执行的SQL语句信息也都会打印在eventLog文件中。
  2. 在Web UI上显示SQL语句:
    • SparkUI:当执行SQL语句时,能在SparkUI页面的Jobs、Stages等标签页看到执行的SQL语句信息。
    • HistoryServer:HistoryServer通过读取eventLog文件的内容,将app信息展示在页面上。所以当eventLog文件中有SQL语句记录时,用户也就能在HistoryServer页面上看见对应的SQL语句。

配置描述

  1. 登录FusionInsight Manager系统。

    详细操作请参考访问集群Manager。

  2. 选择“集群 > 服务 > Spark2x/Spark > 配置”,单击“全部配置”,搜索并调整以下参数。

    表1 参数说明

    参数

    描述

    参数值

    spark.redaction.regex

    决定哪些Spark配置属性键/值、环境变量含敏感信息。命中后从SparkUI环境页、YARN日志、eventLog等脱敏。全局静态配置,作用于整个应用,启动时读取,需重启任务生效。

    (?i)secret|password|token|access[.]key

    spark.redaction.string.regex

    决定Spark产生的任意字符串中哪些部分是敏感词。正则匹配到的部分替换为虚拟值,当前主要用于脱敏SQL explain输出。全局静态配置。

    file:/[^\\]\\s]+

    spark.sql.redaction.options.regex

    决定SQL命令options映射中哪些键包含敏感信息。键名匹配的选项值在explain输出中脱敏。叠加在spark.redaction.regex全局规则之上。会话级配置,作用于当前会话,spark-defaults.conf 方式需重启 JDBCServer/spark-sql。

    (?i)url

    spark.sql.redaction.string.regex

    决定Spark生成的字符串(含SQL explain输出)中哪些部分是敏感词的正则表达式。正则匹配到敏感词时替换为*********(redacted)。会话级配置。

    ((?i)(?<=password=))('.*')

    • 当使用Spark Beeline时,需要重启JDBCServer,配置才会生效。当使用spark-sql时,需要重启spark-sql,配置才会生效。
    • 以上参数,仅对配置后执行的SQL语句生效,对配置前执行的SQL语句不生效。

  1. 修改参数配置后,单击“保存”,根据界面提示操作后,等待配置保存成功。
  2. Spark服务端配置更新后,如果“配置状态”为“配置过期”,则需重启组件以使配置生效。

    图1 修改Spark配置

    在Spark服务概览页面,选择“更多 > 重启服务/滚动重启服务”,验证管理员密码后,等待服务重启成功。

    如果使用Spark客户端提交任务,修改了集群的参数“spark.sql.sources.partitionOverwriteMode”后,需要重新下载客户端才能使配置生效,请参考使用MRS客户端。

    组件重启期间将无法对外提供服务,可能会影响集群的上层业务正常运行,请在业务空闲期或确认操作无影响后再执行本操作。

相关文档