一文詳解Hive知識(shí)體系
三、Hive數(shù)據(jù)抽樣
當(dāng)數(shù)據(jù)規(guī)模不斷膨脹時(shí),我們需要找到一個(gè)數(shù)據(jù)的子集來(lái)加快數(shù)據(jù)分析效率。因此我們就需要通過(guò)篩選和分析數(shù)據(jù)集為了進(jìn)行模式 & 趨勢(shì)識(shí)別。目前來(lái)說(shuō)有三種方式來(lái)進(jìn)行抽樣:隨機(jī)抽樣,桶表抽樣,和塊抽樣。
3.1 隨機(jī)抽樣
關(guān)鍵詞:rand()函數(shù)。
使用rand()函數(shù)進(jìn)行隨機(jī)抽樣,limit關(guān)鍵字限制抽樣返回的數(shù)據(jù),其中rand函數(shù)前的distribute和sort關(guān)鍵字可以保證數(shù)據(jù)在mapper和reducer階段是隨機(jī)分布的。
案例如下:
select * from table_name
where col=xxx
distribute by rand() sort by rand()
limit num;
使用order 關(guān)鍵詞:
案例如下:
select * from table_name
where col=xxx
order by rand()
limit num;
經(jīng)測(cè)試對(duì)比,千萬(wàn)級(jí)數(shù)據(jù)中進(jìn)行隨機(jī)抽樣 order by方式耗時(shí)更長(zhǎng),大約多30秒左右。
3.2 塊抽樣
關(guān)鍵詞:tablesample()函數(shù)。
tablesample(n percent) 根據(jù)hive表數(shù)據(jù)的大小按比例抽取數(shù)據(jù),并保存到新的hive表中。如:抽取原h(huán)ive表中10%的數(shù)據(jù)
注意:測(cè)試過(guò)程中發(fā)現(xiàn),select語(yǔ)句不能帶where條件且不支持子查詢,可通過(guò)新建中間表或使用隨機(jī)抽樣解決。
select * from xxx tablesample(10 percent) 數(shù)字與percent之間要有空格
tablesample(nM) 指定抽樣數(shù)據(jù)的大小,單位為M。select * from xxx tablesample(20M) 數(shù)字與M之間不要有空格
tablesample(n rows) 指定抽樣數(shù)據(jù)的行數(shù),其中n代表每個(gè)map任務(wù)均取n行數(shù)據(jù),map數(shù)量可通過(guò)hive表的簡(jiǎn)單查詢語(yǔ)句確認(rèn)(關(guān)鍵詞:number of mappers: x)select * from xxx tablesample(100 rows) 數(shù)字與rows之間要有空格
3.3 桶表抽樣
關(guān)鍵詞:tablesample (bucket x out of y [on colname])。
其中x是要抽樣的桶編號(hào),桶編號(hào)從1開(kāi)始,colname表示抽樣的列,y表示桶的數(shù)量。
hive中分桶其實(shí)就是根據(jù)某一個(gè)字段Hash取模,放入指定數(shù)據(jù)的桶中,比如將表table_1按照ID分成100個(gè)桶,其算法是hash(id) % 100,這樣,hash(id) % 100 = 0的數(shù)據(jù)被放到第一個(gè)桶中,hash(id) % 100 = 1的記錄被放到第二個(gè)桶中。創(chuàng)建分桶表的關(guān)鍵語(yǔ)句為:CLUSTER BY語(yǔ)句。
例如:將表隨機(jī)分成10組,抽取其中的第一個(gè)桶的數(shù)據(jù):
select * from table_01
tablesample(bucket 1 out of 10 on rand())
四、Hive計(jì)算引擎
目前Hive支持MapReduce、Tez和Spark 三種計(jì)算引擎。
4.1 MR計(jì)算引擎
MR運(yùn)行的完整過(guò)程:
Map在讀取數(shù)據(jù)時(shí),先將數(shù)據(jù)拆分成若干數(shù)據(jù),并讀取到Map方法中被處理。數(shù)據(jù)在輸出的時(shí)候,被分成若干分區(qū)并寫(xiě)入內(nèi)存緩存(buffer)中,內(nèi)存緩存被數(shù)據(jù)填充到一定程度會(huì)溢出到磁盤(pán)并排序,當(dāng)Map執(zhí)行完后會(huì)將一個(gè)機(jī)器上輸出的臨時(shí)文件進(jìn)行歸并存入到HDFS中。
當(dāng)Reduce啟動(dòng)時(shí),會(huì)啟動(dòng)一個(gè)線程去讀取Map輸出的數(shù)據(jù),并寫(xiě)入到啟動(dòng)Reduce機(jī)器的內(nèi)存中,在數(shù)據(jù)溢出到磁盤(pán)時(shí)會(huì)對(duì)數(shù)據(jù)進(jìn)行再次排序。當(dāng)讀取數(shù)據(jù)完成后會(huì)將臨時(shí)文件進(jìn)行合并,作為Reduce函數(shù)的數(shù)據(jù)源。
4.2 Tez計(jì)算引擎
Apache Tez是進(jìn)行大規(guī)模數(shù)據(jù)處理且支持DAG作業(yè)的計(jì)算框架,它直接源于MapReduce框架,除了能夠支持MapReduce特性,還支持新的作業(yè)形式,并允許不同類(lèi)型的作業(yè)能夠在一個(gè)集群中運(yùn)行。
Tez將原有的Map和Reduce兩個(gè)操作簡(jiǎn)化為一個(gè)概念——Vertex,并將原有的計(jì)算處理節(jié)點(diǎn)拆分成多個(gè)組成部分:Vertex Input、Vertex Output、Sorting、Shuffling和Merging。計(jì)算節(jié)點(diǎn)之間的數(shù)據(jù)通信被統(tǒng)稱(chēng)為Edge,這些分解后的元操作可以任意靈活組合,產(chǎn)生新的操作,這些操作經(jīng)過(guò)一些控制程序組裝后,可形成一個(gè)大的DAG作業(yè)。
通過(guò)允許Apache Hive運(yùn)行復(fù)雜的DAG任務(wù),Tez可以用來(lái)處理數(shù)據(jù),之前需要多個(gè)MR jobs,現(xiàn)在一個(gè)Tez任務(wù)中。
Tez和MapReduce作業(yè)的比較:
Tez繞過(guò)了MapReduce很多不必要的中間的數(shù)據(jù)存儲(chǔ)和讀取的過(guò)程,直接在一個(gè)作業(yè)中表達(dá)了MapReduce需要多個(gè)作業(yè)共同協(xié)作才能完成的事情。
Tez和MapReduce一樣都運(yùn)行使用YARN作為資源調(diào)度和管理。但與MapReduce on YARN不同,Tez on YARN并不是將作業(yè)提交到ResourceManager,而是提交到AMPoolServer的服務(wù)上,AMPoolServer存放著若干已經(jīng)預(yù)先啟動(dòng)ApplicationMaster的服務(wù)。
當(dāng)用戶提交一個(gè)作業(yè)上來(lái)后,AMPoolServer從中選擇一個(gè)ApplicationMaster用于管理用戶提交上來(lái)的作業(yè),這樣既可以節(jié)省ResourceManager創(chuàng)建ApplicationMaster的時(shí)間,而又能夠重用每個(gè)ApplicationMaster的資源,節(jié)省了資源釋放和創(chuàng)建時(shí)間。
Tez相比于MapReduce有幾點(diǎn)重大改進(jìn):
當(dāng)查詢需要有多個(gè)reduce邏輯時(shí),Hive的MapReduce引擎會(huì)將計(jì)劃分解,每個(gè)Redcue提交一個(gè)MR作業(yè)。這個(gè)鏈中的所有MR作業(yè)都需要逐個(gè)調(diào)度,每個(gè)作業(yè)都必須從HDFS中重新讀取上一個(gè)作業(yè)的輸出并重新洗牌。而在Tez中,幾個(gè)reduce接收器可以直接連接,數(shù)據(jù)可以流水線傳輸,而不需要臨時(shí)HDFS文件,這種模式稱(chēng)為MRR(Map-reduce-reduce*)。
Tez還允許一次發(fā)送整個(gè)查詢計(jì)劃,實(shí)現(xiàn)應(yīng)用程序動(dòng)態(tài)規(guī)劃,從而使框架能夠更智能地分配資源,并通過(guò)各個(gè)階段流水線傳輸數(shù)據(jù)。對(duì)于更復(fù)雜的查詢來(lái)說(shuō),這是一個(gè)巨大的改進(jìn),因?yàn)樗薎O/sync障礙和各個(gè)階段之間的調(diào)度開(kāi)銷(xiāo)。
在MapReduce計(jì)算引擎中,無(wú)論數(shù)據(jù)大小,在洗牌階段都以相同的方式執(zhí)行,將數(shù)據(jù)序列化到磁盤(pán),再由下游的程序去拉取,并反序列化。Tez可以允許小數(shù)據(jù)集完全在內(nèi)存中處理,而MapReduce中沒(méi)有這樣的優(yōu)化。倉(cāng)庫(kù)查詢經(jīng)常需要在處理完大量的數(shù)據(jù)后對(duì)小型數(shù)據(jù)集進(jìn)行排序或聚合,Tez的優(yōu)化也能極大地提升效率。
4.3 Spark計(jì)算引擎
Apache Spark是專(zhuān)為大規(guī)模數(shù)據(jù)處理而設(shè)計(jì)的快速、通用支持DAG(有向無(wú)環(huán)圖)作業(yè)的計(jì)算引擎,類(lèi)似于Hadoop MapReduce的通用并行框架,可用來(lái)構(gòu)建大型的、低延遲的數(shù)據(jù)分析應(yīng)用程序。
Spark是用于大規(guī)模數(shù)據(jù)處理的統(tǒng)一分析引擎,基于內(nèi)存計(jì)算,提高了在大數(shù)據(jù)環(huán)境下數(shù)據(jù)處理的實(shí)時(shí)性,同時(shí)保證了高容錯(cuò)性和高可伸縮性,允許用戶將Spark部署在大量硬件之上,形成集群。
Spark運(yùn)行流程
Spark運(yùn)行流程
Spark具有以下幾個(gè)特性。
1.高效性
Spark會(huì)將作業(yè)構(gòu)成一個(gè)DAG,優(yōu)化了大型作業(yè)一些重復(fù)且浪費(fèi)資源的操作,對(duì)查詢進(jìn)行了優(yōu)化,重新編寫(xiě)了物理執(zhí)行引擎,如可以實(shí)現(xiàn)MRR模式。
2.易用性
Spark不同于MapReducer只提供兩種簡(jiǎn)單的編程接口,它提供了多種編程接口去操作數(shù)據(jù),這些操作接口如果使用MapReduce去實(shí)現(xiàn),需要更多的代碼。Spark的操作接口可以分為兩類(lèi):transformation(轉(zhuǎn)換)和action(執(zhí)行)。Transformation包含map、flatmap、distinct、reduceByKey和join等轉(zhuǎn)換操作;Action包含reduce、collect、count和first等操作。
3.通用性
Spark針對(duì)實(shí)時(shí)計(jì)算、批處理、交互式查詢,提供了統(tǒng)一的解決方案。但在批處理方面相比于MapReduce處理同樣的數(shù)據(jù),Spark所要求的硬件設(shè)施更高,MapReduce在相同的設(shè)備下所能處理的數(shù)據(jù)量會(huì)比Spark多。所以在實(shí)際工作中,Spark在批處理方面只能算是MapReduce的一種補(bǔ)充。
4.兼容性
Spark和MapReduce一樣有豐富的產(chǎn)品生態(tài)做支撐。例如Spark可以使用YARN作為資源管理器,Spark也可以處理Hbase和HDFS上的數(shù)據(jù)。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
最新活動(dòng)更多
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車(chē)生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身智能機(jī)器人產(chǎn)業(yè)技術(shù)創(chuàng)新應(yīng)用論壇
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
-
8月5日立即報(bào)名>> 【在線會(huì)議】CAE優(yōu)化設(shè)計(jì):醫(yī)療器械設(shè)計(jì)的應(yīng)用案例與方案解析
推薦專(zhuān)題
- 1 AI 眼鏡讓百萬(wàn) APP「集體失業(yè)」?
- 2 豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
- 3 一文看懂視覺(jué)語(yǔ)言動(dòng)作模型(VLA)及其應(yīng)用
- 4 “支付+”時(shí)代,支付即生態(tài) | 2025中國(guó)跨境支付十大趨勢(shì)
- 5 中國(guó)最具實(shí)力AI公司TOP10
- 6 深圳跑出40億超級(jí)隱形冠軍:賣(mài)機(jī)器人年入6.1億,港股上市
- 7 特斯拉Robotaxi上路,馬斯克端上畫(huà)了十年的餅
- 8 “AI六小虎”到了下一個(gè)賽點(diǎn)
- 9 AI視頻,攪動(dòng)1.5萬(wàn)億市場(chǎng)
- 10 張勇等人退出阿里合伙人