hive表级权限配置以及运行调试
来源:互联网 发布:linux oracle关闭监听 编辑:程序博客网 时间:2024/06/06 00:47
环境:我们已经安装了Hadoop集群,hive,hue 以及命令行工具Beeline
hue: 主要是对hive数据仓库的一个可视化操作客户端,我们可以用hue对hive库添加管理员用户账号。
Beeline:
HiveServer2提供了一个新的命令行工具Beeline,它是基于SQLLine CLI的JDBC客户端。关于SQLLine的的知识,可以参考这个网站:http://sqlline.sourceforge.NET/#manual
Beeline工作模式有两种,即本地嵌入模式和远程模式。嵌入模式情况下,它返回一个嵌入式的Hive(类似于Hive CLI)。而远程模式则是通过Thrift协议与某个单独的HiveServer2进程进行连接通信。
下面给一个简单的登录Beeline的使用实例:
[root@master ~]# beeline -u "jdbc:hive2://localhost:10000/"Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512M; support was removed in 8.0Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release17/01/11 09:38:12 WARN mapreduce.TableMapReduceUtil: The hbase-prefix-tree module jar containing PrefixTreeCodec is not present. Continuing without it.Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512M; support was removed in 8.0scan complete in 4msConnecting to jdbc:hive2://localhost:10000/Connected to: Apache Hive (version 1.1.0-cdh5.8.0)Driver: Hive JDBC (version 1.1.0-cdh5.8.0)Transaction isolation: TRANSACTION_REPEATABLE_READBeeline version 1.1.0-cdh5.8.0 by Apache Hive0: jdbc:hive2://localhost:10000/> use zfs_test. . . . . . . . . . . . . . . . > ;INFO : Compiling command(queryId=hive_20170111093838_10154f16-eba2-47eb-b99c-50e52d03b082): use zfs_testINFO : Semantic Analysis CompletedINFO : Returning Hive schema: Schema(fieldSchemas:null, properties:null)INFO : Completed compiling command(queryId=hive_20170111093838_10154f16-eba2-47eb-b99c-50e52d03b082); Time taken: 0.051 secondsINFO : Executing command(queryId=hive_20170111093838_10154f16-eba2-47eb-b99c-50e52d03b082): use zfs_testINFO : Starting task [Stage-0:DDL] in serial modeINFO : Completed executing command(queryId=hive_20170111093838_10154f16-eba2-47eb-b99c-50e52d03b082); Time taken: 0.024 secondsINFO : OKNo rows affected (0.205 seconds)0: jdbc:hive2://localhost:10000/> show tables. . . . . . . . . . . . . . . . > ;INFO : Compiling command(queryId=hive_20170111093838_0fac13fa-b631-4b9b-ad1a-6b7fdfb4a1ae): show tablesINFO : Semantic Analysis CompletedINFO : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:tab_name, type:string, comment:from deserializer)], properties:null)INFO : Completed compiling command(queryId=hive_20170111093838_0fac13fa-b631-4b9b-ad1a-6b7fdfb4a1ae); Time taken: 0.01 secondsINFO : Executing command(queryId=hive_20170111093838_0fac13fa-b631-4b9b-ad1a-6b7fdfb4a1ae): show tablesINFO : Starting task [Stage-0:DDL] in serial modeINFO : Completed executing command(queryId=hive_20170111093838_0fac13fa-b631-4b9b-ad1a-6b7fdfb4a1ae); Time taken: 0.041 secondsINFO : OK+-------------+--+| tab_name |+-------------+--+| employee || employee11 |+-------------+--+2 rows selected (0.13 seconds)远程连接到HiveServer2:
beeline -u "jdbc:hive2://hadoop1:10000/hamza_group_1" --hivevar hamza.usr="hamza_group" --hivevar hamza.passwd="hMyLXJ6uddQSy1WU" --color=true;
退出beeline命令行则是!quit, 但对于登录了后的DDL,DML,则直接运行SQL语句即可,语句后带上一个分号,然后回车执行。
应用hive2的beeline命令行工具登录到hive后:
我们直接可以对相关用户和角色添加相关权限 create,drop ,select,alter,delete等
- 操作(opera) 解释
- ALL 所有权限
- ALTER 允许修改元数据(modify metadata data of object)---表信息数据
- UPDATE 允许修改物理数据(modify physical data of object)---实际数据
- CREATE 允许进行Create操作
- DROP 允许进行DROP操作
- INDEX 允许建索引(目前还没有实现)
- LOCK 当出现并发的使用允许用户进行LOCK和UNLOCK操作
- SELECT 允许用户进行SELECT操作
- SHOW_DATABASE 允许用户查看可用的数据库
下面是赋值权限的一些命令操作:
--创建和删除角色 create role role_name; drop role role_name; --展示所有roles show roles --赋予角色权限 grant select on database zfs_test to role zfs_role; grant select on [table] employee to role user1_1; --查看角色权限 show grant role role_name on database db_name; show grant role role_name on [table] t_name; --角色赋予用户 grant role role_name to user user_name --回收角色权限 revoke select on database db_name from role role_name; revoke select on [table] t_name from role role_name; --查看某个用户所有角色 show role grant user user_name; --查看用户被赋予的角色 show role grant user user1_1;--查看所有权限的分配情况show grant--查看单个角色的权限分配情况show grant role zfs_role;
现在一个最大的问题来了,因为hive默认每个用户都有给自己赋值权限的权利,所以当其自己没有权限时,自己可以把权限赋上,那么这样之前的权限赋值就没有意义了。现在我们就要创建超级用户仅使一个和两个超级用户具有赋值权限(我们这里是admin和hive),其他用户没有赋权功能。
package com.hive;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 AuthorityHook extends AbstractSemanticAnalyzerHook { private static String[] admin = {"admin", "hive"}; @Override public ASTNode preAnalyze(HiveSemanticAnalyzerHookContext context,ASTNode ast) throws SemanticException { switch (ast.getToken().getType()) { case HiveParser.TOK_CREATEDATABASE: case HiveParser.TOK_DROPDATABASE: case HiveParser.TOK_CREATEROLE: case HiveParser.TOK_DROPROLE: case HiveParser.TOK_GRANT: case HiveParser.TOK_REVOKE: case HiveParser.TOK_GRANT_ROLE: case HiveParser.TOK_REVOKE_ROLE: String userName = null; if (SessionState.get() != null&&SessionState.get().getAuthenticator() != null){ userName=SessionState.get().getAuthenticator().getUserName(); } if (!admin[0].equalsIgnoreCase(userName) && !admin[1].equalsIgnoreCase(userName)) { throw new SemanticException(userName + " can't use ADMIN options, except " + admin[0]+","+admin[1] +"."); } break; default: break; } return ast; } public static void main(String[] args) throws SemanticException { String[] admin = {"admin", "hive"}; String userName = "admin"; if (!admin[0].equalsIgnoreCase(userName) && !admin[1].equalsIgnoreCase(userName)) { throw new SemanticException(userName + " can't use ADMIN options, except " + admin[0]+","+admin[1] +"."); } }}
网上有很多这样的代码,但是不是自己操作一次可能会出现一些错误,首先确保hive是有admin和hive两个用户账号的,另外你是确定这两个是超级用户其他的不是,如果你只有一个超级用户,那么把其中一个删除。
下面是我的pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>hive.bigdata</groupId> <artifactId>user_auth</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>1.1.0-cdh5.8.0</version> <scope>system</scope> <systemPath>F:/IdeaProjects/hive-exec-1.1.0-cdh5.8.0.jar</systemPath> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-jobclient</artifactId> <version>2.6.0</version> <scope>provided</scope> </dependency> </dependencies></project>
hive-exec-1.1.0-cdh5.8.0.jar这个包可以直接从线上环境拷贝路径:/opt/cloudera/parcels/CDH-5.8.0-1.cdh5.8.0.p0.42/lib/hive/lib/hive-exec-1.1.0-cdh5.8.0.jar另外打包的时候可以不用将import的jar包打入,用<scope>provided</scope> 去掉,<systemPath>F:/IdeaProjects/hive-exec-1.1.0-cdh5.8.0.jar</systemPath>这个代码是直接应用本地的jar包打好包后,需要将jar传到线上环境,在CDH安装集群环境需要传到master集群指定的目录:这个路径没有的自己建好,另外就是hive权限开启配置和hive.semantic.analyzer.hook设置(设置成我们开发的那个类的路径)如下:
以上都搞定后,可以重启hive集群。
现在就完成了超级用户和hive权限的配置工作。
测试结果:
0 0
- hive表级权限配置以及运行调试
- Hive配置运行及表的操作
- Hive hiveserver2 配置运行
- Hive hiveserver2 配置运行
- hive安装以及配置
- hive安装配置与调试
- Hive on Spark 配置、运行
- hive表权限管理
- Hive多用户操作以及权限管理
- hive简介以及安装配置
- Hive优化以及参数配置
- hive安装/启动以及源码调试
- cloudera manager下的hive权限配置
- cloudera manager下的hive权限配置
- cloudera manager下的hive权限配置
- Hive运行架构及配置部署
- Hive运行架构及配置部署
- Hive运行架构及配置部署
- 设计模式:观察者模式-observer
- 如何必须用new来实例化function
- Git
- Eclipse设置自动换行
- 模板函数/类不能导出到动态链接库(DLL)
- hive表级权限配置以及运行调试
- Java使用微信支付-发起统一下单支付接口
- EditText属性
- interface和class的区别
- Greenplum学习10--添加节点gpexpand ①(在每台segment加入一个节点)(生成节点配置文件)
- java.sql.Types,数据库字段类型,java数据类型的对应关系
- mybaits中的返回结果resultType的问题
- google map
- Monkey and Banana