配置HetuEngine SQL防御规则
操作场景
用户可以在Manager界面配置HetuEngine的SQL防御规则,根据业务调整对应SQL防御规则的参数。
前提条件
- 已安装包含HetuEngine服务的集群客户端,安装目录如“/opt/hadoopclient”。
- HetuEngine服务及计算实例运行状态正常。
- 如集群已启用Kerberos认证,需提前创建HetuEngine的用户并授予相关权限,且需要通过Ranger为该用户配置操作数据源的数据库、表、列的管理权限。
使用约束
- 防御规则默认动态生效时间为5分钟。
- 拦截和熔断规则会中断SQL查询,请根据实际业务配置合理的值。
- 熔断规则由系统Session级别参数控制,配置熔断规则需要业务用户具有set session的权限。
- 静态规则static_0003中查询总的Join个数不包含Semi Join和Anti Join。
- 动态规则dynamic_0001和dynamic_0002配置提示规则时,只在日志记录提示信息,不在客户端显示。
- 熔断规则Running_0001中,因客户端和服务端是异步请求,当服务端已经阻断请求后客户端可能显示Query is gone,此时可通过查看日志确认请求已被阻断。
操作步骤
- 登录FusionInsight Manager,选择“集群 > SQL防御”,打开SQL防御页面。
- 参考添加MRS SQL防御规则添加针对HetuEngine的SQL防御规则。
HetuEngine SQL引擎支持的各类型SQL防御规则可参考MRS SQL防御规则。
例如添加一条规则ID为“static_0001”,SQL语句中count distinct出现次数超过2就进行“提示”的规则。
图1 添加HetuEngine SQL防御规则 - 登录安装有HetuEngine客户端的节点,执行以下命令,切换到客户端安装目录。
cd /opt/hadoopclient
执行以下命令,配置环境变量。
source bigdata_env
- 根据集群认证模式,完成HetuEngine客户端登录。
- 执行以下SQL语句,检查当前SQL防御规则是否生效。
执行以下命令建表:
CREATE TABLE table1(id int, name varchar,rank int);
INSERT INTO table1 VALUES(10,'sachin',1),(45,'rohit',2),(46,'rohit',3),(18,'virat',4),(25,'dhawan',5);
执行以下命令查询:
select count(distinct id),count(distinct id),count(distinct id),count(distinct id),count(distinct id),count(distinct id) from table1;
当前语句中count distinct出现次数超出2中配置规则的阈值,系统提示信息如下:
WARNING: Occurrence number of 'COUNT(DISTINCT XX)' (6) reaches the hint limitation (2)
- 若SQL防御规则中设置的动作是“拦截”或“熔断”,系统回显信息可能如下:
Intercepted. Reason: Occurrence number of 'COUNT(DISTINCT XX)' (6) reaches the interception limitation (2)
- 用户也可通过日志查询SQL防御详情,HetuEngine SQL防御日志路径地址为“hdfs://hacluster/hetuserverhistory/租户/coordinator/application_ID/container_ID/yyyyMMdd/server.log”。
- 如果使用JDBC二次开发需要获取Warning信息,则需要在JDBC应用程序处适配:
statement = connection.prepareStatement(sql.trim()); resultSet = statement.executeQuery(); SQLWarning sqlWarning = statement.getWarnings();
- 若SQL防御规则中设置的动作是“拦截”或“熔断”,系统回显信息可能如下: