HIVE許可權管理和優化

2021-09-24 20:59:43 字數 4842 閱讀 6218

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.sqlstdhiveauthorize***ctory

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 sql 當做mapreduce程式去優化

執行語句:

​ explain [extended] query

​ eg:explain select * from tablename

​ 解析展示某錶經過mr的流程,選擇較為簡單的流程開發方式,效率更高

​ 本地模式資料不經過hdfs,效率更高,適用於 資料量比較小、測試資料

通過設定以下引數開啟本地模式:

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

注意:​ hive.exec.mode.local.auto.inputbytes.max預設值為128m

​ 表示載入檔案的最大值,若大於該配置仍會以集群方式來執行

​ 同時執行2個任務,速度快但是占用記憶體資源

通過設定以下引數開啟並行模式:

​ set hive.exec.parallel=true;

一次sql計算中允許並行執行的job個數的最大值

​ hive.exec.parallel.thread.number

​ 防止大面積執行語句,防止有誤操作

通過設定以下引數開啟嚴格模式:

​ set hive.mapred.mode=strict;

​ (預設為:nonstrict非嚴格模式)

查詢限制

​ 1、對於分割槽表,必須新增where對於分割槽欄位的條件過濾;

​ 省了乙個分割槽的全掃瞄,只展示where欄位分割槽的標準

​ 2、order by語句必須包含 limit 輸出限制;

tips:order by 預設是在reduce端進行排序,換而言之,是在reduce端彙總資料

​ 3、限制執行笛卡爾積的查詢

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 的方式)

表連線

​ 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

通過設定以下引數開啟map端的聚合:

​ set hive.map.aggr = true;

對group by 產生的資料傾斜做優化

​ hive.groupby.skewindata

​ (預設false)

​ 在分組不合理的情況下,上面的語句執行原理是:在map階段執行兩個聚合

第乙個map拿到資料後進行隨機分發輸出給每個reduce,此時reduce做區域性聚合拿到count結果,第二次再按照普通的規則繼續下部操作

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

​ 直接申請多個jvm執行空間

適用場景:1、小檔案個數過多 2、task個數過多

通過 set mapred.job.reuse.jvm.num.tasks=n; 來設定

​ —n 為task插槽個數/jvm數

缺點:設定開啟之後,task插槽會一直占用資源,不論是否有task執行,直到所有的task即整個job全部執行完成時,才會釋放所有的task插槽資源!

Hive許可權管理

角色的新增 刪除 檢視 設定 create role role name 建立角色 drop role role name 刪除角色 set role role name all none 設定角色 show current roles 檢視當前具有的角色 show roles 檢視所有存在的角色 ...

Hive許可權管理

最近遇到乙個hive許可權的問題,先簡單記錄一下,目前自己的理解不一定對,後續根據自己的理解程度更新 一 hive使用者的概念 hive本身沒有建立使用者的命令,hive的使用者就是linux使用者,若當前是用mr使用者輸入hive,進入hive的shell,則當前hive的使用者為mr。hive本...

hive表級許可權控制 Hive許可權管理

一.storage based authorization in the metastore server 基於儲存的授權,可以對metastore中的元資料進行保護,但是沒有提供更加細粒度的訪問控制 例如 列級別 行級別等 啟用當前認證方式後,dfs,add,delete,compile,rese...