天天看點

CDP中的Hive3系列之啟動Apache Hive31. 在不安全的叢集上啟動 Hive2  使用密碼啟動 Hive3  運作 Hive 指令4  将 Hive CLI 腳本轉換為 Beeline

這是CDP中Apache Hive3使用者指南系列之一,之前的文章請參考< CDP的Hive3系列之Hive Metastore介紹 >和< CDP中的Hive3系列之Apache Hive3的特性 >

1. 在不安全的叢集上啟動 Hive

如果您想使用 Apache Hive 進行快速測試,您可以使用 Hive 預設授權模式來執行此操作,假設您位于不安全的叢集上(沒有 Kerberos 或 Ranger 政策)。預設授權模式下,隻有使用者hive可以通路Hive。啟動 Hive shell 的步驟,不要與 CDP 不支援的 Hive CLI 混淆,包括如何登入到叢集。

在叢集指令行中,您可以在叢集的指令行上鍵入hive以啟動 Hive shell。在背景,Beeline 啟動 Hive shell。

1)    在 Cloudera Manager 中,單擊主機>所有主機。

CDP中的Hive3系列之啟動Apache Hive31. 在不安全的叢集上啟動 Hive2  使用密碼啟動 Hive3  運作 Hive 指令4  将 Hive CLI 腳本轉換為 Beeline

2)    記下叢集中某個節點的 IP 位址或主機名,例如 myhost-vpc.cloudera.com。

3)    使用 ssh 登入叢集。例如:

ssh myhost-vpc.cloudera.com      

4)    鍵入hive以從指令行啟動 Hive。

5)    輸入 Hive 查詢。

SHOW DATABASES;
CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3,2));
INSERT INTO TABLE students VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);      

原文連結:

https://docs.cloudera.com/cdp-private-cloud-base/latest/starting-hive/topics/hive_start_hive.html

2  使用密碼啟動

您可以使用 Beeline 指令啟動 Hive shell,以作為 Apache Ranger 授權的最終使用者查詢 Hive。作為管理者,您在作業系統和 Ranger中設定最終使用者。

在第一次啟動 Hive 之前,您可能需要檢查您是否受基本操作所需的 Ranger 政策的保護,如以下步驟所示。所有使用者都需要使用default資料庫,執行列出資料庫名稱等操作,以及查詢資訊模式。在preloaded default database tables columns與information_schema database的Ranger政策覆寫組public(所有使用者)。如果禁用這些政策,則無法使用預設資料庫、無法執行列出資料庫名稱等基本操作或查詢資訊架構。例如,如果default database tables columns政策被禁用,如果您嘗試使用default資料庫,則會出現以下錯誤:

hive> USE default;
Error: Error while compiling statement: FAILED: HiveAccessControlException 
Permission denied: user [hive] does not have [USE] privilege on [default]      

1)    通路 Ranger 控制台:從 Cloudera Manager,單擊 Ranger Admin Web UI 連結,輸入您的 Ranger Admin 使用者名和密碼,然後單擊登入。

2)    在最右側,單擊Ranger > 服務名稱>,其中預加載服務的服務名稱是 HADOOP SQL 或舊版本的 cm_hive。

CDP中的Hive3系列之啟動Apache Hive31. 在不安全的叢集上啟動 Hive2  使用密碼啟動 Hive3  運作 Hive 指令4  将 Hive CLI 腳本轉換為 Beeline

3)    在允許條件中,編輯all - database, table, column.

4)    将您的使用者名或組名添加到Hive 政策以授予對 Hive 的完全通路權限。

例如,将 admins 組名添加到可以通路 Hive 的組清單中。

CDP中的Hive3系列之啟動Apache Hive31. 在不安全的叢集上啟動 Hive2  使用密碼啟動 Hive3  運作 Hive 指令4  将 Hive CLI 腳本轉換為 Beeline

5)    檢查是否為public 組啟用了預加載default database tables columns和 information_schema database政策。

CDP中的Hive3系列之啟動Apache Hive31. 在不安全的叢集上啟動 Hive2  使用密碼啟動 Hive3  運作 Hive 指令4  将 Hive CLI 腳本轉換為 Beeline

6)    在 Cloudera Manager 中,單擊主機>所有主機。

CDP中的Hive3系列之啟動Apache Hive31. 在不安全的叢集上啟動 Hive2  使用密碼啟動 Hive3  運作 Hive 指令4  将 Hive CLI 腳本轉換為 Beeline

7)    記下叢集中某個節點的 IP 位址或主機名,例如 myhost-vpc.cloudera.com。

8)    使用 ssh 登入叢集。

例如:

ssh myhost-mydomain.com      

您可以獲得有關啟動 Hive shell 的幫助。在指令行中,鍵入

hive -h      

輸出是:

Connect using simple authentication to HiveServer2 on localhost:10000
beeline -u jdbc:hive2://localhost:10000 username password
                    
Connect using simple authentication to HiveServer2 on hs.local:10000 using -n for username and -p for password
beeline -n username -p password -u jdbc:hive2://hs2.local:10012
                    
Connect using Kerberos authentication with hive/[email protected] as HiveServer2 principal
beeline -u "jdbc:hive2://hs2.local:10013/default;principal=hive/[email protected]"
                    
Connect using SSL connection to HiveServer2 on localhost at 10000
beeline "jdbc:hive2://localhost:10000/default;ssl=true;sslTrustStore=/usr/local/truststore;trustStorePassword=mytruststorepassword"
                    
Connect using LDAP authentication
beeline -u jdbc:hive2://hs2.local:10013/default <ldap-username> <ldap-password>      

