選單

CDP中的Hive3系列之配置Hive3

配置舊的 CREATE TABLE 行為

升級到 CDP 並遷移舊錶後,您可能希望暫時切換到 Hive 舊行為。舊行為可能會解決資料遷移期間指令碼的相容性問題,例如,在執行 ETL 時。

預設情況下,執行 CREATE TABLE 語句會在 Hive 元儲存中建立一個託管的 Apache Hive 3 表。您可以更改預設行為以使用舊的 CREATE TABLE 行為。配置舊行為時,CREATE TABLE 會生成外部表。由於完整 ACID 事務表相對於外部表的優勢,僅在升級期間建議使用舊行為。

Apache Hive 完整 ACID(事務)表比非事務表提供更好的效能、安全性和使用者體驗。預設情況下,執行 CREATE TABLE 語句會在 Hive 元儲存中建立一個託管的 Apache Hive 3 表。Hive 3 表是符合 ACID 的事務表,僅對 ORC 格式的資料具有以下完整的 ACID 功能:

插入

更新

刪除

使用符合 ACID 的事務表不會導致效能或操作過載,也不需要分桶。

如果您是 Spark 使用者,則無需切換到舊行為。例如,從 SparkSQL 呼叫“建立表”會在升級到 CDP 後建立一個外部表,就像升級前一樣。

配置舊的 CREATE TABLE 行為

當您配置舊行為時,CREATE TABLE 在您指定的倉庫中建立一個外部表,即/warehouse/tablespace/external/hive by default。 要在會話級別配置舊行為,您可以在啟動 Hive 時在 Beeline 連線字串中將屬性傳遞給 HiveServer (HS2)。或者,您可以在 Hive 命令列上傳遞該屬性以切換到舊行為。您還可以透過在 Cloudera Manager 中配置屬性在站點級別配置舊的建立錶行為。在站點級別進行配置時,舊行為會在會話之間持續存在。

會話級配置

步驟 1 描述了兩種配置傳統 CREATE TABLE 行為的方法。您可以按照步驟 2 中的說明覆蓋配置的舊行為以建立託管表。

選擇以下方法之一來配置舊的 CREATE TABLE 行為:

要在任何 JDBC 客戶端中配置舊行為,請包含 hiveCreateAsExternalLegacy=true在連線字串中。例如,在 Beeline 中,包含啟動 Hive 的連線字串:

您可以從檔案系統和元儲存中的表中清除。您可以更改 DROP 行為,以僅刪除元資料。

使用 MANAGED 關鍵字覆蓋會話級別(僅)配置的舊行為以建立託管表。

CREATE MANAGED TABLE test (id INT);

當您的會話結束時,建立遺留行為也會結束。如果您發出 CREATE TABLE 語句,Hive 將建立僅插入或完整 ACID 表,具體取決於您設定以下表屬性的方式:

站點級配置

在站點級別配置舊式建立錶行為時,舊式行為會在會話之間持續存在。您可以使用 Cloudera Manager 在站點級別配置此行為,如下所示:

在 Cloudera Manager > Clusters > Hive On Tez 中,搜尋 hive。create。

CDP中的Hive3系列之配置Hive3

透過以下方式之一配置屬性:

如果建立表作為 ACID 僅插入和 建立表作為完整 ACID屬性出現並被選中,請取消選中這些屬性。

如果您的 Cloudera Manager 版本未公開這些屬性,請在 hive-site。xml 的 HiveServer2 高階配置片段安全值中新增屬性和值。

限制連線的併發數

為了防止惡意應用程式重複連線並獨佔 HiveServer,您可以限制與 HiveServer 的併發連線。

作為管理員,您可以使用 Cloudera Manager 安全閥限制併發連線以將以下一項或多項屬性新增到 hive-site。xml配置檔案:

每個使用者的最大 HiveServer 併發連線數

hive。server2。limit。connections。per。ipaddress

每個 IP 地址的最大 HiveServer 併發連線數

hive。server2。limit。connections。per。user。ipaddress

每個使用者和 IP 地址組合的最大 HiveServer 併發連線數

每個引數的預設值為 0。您可以將每個引數的值更改為任意數字。必須在伺服器端配置併發連線;因此, hive ——hiveconf命令不起作用。

在此任務中,將每個使用者的連線數限制為 25。

以下元件正在執行:

HiveServer

Hive Metastore

Hive client

最低要求角色:配置者(也由叢集管理員、完全管理員提供)

在Cloudera Manager > Clusters 中選擇 Hive 服務。單擊 Configuration,然後搜尋 hive-site。xml。

CDP中的Hive3系列之配置Hive3

點選儲存。

單擊操作>部署客戶端配置。

重啟 HIVE。

Hive on Tez 配置

瞭解 Tez 上的關鍵 Hive 屬性可能會幫助您調整效能或解決問題,例如當您的預設會話配置僅允許執行一個時執行多個 TEZ Application Master (AM)。升級後,允許的預設會話數可能只有一個。建議知道自己在做什麼的使用者在 Tez 上進行 Hive 配置更改。

配置 HiveServer 高可用

您需要知道如何配置 Hive-on-Tez 以使用 ZooKeeper 來實現 HiveServer 高可用性。

當您向 Hive-on-Tez 服務新增一個或多個額外的 HiveServer (HS2) 角色例項時,多個角色例項可以向 ZooKeeper 註冊自己。JDBC 客戶端(客戶端驅動)可以透過 ZooKeeper 找到一個 HiveServer。使用 Beeline,您連線到 Hive,ZooKeeper 發現機制定位並連線到正在執行的 HiveServer 例項之一。

