溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Apache Hive3的主要功能有哪些

發(fā)布時間:2021-12-10 09:11:03 來源:億速云 閱讀:226 作者:小新 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)Apache Hive3的主要功能有哪些,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。


Apache Hive3的主要功能

Cloudera Runtime(CR)服務(wù)包括Hive和Hive Metastore。Hive服務(wù)基于Apache Hive 3.x(基于SQL的數(shù)據(jù)倉庫系統(tǒng))。Hive 3.x與以前版本相比的增強(qiáng)功能可以提高查詢性能并符合Internet法規(guī)。

ACID事務(wù)處理

Hive 3表符合ACID(原子性、一致性、隔離性和耐久性)標(biāo)準(zhǔn),這對于遵守GDPR(通用數(shù)據(jù)保護(hù)法規(guī))被遺忘的權(quán)利至關(guān)重要。

共享的Hive Metastore

Hive Metastore(HMS)可與多個引擎(例如Impala和Spark)互操作,從而簡化了引擎與用戶數(shù)據(jù)訪問之間的互操作。

低延遲分析處理(CDP公共云)

Hive使用低延遲分析處理(LLAP)或Apache Tez執(zhí)行引擎來處理事務(wù)。Hive LLAP服務(wù)在CDP數(shù)據(jù)中心中不可用。

Hive集成Spark

您可以使用Hive從Apache Spark應(yīng)用程序查詢數(shù)據(jù),而無需解決方法。Hive Warehouse Connector支持從Spark讀取和寫入Hive表。

安全改進(jìn)

默認(rèn)情況下,Apache Ranger保護(hù)Hive數(shù)據(jù)。為了滿足對并發(fā)性改進(jìn)的需求,對GDPR的ACID支持,渲染安全性和其他功能,Hive嚴(yán)格控制了倉庫在文件系統(tǒng)或?qū)ο蟠鎯σ约皟?nèi)存資源上的位置。

查詢級別的工作負(fù)載管理

您可以配置誰使用查詢資源,可以使用多少資源以及Hive對資源請求的響應(yīng)速度。工作負(fù)載管理可以改善并行查詢的執(zhí)行,查詢的集群共享以及查詢性能。

物化視圖

因?yàn)槎鄠€查詢經(jīng)常需要相同的中間匯總表或聯(lián)接表,所以可以通過將中間表預(yù)先計算和緩存到視圖中來避免昂貴、重復(fù)的查詢部分共享。

查詢結(jié)果緩存

配置單元過濾并緩存相似或相同的查詢。Hive不會重新計算未更改的數(shù)據(jù)。當(dāng)數(shù)百個或數(shù)千個BI工具和Web服務(wù)的用戶查詢Hive時,緩存重復(fù)查詢可以大大減少負(fù)載。

information_schema

啟動后,Hive從JDBC數(shù)據(jù)源創(chuàng)建兩個數(shù)據(jù)庫:information_schema和sys。所有Metastore表都映射到您的表空間中,并且在sys中可用。information_schema數(shù)據(jù)顯示系統(tǒng)狀態(tài),類似于sys數(shù)據(jù)庫數(shù)據(jù)。您可以使用SQL標(biāo)準(zhǔn)查詢來查詢information_schema。

接口不可用或不支持

  • S3和LLAP(僅CDP數(shù)據(jù)中心7.0)

  • Hive CLI(由Beeline取代)

  • WebHCat

  • Hcat CLI

  • SQL標(biāo)準(zhǔn)授權(quán)

  • MapReduce執(zhí)行引擎(由Tez取代)

Apache Hive 3架構(gòu)概述

了解Apache Hive 3的主要設(shè)計功能(例如默認(rèn)的ACID事務(wù)處理)可以幫助您使用Hive滿足企業(yè)數(shù)據(jù)倉庫系統(tǒng)不斷增長的需求。

Apache Tez

