Hadoop學習(8)——Hive高級應用(2)

一、Hive Lateral View

(1)什麼是hive Lateral View / 作用

Lateral View用於和UDTF函數(explode、split)結合來使用。
首先通過UDTF函數拆分成多行,再將多行結果組合成一個支持別名的虛擬表。

主要解決在select使用UDTF做查詢過程中,查詢只能包含單個UDTF,不能包含其他字段、以及多個UDTF的問題

(2)語法

LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)

(3)例子:統計人員表中共有多少種愛好、多少個城市?

select count(distinct(myCol1)), count(distinct(myCol2)) from psn2 
LATERAL VIEW explode(likes) myTable1 AS myCol1 
LATERAL VIEW explode(address) myTable2 AS myCol2, myCol3;

二、Hive 視圖

(1)hive View視圖特點

  • 不支持物化視圖
  • 只能查詢,不能做加載數據操作
  • 視圖的創建,只是保存一份元數據,查詢視圖時才執行對應的子查詢
  • view定義中若包含了ORDER BY/LIMIT語句,當查詢視圖時也進行ORDER BY/LIMIT語句操作,view當中定義的優先級更高
  • view支持迭代視圖

(2)View語法

創建視圖:

CREATE VIEW [IF NOT EXISTS] [db_name.]view_name 
  [(column_name [COMMENT column_comment], ...) ]
  [COMMENT view_comment]
  [TBLPROPERTIES (property_name = property_value, ...)]
  AS SELECT ... ;

查詢視圖:

select colums from view;

刪除視圖:

DROP VIEW [IF EXISTS] [db_name.]view_name;

三、Hive 索引

(1)Hive索引目的

優化查詢以及檢索性能

(2)語法

創建索引:

create index t1_index on table psn2(name) 
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild 
in table t1_index_table;
as:指定索引器;
in table:指定索引表,若不指定默認生成在default__psn2_t1_index__表中

create index t1_index on table psn2(name) 
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild;

查詢索引:

show index on psn2;

重建索引(建立索引之後必須重建索引才能生效):

ALTER INDEX t1_index ON psn REBUILD;

刪除索引:

DROP INDEX IF EXISTS t1_index ON psn2;

四、Hive 運行方式

(1)Hive有哪幾種運行方式

  • 命令行方式cli:控制檯模式
  • 腳本運行方式(實際生產環境中用最多)
  • JDBC方式:hiveserver2
  • web GUI接口 (hwihue等)

(2)CLI運行方式

與hdfs交互
執行執行dfs命令
例:dfs –ls /

與Linux交互
!開頭
例: !pwd

(3)腳本運行方式

hive -e ""
hive -e "">aaa
hive -S -e "">aaa
hive -f file
hive -i /home/my/hive-init.sql
hive> source file (在hive cli中運行)

五、Hive GUI接口

(1)Hive Web GU安裝

web界面安裝:
下載源碼包apache-hive-*-src.tar.gz
將hwi war包放在$HIVE_HOME/lib/
製作方法:將hwi/web/*裏面所有的文件打成war包
cd apache-hive-1.2.1-src/hwi/web
jar -cvf hive-hwi.war *
複製tools.jar(在jdk的lib目錄下)到$HIVE_HOME/lib下
修改hive-site.xml
啓動hwi服務(端口號9999)
hive --service hwi
瀏覽器通過以下鏈接來訪問
http://node3:9999/hwi/

修改hive配置文件hive-site.xml添加以下配置內容:

<property>
    <name>hive.hwi.listen.host</name>
    <value>0.0.0.0</value>
  </property>
  <property>
    <name>hive.hwi.listen.port</name>
    <value>9999</value>
  </property>
  <property>
    <name>hive.hwi.war.file</name>
    <value>lib/hive-hwi.war</value>
 </property>

http://node3:9999/hwi/

 六、Hive 權限管理

(1)三種授權模型

1Storage Based Authorization in the Metastore Server

基於存儲的授權 可以對Metastore中的元數據進行保護,但是沒有提供更加細粒度的訪問控制(例如:列級別、行級別)。

2SQL Standards Based Authorization in HiveServer2

基於SQL標準的Hive授權  完全兼容SQL的授權模型,推薦使用該模式。

3Default Hive Authorization (Legacy Mode)

hive默認授權  設計目的僅僅只是爲了防止用戶產生誤操作,而不是防止惡意用戶訪問未經授權的數據。

(2)完全兼容SQL的授權模型:除支持對於用戶的授權認證,還支持角色role的授權認證

  • role可理解爲是一組權限的集合,通過role爲用戶授權
  • 一個用戶可以具有一個或多個角色
  • 默認包含另種角色:publicadmin

限制

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添加以下配置內容:

<property>
  <name>hive.security.authorization.enabled</name>
  <value>true</value>
</property>
<property>
  <name>hive.server2.enable.doAs</name>
  <value>false</value>
</property>
<property>
  <name>hive.users.in.admin.role</name>
  <value>root</value>
</property>
<property>
  <name>hive.security.authorization.manager</name>
  <value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory</value>
</property>
<property>
  <name>hive.security.authenticator.manager</name>
  <value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>

服務端啓動hiveserver2;客戶端通過beeline進行連接

 

(3)Hive權限管理:角色的添加、刪除、查看、設置

CREATE ROLE role_name;  -- 創建角色
DROP ROLE role_name;  -- 刪除角色
SET ROLE (role_name|ALL|NONE);  -- 設置角色
SHOW CURRENT ROLES;  -- 查看當前具有的角色
SHOW ROLES;  -- 查看所有存在的角色

(4)角色的授予、移除、查看

角色授予某個用戶、角色:

GRANT role_name [, role_name] ...
TO principal_specification [, principal_specification] ...
[ WITH ADMIN OPTION ];

principal_specification
  : USER user
  | ROLE role

移除某個用戶、角色的角色:

REVOKE [ADMIN OPTION FOR] role_name [, role_name] ...
FROM principal_specification [, principal_specification] ... ;
 
principal_specification
  : USER user
  | ROLE role

查看授予某個用戶、角色的角色列表:

SHOW ROLE GRANT (USER|ROLE) principal_name;

查看屬於某種角色的用戶、角色列表:

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章