配置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甚至更高才进行熔断。
操作步骤
- 登录FusionInsight Manager,选择“集群 > SQL防御”,打开SQL防御页面。
- 参考添加MRS SQL防御规则添加针对Hive的SQL防御规则。
Hive SQL引擎支持的各类型SQL防御规则可参考MRS SQL防御规则。
例如添加一条规则ID为“static_0001”,SQL语句中count distinct出现次数超过2就进行“提示”的规则。
图1 添加Hive SQL防御规则 - 登录安装有Hive客户端的节点,执行以下命令,切换到客户端安装目录。
cd /opt/hadoopclient
执行以下命令,配置环境变量。
source bigdata_env
执行以下命令认证当前用户(若集群未启用Kerberos认证(普通模式)请跳过该操作):
kinit 具有Hive操作权限的组件业务用户
- 执行以下命令登录Hive客户端:
beeline
- 执行以下命令创建一个表并插入数据。
drop table if exists hivetb;
create table hivetb(a int,b int);
insert into hivetb select 1,11;
insert into hivetb select 2,22;
- 执行以下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”。