热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hive多用户操作以及权限管理

Hive是基于Hadoop的一个数据仓库工具,是一种逻辑上的数据库,依赖hdfs文件系统;它把实际的数据文件映射为一张数据库表来作为元数据来管理hdfs上的数据。Hive存在的意义并

         Hive是基于Hadoop的一个数据仓库工具,是一种逻辑上的数据库,依赖hdfs文件系统;它把实际的数据文件映射为一张数据库表来作为元数据来管理hdfs上的数据。Hive存在的意义并非数据存储,而是被用来处理数据的,它计算的实质是用sql调用了底层的mapreduce。因为hive的sql的学习成本比较低,几乎和mysql这些数据库近似,所以使用极其广泛。很多公司使用hive几乎都能够撑起整个项目。

Hive几大组件

Driver组件:包括Complier、Optimizer和Excecutor,主要作用是将sql进行解析、编译优化、生成执行计划,然后调用底层的的mapreduce计算框架。

Thrift服务组件:thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。

Metastore组件:它是元数据服务组件,hive元数据集中存放地。Metastore组件包括两个部分:metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如mysql数据库。Metastore服务是建立在后台数据存储介质之上,并且可以和hive服务进行交互的服务组件,默认情况下,metastore服务和hive服务是安装在一起的,运行在同一个进程当中。也可以把metastore服务从hive服务里剥离出来,metastore独立安装在一个集群里,hive远程调用metastore服务,这样就可以把元数据这一层放到防火墙之后,客户端访问hive服务,就可以连接到元数据这一层,从而提供了更好的管理性和安全保障。使用远程的metastore服务,可以让metastore服务和hive服务运行在不同的进程里,这样也保证了hive的稳定性,提升了hive服务的效率。

客户端组件:包括cli命令行接口;Thrift客户端,实际上像jdbc、odbc这些接口都是建立在thrift客户端之上的;WEBGUI是hive客户端提供网页访问服务,这个接口对应了hive的hwi(hive web interface)组件,使用前要启动hwi服务。

Hive多用户操作配置

Hive-server配置(hive-site.xml):

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
27
28
29
30
31
32
33
34
35
36
37
39
40




javax.jdo.option.ConnectionURL
jdbc:mysql://192.168.11.35/database_name?
                            createDatabaseIfNotExist=true

JDBC connect string for aJDBC metastore



javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
Driver class name for aJDBC metastore




javax.jdo.option.ConnectionUserName
hive
username to use againstmetastore database




javax.jdo.option.ConnectionPassword
password
password to use againstmetastore database




hive.metastore.warehouse.dir
/user/hive/warehouse/user_name
base hdfs path :locationof default database for the
                                         warehouse



Hive-client配置(hive-site.xml)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21





hive.metastore.uris
thrift://192.168.11.35:9083
Thrift uri for the remotemetastore. Used by 
metastore client to connect to remotemetastore.




hive.metastore.warehouse.dir
/user/hive/warehouse/zhangyi
location of defaultdatabase for the warehouse



hive.metastore.local
false


在hive-server上开启metastone监听:

1

$ hive --server metastore –p 9083

然后在hive-client上执行hive命令

Hive多用户权限控制

当多个用户共同使用hive时,需要对不同角色做不同的权限控制。权限控制主要指底层的hdfs文件操作控制和hive自身对表的授权管理。hive是通过mysql的元数据来控制hive里的权限。

Hive授权的核心是:user,group,role。

User:是基于linux用户的user,哪个linux用户使用hive客户端,那个linux用户就是该hive的user。

Group:同样是linux层面上的用户组。

Role:只有角色是在hive里面自己创建的,可以给角色添加权限属性,再把角色赋予给user,这样该用户就拥有了该角色的权限。

Hive多用户权限控制需要在客户端的hive-site.xml加上以下属性 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

18

19

20

21

22



hive.security.authorization.enabled
true
enableor disable the hive clientauthorization

 



hive.security.authorization.createtable.owner.grants
ALL
theprivileges automatically granted to the ownerwhenever 
a table gets created. Anexample like "select,drop" willgrant select
 and drop privilege to theowner of the table




hive.security.authorization.task.factory
org.apache.hadoop.hive.ql.parse.authorization.
                           HiveAuthorizationTaskFactoryImpl

此时hive已经开启了权限管理的功能,但是所有的用户都拥有给自己甚至别人赋权的能力。为了安全起见(这种安全机制只是为了避免误操作)我们只需要一个超级管理员用户拥有给别人赋权的能力。所以接着我们写一个类用来控制用户的赋权权限。

Vim AuthHook.java

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40

package com.hivepro.test;                                                          
                                                                               
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 AuthHook extends AbstractSemanticAnalyzerHook {                   
    private static String admin = "hadoop";                                    
                                                                               
    @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.equalsIgnoreCase(userName)) {                           
                throw new SemanticException(userName                           
                        + " can't use ADMIN options, except " + admin + ".");  
            }                                                                  
            break;                                                             
        default:                                                               
            break;                                                             
        }                                                                      
        return ast;                                                            
    }                                                                          
}                                                                              

接着将该java文件编译、打包后放入hive的lib目录下并在hive-client的hive-site.xml添加属性

1
2
3
4
5

  
  
   hive.semantic.analyzer.hook  
    com.hivepro.test.AuthHook  
  

权限管理命令

创建角色:

1

create role role_name

显示所有的角色

1

Show roles

删除角色:

1

drop role role_name

赋权给角色

1
2
3
4


grant create on database database_name to role role_name

grant select on [table] table_name to role role_name

回收某个角色的某个权限

1
2

revoke create on database database_name from role role_name
revoke select on [table] table_name from role role_name

查看某个角色在某张表或某个数据库的权限

1
2

show grant role role_name on database database_name
show grant role role_name on [table] table_name

将角色赋予给用户

1

grant role role_name to user user_name

查看某用户的所有角色

1

show role grant user user_name

权限属性:

ALL                   

 所有权限 

ALTER             

  允许修改元数据(modify metadatadata of  object)---表信息数据 

UPDATE            

允许修改物理数据(modify physicaldata of  object)---实际数据 

CREATE            

允许进行Create操作 

DROP                

允许进行DROP操作 

LOCK               

当出现并发的使用允许用户进行LOCK和UNLOCK操作 

SELECT                    

允许用户进行SELECT操作 

SHOW_DATABASE  

允许用户查看可用的数据库  



推荐阅读
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有