9)    在Cloudera Manager > Hosts > Role(s) 中使用叢集中的節點的完全限定域名或 IP 位址,并檢視角色清單以查找HiveServer (HS2) 角色。

此節點具有 HiveServer 角色,是以您可以在 Beeline 中使用名稱或 IP 位址。

10)  啟動 Hive shell。

a)    如果設定了叢集安全性,請使用您的使用者名。

b)     使用使用者名hive而不使用密碼。

将 HiveServer (HS2) 主機的名稱或 IP 位址替換為 10.65.13.98。

簡單認證:

beeline -u jdbc:hive2://10.65.13.98:10000 -n <your user name> -p      

Kerberos:

beeline -u "jdbc:hive2://10.65.13.98:10000/default;principal=hive/[email protected]"      

11)  輸入 Hive 查詢。

SHOW DATABASES;
CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3,2));
INSERT INTO TABLE students VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);      
https://docs.cloudera.com/cdp-private-cloud-base/latest/starting-hive/topics/hive_start_hive_as_authorized_user.html

3  運作 Hive 指令

您可以從叢集中節點的指令行運作大多數将配置變量推送到 Hive SQL 腳本的 Hive 指令。您可以使用關鍵字和選項在Beeline 中啟動這些指令。

Hive 支援從指令行運作 Hive 指令。您輸入的指令在背景啟動Beeline。-e後跟 Hiveset指令的标志 列出了系統變量。

在 CDP 叢集中某個節點的指令行上,輸入 hive指令以将配置屬性發送到标準輸出。

> hive -e set      

出現支援的指令。Beeline 支援所有過時的 Hive CLI 指令,但配置 Hive Metastore 的set key=value指令除外。

輸出包括系統變量設定:

+----------------------------------------------------------------+
|                           set                                |
+----------------------------------------------------------------+
| _hive.hdfs.session.path=/tmp/hive/hive/91ecb...00a             |
| _hive.local.session.path=/tmp/hive/91ecb...00a                 |                                 |
 ...      
https://docs.cloudera.com/cdp-private-cloud-base/latest/starting-hive/topics/hive_run_hive_command.html

4  将 Hive CLI 腳本轉換為 Beeline

如果您有使用 Hive CLI 從邊緣節點運作 Hive 查詢的遺留腳本,您必須解決這些腳本中變量替換的潛在不相容性。CDP 支援 Beeline 而不是 Hive CLI。您可以使用 Beeline 運作遺留腳本,但有一些注意事項。

在此任務中,您将解決舊 Hive CLI 腳本和 Beeline 中的不相容問題:

·       配置變量

n  問題:除非允許,否則您不能使用hiveconf命名空間在腳本中引用配置參數。

n  解決方案:您将該參數包含在 HiveServer 許可名單(白名單)中。

·       命名空間問題

n  問題:Beeline 不支援命名空間的變量 system和env。

n  解決方案:您可以使用本任務中描述的轉換技術從腳本中删除這些命名空間引用。

1)    建立一個名為的轉換腳本env_to_hivevar.sh,用于删除envSQL 腳本中的引用。

#!/usr/bin/env bash
                        
CMD_LINE=""
                        
#Blank conversion of all env scoped values
for I in `env`; do
  CMD_LINE="$CMD_LINE --hivevar env:${I} "
done
echo ${CMD_LINE}      

2)    例如,在叢集中某個節點的指令行中,定義并導出一個名為 HIVEVAR 的變量,并将其設定為執行轉換腳本。

export HIVEVAR=`./env_to_hivevar.sh`      

3)    定義和導出變量以儲存一些用于測試轉換的變量。

export LOC_TIME_ZONE="US/EASTERN"
export MY_TEST_VAR="TODAY"      

4)    在叢集節點的指令行上,測試轉換:執行引用HIVEVAR的指令解析SQL語句,去除不相容的 env命名空間,執行剩餘的SQL。

hive ${HIVEVAR} -e 'select "${env:LOC_TIME_ZONE}";'
+-------------+
|     _c0    |
+-------------+
| US/EASTERN  |
+-------------+      

5)    建立一個名為init_var.sql模拟遺留腳本的文本檔案,該腳本設定兩個配置參數,一個在有問題的 env命名空間中。

set mylocal.test.var=hello;
set mylocal.test.env.var=${env:MY_TEST_VAR};      

6)    在許可名單中包含這些配置參數: 在 Cloudera Manager 中,轉到Clusters > HIVE_ON_TEZ-1 > Configuration,然後搜尋 hive-site。

7)    在hive-site.xml 的 HiveServer2 進階配置片段(安全閥)中,添加屬性鍵: hive.security.authorization.sqlstd.confwhitelist.append。

8)    向許可名單提供一個或多個屬性值,例如: mylocal\..*|junk。

這個動作追加mylocal.test.var和 mylocal.test.env.var參數的允許清單。

9)    儲存配置更改,并根據需要重新啟動任何元件。

10)  執行引用 HIVEVAR 的指令來解析 SQL 腳本,移除不相容的env命名空間,并執行剩餘的 SQL,包括由 hiveconf:.

hive -i init_var.sql ${HIVEVAR} -e 'select "${hiveconf:mylocal.test.var}","${hiveconf:mylocal.test.env.var}";'                  
+--------+--------+
|  _c0  |  _c1   |
+--------+--------+
| hello  | TODAY |
+--------+--------+      
https://docs.cloudera.com/cdp-private-cloud-base/latest/starting-hive/topics/hive_use_variables.html