Apache Tez是Cloudera Manager中Hive-on-Tez服務(wù)的Hive執(zhí)行引擎。不支持MapReduce。在Cloudera集群中,如果舊腳本或應(yīng)用程序指定MapReduce執(zhí)行,則會發(fā)生異常。大多數(shù)用戶定義函數(shù)(UDF)不需要更改即可在Tez上執(zhí)行,而無需執(zhí)行MapReduce。

使用有向無環(huán)圖(DAG)的表達(dá)式和數(shù)據(jù)傳輸原語,在Tez上而不是MapReduce上執(zhí)行Hive查詢可以提高查詢性能。在Cloudera Data Plane(CDP)中,Tez通常僅由Hive使用,并且HiveServer會在HiveServer2啟動時自動啟動并管理Tez AM。您提交給Hive的SQL查詢的執(zhí)行方式如下:

  • Hive編譯查詢。

  • Tez執(zhí)行查詢。

  • 資源是為整個集群中的應(yīng)用程序分配的。

  • Hive更新數(shù)據(jù)源中的數(shù)據(jù)并返回查詢結(jié)果。

Hive on Tez在臨時容器上運(yùn)行任務(wù),并使用標(biāo)準(zhǔn)的YARN shuffle服務(wù)。

數(shù)據(jù)存儲和訪問控制

支持Hive 3設(shè)計的主要架構(gòu)更改之一使Hive對元數(shù)據(jù)內(nèi)存資源和vfile系統(tǒng)或?qū)ο蟠鎯τ辛烁嗫刂?。從Hive 2到Hive 3的以下架構(gòu)變更提供了更高的安全性:

  • 嚴(yán)格控制的文件系統(tǒng)和計算機(jī)內(nèi)存資源,替代了靈活的邊界:明確的邊界提高了可預(yù)測性。更好的文件系統(tǒng)控制可提高安全性。

  • 優(yōu)化共享文件和YARN容器中的工作負(fù)載

默認(rèn)情況下,CDP數(shù)據(jù)中心將Hive數(shù)據(jù)存儲在HDFS上,CDP公共云將Hive數(shù)據(jù)存儲在S3上。在云中,Hive僅將HDFS用于存儲臨時文件。Hive 3通過以下方式針對對象存儲(例如S3)進(jìn)行了優(yōu)化:

  • Hive使用ACID來確定要讀取的文件,而不是依賴于存儲系統(tǒng)。

  • 在Hive 3中,文件移動比在Hive 2中減少。

  • Hive積極地緩存元數(shù)據(jù)和數(shù)據(jù),以減少文件系統(tǒng)的操作

Hive的主要授權(quán)模型是Ranger。Hive強(qiáng)制實(shí)施Ranger中指定的訪問控制。與其他安全方案相比,該模型提供了更強(qiáng)的安全性,并且在管理策略方面具有更大的靈活性。

此模型僅允許Hive訪問數(shù)據(jù)倉庫。如果您未啟用Ranger安全服務(wù)或其他安全性,則默認(rèn)情況下,Hive會根據(jù)用戶模擬使用CDP數(shù)據(jù)中心基于存儲的授權(quán)(SBA)。

HDFS權(quán)限更改

在CDP數(shù)據(jù)中心中,SBA嚴(yán)重依賴于HDFS訪問控制列表(ACL)。ACL是HDFS中權(quán)限系統(tǒng)的擴(kuò)展。默認(rèn)情況下,CDP數(shù)據(jù)中心在HDFS中打開ACL,為您提供以下優(yōu)勢:

  • 授予多個組和用戶特定權(quán)限時增加了靈活性

  • 方便地將權(quán)限應(yīng)用于目錄樹,而不是單個文件

事務(wù)處理

您可以利用以下事務(wù)處理特性來部署新的Hive應(yīng)用程序類型:

  • ACID事務(wù)處理的成熟版本:

ACID表是默認(rèn)的表類型。

默認(rèn)情況下啟用ACID不會導(dǎo)致性能或操作過載。

  • 簡化應(yīng)用程序開發(fā),具有強(qiáng)大事務(wù)保證的操作以及SQL命令的簡單語義

