今天hive user maillist上有人问show current roles命令问题:
1 2 3 4 5 6 |
|
在我的印象中,这个命令应该不存在才对。。手动运行了一下,果然报错,仔细看日志,可以看到命令式可以完成parse和analyzer阶段的,运行的时候报错,
按我的理解,如果sql不支持的话应该在parse阶段就会出错
1 2 3 4 5 6 7 8 9 |
|
根据堆栈信息,show current roles命令是由DDLTask执行的,看其具体实现:
1 2 3 4 5 |
|
在roleDDLV2中可以看到show current role命令的处理:
1 2 3 4 5 6 7 8 9 10 11 |
|
即show current role这个语法在v2里面支持,那么什么时候SessionState.get().isAuthorizationModeV2()为true呢?来看看SessionState类,isAuthorizationModeV2调用getAuthorizationMode,getAuthorizationMode调用setupAuth:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
如果要让AuthorizationMode.V2成立,需要让authorizer为null,authorizerV2不为null才可以,设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
因为hive.security.authorization.manager默认为org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider,所以为authorizer为V1,要想设置为v2,需要让HiveUtils.getAuthorizeProviderManager返回null
HiveUtils.getAuthorizeProviderManager中可以获取设置的authorizer的具体实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
如果要想返回v2,需要让设置的authorize相关类必须实现HiveAuthorizerFactory接口,且不能实现HiveAuthorizationProvider接口
反馈如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|