更新时间:2024-11-29 GMT+08:00

配置Hive SQL防御

操作场景

用户可以在Manager界面配置Hive的SQL防御规则,根据业务调整对应SQL防御规则的参数。

前提条件

  • 已安装包含Hive服务的集群客户端,例如安装目录为“/opt/hadoopclient”。
  • 集群中Hive服务运行状态正常。
  • 对于开启了Kerberos认证的集群,已创建具有Hive操作权限的用户。

使用约束

  • 防御规则默认动态生效时间为5秒,修改队列后Hive防御规则重新加载时间为10分钟。
  • 拦截和熔断规则会中断SQL任务,请根据实际业务配置合理的值。
  • 动态规则dynamic_0001(SQL语句扫描的文件数超过阈值),当Spark与Tez引擎达到提示阈值时拦截日志会在Yarn任务日志中打印,不支持在Beeline客户端输出。
  • 熔断规则存在统计误差,例如规则running_0004,扫描数据量阈值配置10GB,但是因为判断周期和任务并发影响,可能在15GB甚至更高才进行熔断。

操作步骤

  1. 登录FusionInsight Manager,选择“集群 > SQL防御”,打开SQL防御页面。
  2. 参考添加SQL防御规则添加针对Hive的SQL防御规则。

    Hive SQL引擎支持的各类型SQL防御规则可参考MRS SQL防御规则

    例如添加一条规则ID为“static_0001”,SQL语句中count distinct出现次数超过2就进行“提示”的规则。

    图1 添加Hive SQL防御规则

  3. 登录安装有Hive客户端的节点,执行以下命令,切换到客户端安装目录。

    cd /opt/hadoopclient

    执行以下命令,配置环境变量。

    source bigdata_env

    执行以下命令认证当前用户(若集群未启用Kerberos认证(普通模式)请跳过该操作):

    kinit 具有Hive操作权限的组件业务用户

  4. 执行以下命令登录Hive客户端:

    beeline

  5. 执行以下命令创建一个表并插入数据。

    drop table if exists hivetb;

    create table hivetb(a int,b int);

    insert into hivetb select 1,11;

    insert into hivetb select 2,22;

  6. 执行以下SQL语句命令,检查当前SQL防御规则是否生效。

    select count(distinct a),count(distinct b) from hivetb;

    当前语句中count distinct出现次数超出了2中配置规则的阈值,系统提示信息如下:

    ...
    WARN  : STATIC_0001 The count(distinct X) times exceeds the limit : 2, current count distinct times : 2
    ...
    若SQL防御规则中设置的动作是“拦截”,则命令直接执行失败,系统回显信息如下:
    ...
    Error: Error while compiling statement: FAILED: RuleException STATIC_0001 The count(distinct X) times exceeds the limit : 2, current count distinct times : 2 (state=42000,code=40000)
    ...
    • 更多Hive SQL防御规则可参考MRS SQL防御规则
    • 用户也可通过日志查询SQL防御详情,Hive SQL防御日志路径地址为“/var/log/Bigdata/audit/hive/hiveserver/queryinfo.log”。