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