HIVE权限管理和优化

本文详细介绍了HIVE的三种授权模型,重点讲解了SQL标准授权模型的启用与限制,并提供了权限管理操作的实例。此外,文章还探讨了HIVE的优化策略,包括Explain显示执行计划、开启本地模式、并行计算、严格模式以及其他性能提升技巧,旨在提高HIVE的使用效率和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HIVE权限管理和优化

权限管理

三种授权模型:

1、Storage Based Authorization in the Metastore Server

​ 基于存储的授权 - 可以对Metastore中的元数据进行保护,但是没有提供更加细粒度的访问控制(例如:列级别、行级别)。

2、SQL Standards Based Authorization in HiveServer2

​ 基于SQL标准的Hive授权 - 完全兼容SQL的授权模型,推荐使用该模式。

作用

​ 完全兼容SQL的授权模型,除支持对于用户的授权认证,还支持角色role的授权认证

5限制

​ 1、启用当前认证方式之后,dfs, add, delete, compile, and reset等命令被禁用。

​ 2、通过set命令设置hive configuration的方式被限制某些用户使用。

​ (可通过修改配置文件hive-site.xml中hive.security.authorization.sqlstd.confwhitelist进行配置)

​ 3、添加、删除函数以及宏的操作,仅为具有admin的用户开放。

​ 4、用户自定义函数(开放支持永久的自定义函数),可通过具有admin角色的用户创建,其他用户都可以使用。

​ 5、Transform功能被禁用。

配置

在hive服务端修改配置文件hive-site.xml追加加以下配置内容:

hive.security.authorization.enabled

true

hive.server2.enable.doAs

false

hive.users.in.admin.role

root

hive.security.authorization.manager

org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory

hive.security.authenticator.manager

org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator

服务端启动hiveserver2;客户端通过beeline进行连接

Tips: [root@sxt004 ~]# beeline
​ !connect jdbc:hive2://sxt003:10000 root 123

3、Default Hive Authorization (Legacy Mode)

​ hive默认授权 - 设计目的仅仅只是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据。

权限管理操作
1 角色的添加、删除、查看、设置

​ CREATE ROLE role_name; – 创建角色

​ DROP ROLE role_name; – 删除角色

​ SET ROLE (role_name|ALL|NONE); – 设置角色

​ SHOW CURRENT ROLES; – 查看当前具有的角色

​ SHOW ROLES; – 查看所有存在的角色

2 将权限授予某个用户、角色

GRANT

​ priv_type [, priv_type ] …

​ ON table_or_view_name

​ TO principal_specification [, principal_specification] …

​ [WITH GRANT OPTION];

3 移除某个用户、角色的权限

REVOKE [GRANT OPTION FOR]

​ priv_type [, priv_type ] …

​ ON table_or_view_name

​ FROM principal_specification [, principal_specification] … ;

4 查看某个用户、角色的权限

SHOW GRANT [principal_name] ON (ALL| ([TABLE] table_or_view_name)

HIVE优化

分区分桶也是hive优化的一种

核心思想:把Hive SQL 当做Mapreduce程序去优化

1 Explain 显示执行计划

执行语句:

​ EXPLAIN [EXTENDED] query

​ eg:explain select * from tablename

​ 解析展示某表经过MR的流程,选择较为简单的流程开发方式,效率更高

2 开启本地模式

​ 本地模式数据不经过HDFS,效率更高,适用于 数据量比较小、测试数据

通过设置以下参数开启本地模式:

​ set hive.exec.mode.local.auto=true;

注意:

​ hive.exec.mode.local.auto.inputbytes.max默认值为128M

​ 表示加载文件的最大值,若大于该配置仍会以集群方式来运行

[外链图片转存失败(img-ucBslnKV-1563925154297)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\1561720449456.png)]

3 并行计算

​ 同时运行2个任务,速度快但是占用内存资源

通过设置以下参数开启并行模式:

​ set hive.exec.parallel=true;

一次SQL计算中允许并行执行的job个数的最大值

​ hive.exec.parallel.thread.number

4 严格模式

​ 防止大面积执行语句,防止有误操作

通过设置以下参数开启严格模式:

​ set hive.mapred.mode=strict;

​ (默认为:nonstrict非严格模式)

查询限制

​ 1、对于分区表,必须添加where对于分区字段的条件过滤;

​ 省了一个分区的全扫描,只展示where字段分区的标准

​ 2、order by语句必须包含 limit 输出限制;

Tips:order by 默认是在reduce端进行排序,换而言之,是在reduce端汇总数据

​ 3、限制执行笛卡尔积的查询

5 HIVE排序

Order By — 对于查询结果做全排序,只允许有一个reduce处理

(当数据量较大时,应慎用。严格模式下,必须结合limit来使用)

Sort By — 对于单个reduce的数据进行排序

Distribute By — 分区排序,经常和Sort By结合使用

Cluster By — 相当于 Sort By + Distribute By

(Cluster By不能通过asc、desc的方式指定排序规则;

可通过 distribute by column sort by column asc|desc 的方式)

6 HIVE (Map)Join

表连接

​ Join计算时 小表(驱动表)放在左边,因为左边的先加载内存,占用比较小

在Map 端完成join

​ 1 SQL方式,在SQL语句中添加MapJoin标记(mapjoin hint)

语法:

select /*+ MAPJOIN(smallTable) */ smallTable.key, bigTable.value from
smallTable join bigTable on smallTable.key = bigTable.key;

​ 2 开启自动的MapJoin

通过设置以下参数开启自动的MapJoin:

​ set hive.auto.convert.join = true;

大表小表判断的依据:

​ hive.mapjoin.smalltable.filesize=25000000 即25M

7 MAP-Side聚合

通过设置以下参数开启Map端的聚合:

​ set hive.map.aggr = true;

对group by 产生的数据倾斜做优化

​ hive.groupby.skewindata

​ (默认false)

​ 在分组不合理的情况下,上面的语句执行原理是:在map阶段执行两个聚合

第一个map拿到数据后进行随机分发输出给每个reduce,此时reduce做局部聚合拿到count结果,第二次再按照普通的规则继续下部操作

8 控制Map Reduce数量

Map数量相关的参数(一般不做修改)

一个split的最大值,即每个map处理文件的最大值

​ mapred.max.split.size

一个节点上split的最小值

​ mapred.min.split.size.per.node

一个机架上split的最小值

​ mapred.min.split.size.per.rack

Reduce数量相关的参数

强制指定reduce任务的数量(默认1)

​ mapred.reduce.tasks

每个reduce任务处理的数据量

​ hive.exec.reducers.bytes.per.reducer

每个任务最大的reduce数

​ hive.exec.reducers.max

9 HIVE-JVM重用

​ 直接申请多个jvm运行空间

适用场景:1、小文件个数过多 2、task个数过多

通过 set mapred.job.reuse.jvm.num.tasks=n; 来设置

​ —n 为task插槽个数/JVM数

缺点:设置开启之后,task插槽会一直占用资源,不论是否有task运行,直到所有的task即整个job全部执行完成时,才会释放所有的task插槽资源!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值