您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Apache Hive3的主要功能有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Cloudera Runtime(CR)服務包括Hive和Hive Metastore。Hive服務基于Apache Hive 3.x(基于SQL的數據倉庫系統)。Hive 3.x與以前版本相比的增強功能可以提高查詢性能并符合Internet法規。
Hive 3表符合ACID(原子性、一致性、隔離性和耐久性)標準,這對于遵守GDPR(通用數據保護法規)被遺忘的權利至關重要。
Hive Metastore(HMS)可與多個引擎(例如Impala和Spark)互操作,從而簡化了引擎與用戶數據訪問之間的互操作。
Hive使用低延遲分析處理(LLAP)或Apache Tez執行引擎來處理事務。Hive LLAP服務在CDP數據中心中不可用。
您可以使用Hive從Apache Spark應用程序查詢數據,而無需解決方法。Hive Warehouse Connector支持從Spark讀取和寫入Hive表。
默認情況下,Apache Ranger保護Hive數據。為了滿足對并發性改進的需求,對GDPR的ACID支持,渲染安全性和其他功能,Hive嚴格控制了倉庫在文件系統或對象存儲以及內存資源上的位置。
您可以配置誰使用查詢資源,可以使用多少資源以及Hive對資源請求的響應速度。工作負載管理可以改善并行查詢的執行,查詢的集群共享以及查詢性能。
因為多個查詢經常需要相同的中間匯總表或聯接表,所以可以通過將中間表預先計算和緩存到視圖中來避免昂貴、重復的查詢部分共享。
配置單元過濾并緩存相似或相同的查詢。Hive不會重新計算未更改的數據。當數百個或數千個BI工具和Web服務的用戶查詢Hive時,緩存重復查詢可以大大減少負載。
啟動后,Hive從JDBC數據源創建兩個數據庫:information_schema和sys。所有Metastore表都映射到您的表空間中,并且在sys中可用。information_schema數據顯示系統狀態,類似于sys數據庫數據。您可以使用SQL標準查詢來查詢information_schema。
S3和LLAP(僅CDP數據中心7.0)
Hive CLI(由Beeline取代)
WebHCat
Hcat CLI
SQL標準授權
MapReduce執行引擎(由Tez取代)
了解Apache Hive 3的主要設計功能(例如默認的ACID事務處理)可以幫助您使用Hive滿足企業數據倉庫系統不斷增長的需求。
Apache Tez是Cloudera Manager中Hive-on-Tez服務的Hive執行引擎。不支持MapReduce。在Cloudera集群中,如果舊腳本或應用程序指定MapReduce執行,則會發生異常。大多數用戶定義函數(UDF)不需要更改即可在Tez上執行,而無需執行MapReduce。
使用有向無環圖(DAG)的表達式和數據傳輸原語,在Tez上而不是MapReduce上執行Hive查詢可以提高查詢性能。在Cloudera Data Plane(CDP)中,Tez通常僅由Hive使用,并且HiveServer會在HiveServer2啟動時自動啟動并管理Tez AM。您提交給Hive的SQL查詢的執行方式如下:
Hive編譯查詢。
Tez執行查詢。
資源是為整個集群中的應用程序分配的。
Hive更新數據源中的數據并返回查詢結果。
Hive on Tez在臨時容器上運行任務,并使用標準的YARN shuffle服務。
支持Hive 3設計的主要架構更改之一使Hive對元數據內存資源和vfile系統或對象存儲有了更多控制。從Hive 2到Hive 3的以下架構變更提供了更高的安全性:
嚴格控制的文件系統和計算機內存資源,替代了靈活的邊界:明確的邊界提高了可預測性。更好的文件系統控制可提高安全性。
優化共享文件和YARN容器中的工作負載
默認情況下,CDP數據中心將Hive數據存儲在HDFS上,CDP公共云將Hive數據存儲在S3上。在云中,Hive僅將HDFS用于存儲臨時文件。Hive 3通過以下方式針對對象存儲(例如S3)進行了優化:
Hive使用ACID來確定要讀取的文件,而不是依賴于存儲系統。
在Hive 3中,文件移動比在Hive 2中減少。
Hive積極地緩存元數據和數據,以減少文件系統的操作
Hive的主要授權模型是Ranger。Hive強制實施Ranger中指定的訪問控制。與其他安全方案相比,該模型提供了更強的安全性,并且在管理策略方面具有更大的靈活性。
此模型僅允許Hive訪問數據倉庫。如果您未啟用Ranger安全服務或其他安全性,則默認情況下,Hive會根據用戶模擬使用CDP數據中心基于存儲的授權(SBA)。
在CDP數據中心中,SBA嚴重依賴于HDFS訪問控制列表(ACL)。ACL是HDFS中權限系統的擴展。默認情況下,CDP數據中心在HDFS中打開ACL,為您提供以下優勢:
授予多個組和用戶特定權限時增加了靈活性
方便地將權限應用于目錄樹,而不是單個文件
您可以利用以下事務處理特性來部署新的Hive應用程序類型:
ACID事務處理的成熟版本:
ACID表是默認的表類型。
默認情況下啟用ACID不會導致性能或操作過載。
簡化應用程序開發,具有強大事務保證的操作以及SQL命令的簡單語義
您不需要存儲ACID表。
物化視圖重寫
自動查詢緩存
高級優化
CDP數據中心支持在命令行上使用瘦客戶端Beeline。您可以從命令行運行Hive管理命令。Beeline使用與HiveServer的JDBC連接來執行命令。解析、編譯和執行操作在HiveServer中進行。Beeline支持Hive CLI支持的許多命令行選項。Beeline不支持 hive -e set key=value來配置Hive Metastore。
通過使用hive 關鍵字、命令選項和命令來調用Beeline,可以輸入受支持的Hive CLI命令。例如,hive -e set。使用Beeline代替不再受支持的胖客戶端Hive CLI具有許多優點,包括較低的開銷。Beeline不會使用整個Hive代碼庫。執行查詢所需的少量守護程序簡化了監視和調試。
HiveServer強制執行您可以使用SET命令更改的白名單和黑名單設置。使用黑名單,您可以限制內存配置更改,以防止HiveServer不穩定。您可以使用不同的白名單和黑名單配置多個HiveServer實例,以建立不同級別的穩定性。
您可以使用grunt命令行與Apache Pig一起使用。
HiveServer,Impala和其他組件可以共享遠程Hive元存儲。在CDP公共云中,HMS使用預安裝的MySQL數據庫。您幾乎沒有執行HMS或僅在云中進行HMS的配置。
在某些情況下,Spark和Hive表可以使用Hive Warehouse連接器進行互操作。
您可以使用Hive Warehouse連接器從Spark訪問ACID和外部表。您不需要Hive Warehouse Connector即可從Spark讀取Hive外部表并從Spark寫入Hive外部表。
您可以使用JDBC命令行工具(例如Beeline)或使用JDBC/ODBC驅動程序和BI工具(例如Tableau)連接到Hive。客戶端與相同HiveServer版本的實例進行通信。您可以為每個實例配置設置文件以執行批處理或交互式處理。
02
—
Apache Hive3性能調優
CDP公共云支持Hive查詢的低延遲分析處理(LLAP)。使用CDP數據倉庫服務中可使用LLAP,您可以調整數據倉庫基礎結構、組件和客戶端連接參數,以提高性能和與商務智能和其他應用程序的相關性。
企業越來越希望運行SQL工作負載,這些工作負載返回的結果要比批處理提供的結果更快。這些企業通常希望數據分析應用程序支持交互式查詢。低延遲分析處理(LLAP)可以提高交互式查詢的性能。在CDP公共云上運行的Hive交互式查詢滿足了低延遲、可變參數基準,Hive LLAP在15秒或更短的時間內響應了該基準。LLAP使應用程序開發和IT基礎結構能夠運行返回實時或接近實時結果的查詢。
CDP數據中心版不支持LLAP。
在調整Apache Hive之前,您應該遵循最佳實踐。這些準則包括如何配置群集,存儲數據和編寫查詢。
在需要資源來處理查詢時,可以在CDP公共云中調整自動縮放以擴大規模。
接受默認設置以使用Tez作為執行引擎。在CDP中,MapReduce執行引擎由Tez代替。
接受默認設置以禁用用戶模擬。如果啟用,請使用Cloudera Manager安全閥功能hive.server2.enable.doAs在 hive-site.xml中禁用 (請參閱下面的鏈接)。
LLAP緩存用于多個查詢的數據,并且此功能不支持用戶模擬。
使用Ranger安全服務來保護您的群集和相關服務。
使用ORC文件格式存儲數據。
通過檢查解釋計劃,確保查詢被完全矢量化。
使用SmartSense工具檢測常見的系統錯誤配置。
您可以通過多種方式來節省存儲空間,但是使用優化行列(ORC)文件格式存儲Apache Hive數據最為有效。ORC是Hive數據的默認存儲。
出于以下原因,建議使用Hive數據存儲的ORC文件格式:
高效壓縮:存儲為列并進行壓縮,這會導致較小的磁盤讀取。列格式也是Tez中矢量化優化的理想選擇。
快速讀取:ORC具有內置索引,最小/最大值和其他聚合,導致在讀取期間跳過整個條帶。另外,謂詞下推將過濾器推入讀取,以便讀取最少的行。布隆過濾器進一步減少了返回的行數。
在大規模部署中得到證明:Facebook將ORC文件格式用于300多個PB部署。
ORC總體上提供最佳的Hive性能。此外,要指定存儲格式,還可以為表指定壓縮算法,如以下示例所示:
CREATE TABLE addresses (name string,street string,city string,state string,zip int) STORED AS orc TBLPROPERTIES ("orc.compress"="Zlib");
通常不需要設置壓縮算法,因為您的Hive設置包括默認算法。使用ORC高級屬性,可以為點查找中經常使用的列創建Bloom過濾器。
Hive支持僅用于插入式ACID表和外部表的Parquet和其他格式。您還可以編寫自己的SerDes(序列化器,反序列化器)接口以支持自定義文件格式。
高級ORC屬性
通常,您不需要修改ORC屬性,但是偶爾,Cloudera支持建議進行此類更改。您可以使用Cloudera Manager中的安全閥功能來更改屬性。
您可以使用分區來顯著提高性能。您可以設計Hive表和物化視圖分區以映射到文件系統/對象存儲上的物理目錄。例如,按日期時間劃分的表可以組織每天加載到Hive中的數據。
大型部署可以具有成千上萬個分區。當Hive在查詢處理期間發現分區鍵時,分區修剪將間接發生。例如,在加入維表后,分區鍵可能來自維表。查詢按分區過濾列,從而將掃描限制在一個或幾個匹配的分區上。當WHERE子句中存在分區鍵時,將直接進行分區修剪。分區列是虛擬的,不寫入主表,因為這些列對于整個分區都是相同的。在SQL查詢中,您定義了分區,如以下示例所示:
CREATE TABLE sale(id in, amount decimal)PARTITIONED BY (xdate string, state string);
要將數據插入此表中,請指定用于快速加載的分區鍵:
INSERT INTO sale (xdate='2016-03-08', state='CA')SELECT * FROM staging_tableWHERE xdate='2016-03-08' AND state='CA';
您不需要指定動態分區列。如果啟用動態分區,則Hive會生成分區規范。
用于加載1到9個分區的hive-site.xml設置:
SET hive.exec.dynamic.partition.mode=nonstrict;SET hive.exec.dynamic.partition=true;
要將數據批量加載到分區的ORC表中,請使用以下屬性,該屬性可優化將數據加載到10個或更多分區中的性能。
用于加載10個或更多分區的hive-site.xml設置:
hive.optimize.sort.dynamic.partition=true
INSERT INTO sale (xdate, state)SELECT * FROM staging_table;
對表進行分區和查詢分區表時,請遵循以下最佳實踐:
切勿在唯一ID上分區。
分區的大小平均大于或等于1 GB。
設計查詢以處理不超過1000個分區。
如果將數據從Apache Hive的早期版本遷移到Hive 3,則可能需要處理影響性能的存儲分桶表。
您可以將表或分區劃分為存儲區,這些存儲區可以通過以下方式存儲:
作為表目錄中的文件。
如果表已分區,則作為分區目錄。
無需在新的Hive 3表中使用存儲分桶。
與存儲分桶相關的一個常見挑戰是在增加或減少工作負載或數據時保持查詢性能。例如,您可能擁有一個使用16個存儲分桶來支持1000個用戶的平穩運行的環境,但是如果您不及時調整存儲桶和分區,則用戶數量激增到一兩天就達到了100,000,這會產生問題。在使用表構建表之后,必須重新加載包含表數據的整個表,以減少,添加或刪除表分桶,這使表桶調優變得很復雜。
使用Tez,您只需要處理最大的表上的分桶。如果工作負載需求快速變化,則較小表的存儲分桶會動態更改以完成表JOIN。
您執行以下與存儲分桶相關的任務:
設置hive-site.xml以啟用存儲分桶
SET hive.tez.bucket.pruning=true
既有分區又有分桶的批量加載表:
將數據加載到既分區又存儲分桶的表中時,請設置以下屬性以優化過程:
SET hive.optimize.sort.dynamic.partition=true
如果您有20個存儲在user_id數據上的存儲分桶,則以下查詢僅返回與user_id = 1關聯的數據:
SELECT * FROM tab WHERE user_id = 1;
為了最好地利用Tez上表分桶的動態功能,請采取以下做法:
對最大表的存儲分桶使用單個鍵。
通常,您需要按最大維表對主表進行存儲。例如,銷售表可能是按客戶存儲的,而不是按商品或商店存儲的。但是,在這種情況下,銷售表是按物料和商店排序的。
通常,不要在同一列上進行存儲和排序。
如果表的存儲分桶文件數超過行數,則表明您應該重新考慮表的存儲方式。
關于“Apache Hive3的主要功能有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。