您不需要存儲ACID表。

  • 物化視圖重寫

  • 自動查詢緩存

  • 高級優(yōu)化

Hive客戶端變更

CDP數(shù)據(jù)中心支持在命令行上使用瘦客戶端Beeline。您可以從命令行運(yùn)行Hive管理命令。Beeline使用與HiveServer的JDBC連接來執(zhí)行命令。解析、編譯和執(zhí)行操作在HiveServer中進(jìn)行。Beeline支持Hive CLI支持的許多命令行選項(xiàng)。Beeline不支持 hive -e set key=value來配置Hive Metastore。

通過使用hive 關(guān)鍵字、命令選項(xiàng)和命令來調(diào)用Beeline,可以輸入受支持的Hive CLI命令。例如,hive -e set。使用Beeline代替不再受支持的胖客戶端Hive CLI具有許多優(yōu)點(diǎn),包括較低的開銷。Beeline不會使用整個Hive代碼庫。執(zhí)行查詢所需的少量守護(hù)程序簡化了監(jiān)視和調(diào)試。

HiveServer強(qiáng)制執(zhí)行您可以使用SET命令更改的白名單和黑名單設(shè)置。使用黑名單,您可以限制內(nèi)存配置更改,以防止HiveServer不穩(wěn)定。您可以使用不同的白名單和黑名單配置多個HiveServer實(shí)例,以建立不同級別的穩(wěn)定性。

您可以使用grunt命令行與Apache Pig一起使用。

Apache Hive Metastore共享

HiveServer,Impala和其他組件可以共享遠(yuǎn)程Hive元存儲。在CDP公共云中,HMS使用預(yù)安裝的MySQL數(shù)據(jù)庫。您幾乎沒有執(zhí)行HMS或僅在云中進(jìn)行HMS的配置。

Spark集成

在某些情況下,Spark和Hive表可以使用Hive Warehouse連接器進(jìn)行互操作。

您可以使用Hive Warehouse連接器從Spark訪問ACID和外部表。您不需要Hive Warehouse Connector即可從Spark讀取Hive外部表并從Spark寫入Hive外部表。

查詢批處理和交互式工作負(fù)載的執(zhí)行

您可以使用JDBC命令行工具(例如Beeline)或使用JDBC/ODBC驅(qū)動程序和BI工具(例如Tableau)連接到Hive??蛻舳伺c相同HiveServer版本的實(shí)例進(jìn)行通信。您可以為每個實(shí)例配置設(shè)置文件以執(zhí)行批處理或交互式處理。

02

Apache Hive3性能調(diào)優(yōu)

低延遲分析處理

CDP公共云支持Hive查詢的低延遲分析處理(LLAP)。使用CDP數(shù)據(jù)倉庫服務(wù)中可使用LLAP,您可以調(diào)整數(shù)據(jù)倉庫基礎(chǔ)結(jié)構(gòu)、組件和客戶端連接參數(shù),以提高性能和與商務(wù)智能和其他應(yīng)用程序的相關(guān)性。

企業(yè)越來越希望運(yùn)行SQL工作負(fù)載,這些工作負(fù)載返回的結(jié)果要比批處理提供的結(jié)果更快。這些企業(yè)通常希望數(shù)據(jù)分析應(yīng)用程序支持交互式查詢。低延遲分析處理(LLAP)可以提高交互式查詢的性能。在CDP公共云上運(yùn)行的Hive交互式查詢滿足了低延遲、可變參數(shù)基準(zhǔn),Hive LLAP在15秒或更短的時間內(nèi)響應(yīng)了該基準(zhǔn)。LLAP使應(yīng)用程序開發(fā)和IT基礎(chǔ)結(jié)構(gòu)能夠運(yùn)行返回實(shí)時或接近實(shí)時結(jié)果的查詢。

CDP數(shù)據(jù)中心版不支持LLAP。

高性能Hive的最佳做法

