hive hook

来源:互联网 发布:windows系统备份 编辑:程序博客网 时间:2024/05/01 10:16



hive-site.xml中可以指定添加hook,类似于过滤器之类的,可以用来拦截一些行为
<property>  
  <name>hive.semantic.analyzer.hook</name>   
  <value>自定义的类</value>     
  <description></description>
</property>  
hive 默认的default authorization有漏洞,任何用户都可以创建role并授权,可以org.apache.hadoop.hive.ql.parse.AbstractSemanticAnalyzerHook类重写preAnalyze()方法来实现。




HiveParser类,是一个常量类,用来定义hive中的所有动作,比如创建数据库,建表,建role,建索引等等。比如:HiveParser.TOK_CREATEDATABASE   创建数据库的动作<     HiveParser.TOK_ALTERTABLE        修改表的动作


SessionState方法可以获得到hive会话中信息:
SessionState.get().getLastCommand()           可以得到hive中的输入的命令
SessionState.get().getUserName() 可以得到提交hive任务的用户名,具体信息可以查看这两个类的源码。



下面这个例子中,用来限制用户执行create database,create table,alter table命令时,如果有指定location,限定必须指向/user/hive/warehouse的目录下的数据。


import org.apache.hadoop.hive.ql.parse.ASTNode;import org.apache.hadoop.hive.ql.parse.AbstractSemanticAnalyzerHook;import org.apache.hadoop.hive.ql.parse.HiveParser;import org.apache.hadoop.hive.ql.parse.HiveSemanticAnalyzerHookContext;import org.apache.hadoop.hive.ql.parse.SemanticException;import org.apache.hadoop.hive.ql.session.SessionState;public class Hive_superAdmin extends AbstractSemanticAnalyzerHook {      @Override     public ASTNode preAnalyze(HiveSemanticAnalyzerHookContext context,             ASTNode ast) throws SemanticException {         String command=SessionState.get().getLastCommand().toLowerCase();       //  System.out.println(command);                   boolean bool = false;         switch (ast.getToken().getType()) {                  case HiveParser.TOK_CREATEDATABASE:         case HiveParser.TOK_CREATETABLE:         case HiveParser.TOK_ALTERTABLE:              if(command.contains("location"))              if(command.contains("/user/hive/warehouse/")==false)              bool=true;          if(bool)                     throw new SemanticException("the data path must be under /user/hive/warehouse/");          break;                               default:             break;         }         return ast;     }}





0 0
原创粉丝点击