如果在 ZooKeeper 註冊了多個 HiveServer 例項,並且除了一個例項之外所有例項都失敗了,則 ZooKeeper 將連結傳遞給正在執行的例項,客戶端可以成功連線。失敗的例項必須手動重啟。

不會發生自動故障轉移。如果客戶端連線時 HS2 例項失敗,會話將丟失。由於這種情況需要交給客戶端,所以沒有自動故障轉移;客戶端需要使用 ZooKeeper 重新連線。

在升級到 CDP 之前,您的平臺可能支援在 HiveServer (HS2)、Knox 和動態發現中使用二進位制傳輸模式,但 CDP 不支援。使用替代解決方案,例如 HAProxy。

生成統計資訊

基於成本的最佳化器 (CBO) 生成高效的查詢計劃。在您為表生成列統計資訊之前,Hive 不會使用 CBO。預設情況下,Hive 僅收集表統計資訊。您需要配置 Hive 以啟用列統計資訊的收集。

CBO 由 Apache Calcite 提供支援,是 Hive 查詢處理引擎中的核心元件。CBO 最佳化執行查詢的計劃,計算成本,並選擇使用成本最低的計劃。除了提高執行計劃的效率之外,CBO 還可以節省資源。

CBO 如何運作

解析查詢後,程序將查詢轉換為邏輯樹(抽象語法樹),表示要執行的操作,例如讀取表或執行 JOIN。Calcite 應用最佳化,例如查詢重寫、JOIN 重新排序、JOIN 消除以及為查詢匯出隱含謂詞以生成邏輯上等效的計劃。Bushy 計劃提供最大的並行性。每個邏輯計劃都被分配了一個基於不同的、基於價值的啟發式的成本。

Calcite 計劃修剪器選擇成本最低的邏輯計劃。Hive 將選擇的邏輯計劃轉換為物理運算子樹,最佳化樹,並將樹轉換為 Tez 作業以在 Hadoop 叢集上執行。

設定基於成本的最佳化器和統計資訊

您可以使用基於成本的最佳化器 (CBO) 和統計資訊來開發可以提高效能的高效查詢執行計劃。您必須生成列統計資訊才能使 CBO 發揮作用。

在此任務中,您將啟用和配置基於成本的最佳化器 (CBO),並將 Hive 配置為收集列統計資訊和表統計資訊以評估查詢效能。列和表統計資訊對於估計謂詞選擇性和計劃成本至關重要。某些高階重寫需要列統計資訊。

在此任務中,您將檢查並設定以下屬性:

控制表級統計資訊的收集。

控制列級統計資訊的收集。

指示 Hive 在生成查詢計劃時使用統計資訊。

您可以使用 ANALYZE TABLE 語句為新建立的表和表分割槽手動生成表級統計資訊。

以下元件正在執行:

Hive Server

Hive Metastore

Hive Client

最低要求角色:配置者(也由叢集管理員、完全管理員提供)

CDP中的Hive3系列之配置Hive3

如果該屬性在您的 Cloudera Manager 版本中不可見,請使用 Cloudera Manager 安全閥(請參閱下面的連結)將該屬性新增到 Hive 站點。將該屬性設定為啟用。

生成和檢視 Apache Hive 統計資訊

您可以使用統計資訊來最佳化查詢以提高效能。基於成本的最佳化器 (CBO) 還使用統計資訊來比較查詢計劃並選擇最佳計劃。透過檢視統計資料而不是執行查詢,您通常可以更快地獲得資料問題的答案。

此任務顯示如何生成有關表的不同型別的統計資訊。

啟動 Hive shell 並登入。

收集未分割槽表的表統計資訊 mytable:

檢視您生成的表統計資訊:

收集表的列級統計資訊:

檢視列統計資訊為col_name列 my_table的my_db資料庫:

統計生成和檢視命令

您可以手動生成表和列統計資訊,然後使用 Hive 查詢檢視統計資訊。預設情況下,Hive 生成表統計資訊,而不是列統計資訊,您必須手動生成列統計資訊才能使基於成本的最佳化 (CBO) 發揮作用。

用於生成統計資訊的命令

以下 ANALYZE TABLE 命令生成表和列的統計資訊:

收集非分割槽表的表統計資訊。

收集分割槽表的表統計資訊。

收集整個表的列統計資訊。

收集在 col1 上使用鍵 x 分割槽的表上 partition2 列的統計資訊。

檢視統計資訊的命令

您可以使用以下命令查看錶和列的統計資訊:

檢視列統計資訊。

刪除臨時目錄

您需要知道如何定期清除 Apache Hive 使用的臨時目錄以防止出現問題,例如失敗的作業。

臨時儲存 Hive 儲存中間或臨時檔案的目錄隨著時間的推移積累了太多資料並溢位。您可以將 Hive 配置為定期刪除臨時目錄,無需使用者干預。使用 Cloudera Manager,新增以下屬性,如過程所示:

值:true

在啟動 HiveServer 時清理 Hive 臨時目錄。

值:true

在 HiveServer 中啟動一個執行緒以清除檔案系統中的懸空目錄,例如 HDFS。

示例值:1800 秒

在 Cloudera Manager 中,單擊叢集> Tez 上的 Hive >配置。叢集 > Tez 上的 Hive > 配置。

搜尋hive-site。xml設定的Hive 服務高階配置片段(安全閥)。

在hive-site。xml設定的Hive 服務高階配置片段(安全閥)中,單擊+。

在名稱中輸入屬性名稱,在值中輸入值。