在調(diào)整Apache Hive之前,您應(yīng)該遵循最佳實(shí)踐。這些準(zhǔn)則包括如何配置群集,存儲數(shù)據(jù)和編寫查詢。

  • 在需要資源來處理查詢時,可以在CDP公共云中調(diào)整自動縮放以擴(kuò)大規(guī)模。

  • 接受默認(rèn)設(shè)置以使用Tez作為執(zhí)行引擎。在CDP中,MapReduce執(zhí)行引擎由Tez代替。

  • 接受默認(rèn)設(shè)置以禁用用戶模擬。如果啟用,請使用Cloudera Manager安全閥功能hive.server2.enable.doAs在 hive-site.xml中禁用 (請參閱下面的鏈接)。

LLAP緩存用于多個查詢的數(shù)據(jù),并且此功能不支持用戶模擬。

  • 使用Ranger安全服務(wù)來保護(hù)您的群集和相關(guān)服務(wù)。

  • 使用ORC文件格式存儲數(shù)據(jù)。

  • 通過檢查解釋計劃,確保查詢被完全矢量化。

  • 使用SmartSense工具檢測常見的系統(tǒng)錯誤配置。

使用ORC最大化存儲資源

您可以通過多種方式來節(jié)省存儲空間,但是使用優(yōu)化行列(ORC)文件格式存儲Apache Hive數(shù)據(jù)最為有效。ORC是Hive數(shù)據(jù)的默認(rèn)存儲。

出于以下原因,建議使用Hive數(shù)據(jù)存儲的ORC文件格式:

  • 高效壓縮:存儲為列并進(jìn)行壓縮,這會導(dǎo)致較小的磁盤讀取。列格式也是Tez中矢量化優(yōu)化的理想選擇。

  • 快速讀取:ORC具有內(nèi)置索引,最小/最大值和其他聚合,導(dǎo)致在讀取期間跳過整個條帶。另外,謂詞下推將過濾器推入讀取,以便讀取最少的行。布隆過濾器進(jìn)一步減少了返回的行數(shù)。

在大規(guī)模部署中得到證明:Facebook將ORC文件格式用于300多個PB部署。

Apache Hive3的主要功能有哪些

ORC總體上提供最佳的Hive性能。此外,要指定存儲格式,還可以為表指定壓縮算法,如以下示例所示:








CREATE TABLE addresses (name string,street string,city string,state string,zip int) STORED AS orc TBLPROPERTIES ("orc.compress"="Zlib");

通常不需要設(shè)置壓縮算法,因?yàn)槟腍ive設(shè)置包括默認(rèn)算法。使用ORC高級屬性,可以為點(diǎn)查找中經(jīng)常使用的列創(chuàng)建Bloom過濾器。

Hive支持僅用于插入式ACID表和外部表的Parquet和其他格式。您還可以編寫自己的SerDes(序列化器,反序列化器)接口以支持自定義文件格式。

高級ORC屬性

通常,您不需要修改ORC屬性,但是偶爾,Cloudera支持建議進(jìn)行此類更改。您可以使用Cloudera Manager中的安全閥功能來更改屬性。

使用分區(qū)提高性能

您可以使用分區(qū)來顯著提高性能。您可以設(shè)計Hive表和物化視圖分區(qū)以映射到文件系統(tǒng)/對象存儲上的物理目錄。例如,按日期時間劃分的表可以組織每天加載到Hive中的數(shù)據(jù)。

大型部署可以具有成千上萬個分區(qū)。當(dāng)Hive在查詢處理期間發(fā)現(xiàn)分區(qū)鍵時,分區(qū)修剪將間接發(fā)生。例如,在加入維表后,分區(qū)鍵可能來自維表。查詢按分區(qū)過濾列,從而將掃描限制在一個或幾個匹配的分區(qū)上。當(dāng)WHERE子句中存在分區(qū)鍵時,將直接進(jìn)行分區(qū)修剪。分區(qū)列是虛擬的,不寫入主表,因?yàn)檫@些列對于整個分區(qū)都是相同的。在SQL查詢中,您定義了分區(qū),如以下示例所示:



CREATE TABLE sale(id in, amount decimal)PARTITIONED BY (xdate string, state string);

要將數(shù)據(jù)插入此表中,請指定用于快速加載的分區(qū)鍵:




INSERT INTO sale (xdate='2016-03-08', state='CA')SELECT * FROM staging_tableWHERE xdate='2016-03-08' AND state='CA';

您不需要指定動態(tài)分區(qū)列。如果啟用動態(tài)分區(qū),則Hive會生成分區(qū)規(guī)范。

用于加載1到9個分區(qū)的hive-site.xml設(shè)置:



SET hive.exec.dynamic.partition.mode=nonstrict;SET hive.exec.dynamic.partition=true;

要將數(shù)據(jù)批量加載到分區(qū)的ORC表中,請使用以下屬性,該屬性可優(yōu)化將數(shù)據(jù)加載到10個或更多分區(qū)中的性能。

用于加載10個或更多分區(qū)的hive-site.xml設(shè)置:

hive.optimize.sort.dynamic.partition=true

查詢分區(qū)數(shù)據(jù)的示例



INSERT INTO sale (xdate, state)SELECT * FROM staging_table;

對表進(jìn)行分區(qū)和查詢分區(qū)表時,請遵循以下最佳實(shí)踐:

  • 切勿在唯一ID上分區(qū)。

  • 分區(qū)的大小平均大于或等于1 GB。

  • 設(shè)計查詢以處理不超過1000個分區(qū)。

處理分桶表

如果將數(shù)據(jù)從Apache Hive的早期版本遷移到Hive 3,則可能需要處理影響性能的存儲分桶表。

您可以將表或分區(qū)劃分為存儲區(qū),這些存儲區(qū)可以通過以下方式存儲:

  • 作為表目錄中的文件。

  • 如果表已分區(qū),則作為分區(qū)目錄。

無需在新的Hive 3表中使用存儲分桶。

與存儲分桶相關(guān)的一個常見挑戰(zhàn)是在增加或減少工作負(fù)載或數(shù)據(jù)時保持查詢性能。例如,您可能擁有一個使用16個存儲分桶來支持1000個用戶的平穩(wěn)運(yùn)行的環(huán)境,但是如果您不及時調(diào)整存儲桶和分區(qū),則用戶數(shù)量激增到一兩天就達(dá)到了100,000,這會產(chǎn)生問題。在使用表構(gòu)建表之后,必須重新加載包含表數(shù)據(jù)的整個表,以減少,添加或刪除表分桶,這使表桶調(diào)優(yōu)變得很復(fù)雜。

使用Tez,您只需要處理最大的表上的分桶。如果工作負(fù)載需求快速變化,則較小表的存儲分桶會動態(tài)更改以完成表JOIN。

您執(zhí)行以下與存儲分桶相關(guān)的任務(wù):

  • 設(shè)置hive-site.xml以啟用存儲分桶


SET hive.tez.bucket.pruning=true
  • 既有分區(qū)又有分桶的批量加載表:

將數(shù)據(jù)加載到既分區(qū)又存儲分桶的表中時,請設(shè)置以下屬性以優(yōu)化過程:


SET hive.optimize.sort.dynamic.partition=true

如果您有20個存儲在user_id數(shù)據(jù)上的存儲分桶,則以下查詢僅返回與user_id = 1關(guān)聯(lián)的數(shù)據(jù): 


SELECT * FROM tab WHERE user_id = 1;

為了最好地利用Tez上表分桶的動態(tài)功能,請采取以下做法:

  • 對最大表的存儲分桶使用單個鍵。

  • 通常,您需要按最大維表對主表進(jìn)行存儲。例如,銷售表可能是按客戶存儲的,而不是按商品或商店存儲的。但是,在這種情況下,銷售表是按物料和商店排序的。

  • 通常,不要在同一列上進(jìn)行存儲和排序。

如果表的存儲分桶文件數(shù)超過行數(shù),則表明您應(yīng)該重新考慮表的存儲方式。

關(guān)于“Apache Hive3的主要功能有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI