[hive]hive优化
1.fetch抓取
1)什么是fetch抓取
fetch抓取是指hive對(duì)select 所有字段、select 指定字段、limit可以不必使用MapReduce計(jì)算,在這種情況下,hive可以簡(jiǎn)單地讀取表對(duì)應(yīng)的存儲(chǔ)目錄下的文件.
然后輸出查詢結(jié)果到控制臺(tái),這比走M(jìn)R來(lái)說(shuō),大大減少了運(yùn)行時(shí)間.
2)相關(guān)配置
hive.default.xml文件中hive.fetch.task.conversion默認(rèn)是more.該屬性設(shè)置為more以后,在全局查找,字段查找,limit查找等都不走mapreduce.
<property><name>hive.fetch.task.conversion</name><value>more</value><description>值可以選擇:[none,minimal,more]0. none:全部走M(jìn)R1. minimal:部分走M(jìn)R2. more:全局查找,字段查找,limit查找都不走M(jìn)R</description> </property>2.本地模式
1)什么是本地模式
? ? ? 大多數(shù)MR job是需要并行執(zhí)行的,有時(shí)hive輸入的數(shù)據(jù)量是非常小的,在這種情況下為觸發(fā)任? 務(wù)消耗的時(shí)間可能會(huì)比實(shí)際job的執(zhí)行時(shí)間要多的多。此時(shí)執(zhí)行hive本地模式,即在單臺(tái)計(jì)算機(jī)上處理所有的任務(wù)。對(duì)于小的數(shù)據(jù)集,執(zhí)行時(shí)間可能明顯縮短。
2)相關(guān)配置
設(shè)置hive.exec.mode.local.auto的值為true,來(lái)讓hive在適當(dāng)?shù)臅r(shí)候自動(dòng)啟動(dòng)本地MR模式 set hive.exec.mode.local.auto=true; 設(shè)置本地MR的最大數(shù)據(jù)量,當(dāng)輸入數(shù)據(jù)量小于這個(gè)值時(shí)采用local MR模式,默認(rèn)為128M set hive.exec.mode.local.auto.inputbytes.max=50000000; 設(shè)置local MR的最大輸入文件個(gè)數(shù),當(dāng)輸入文件個(gè)數(shù)小于這個(gè)值時(shí)采用local MR模式,默認(rèn)為4. set hive.exec.mode.local.auto.input.files.max=10;三表的優(yōu)化
1.小表join大表
實(shí)際測(cè)試發(fā)現(xiàn),新版的hive小表放在左邊和右邊已經(jīng)沒(méi)有明顯區(qū)別。當(dāng)執(zhí)行map join時(shí),小表join大表和大表join小表沒(méi)有區(qū)別,會(huì)加載小表到大表的每個(gè)map端,在map端完成join.
以前是:前面的表都會(huì)被加載到內(nèi)存中,后面的表進(jìn)行磁盤(pán)掃描。
2.大表join大表
1)空key過(guò)濾
在mapreduce程序中,相同key對(duì)應(yīng)的數(shù)據(jù)都會(huì)發(fā)送到相同的reduce task上。而所有值為Null的key都會(huì)被發(fā)送到同一個(gè)reduce task上,如果這樣的數(shù)據(jù)太多,會(huì)導(dǎo)致內(nèi)存不夠。很多情況下,這些值為null的key對(duì)應(yīng)的數(shù)據(jù)也是異常數(shù)據(jù),我們可以直接把他們過(guò)濾掉。
2)空key轉(zhuǎn)換?
有時(shí),空key對(duì)應(yīng)的數(shù)據(jù)不是異常數(shù)據(jù),其數(shù)據(jù)必須要包括在join中,為了不讓所有空key都對(duì)應(yīng)的數(shù)據(jù)跑到相同的reduce task。出現(xiàn)數(shù)據(jù)傾斜,內(nèi)存溢出等問(wèn)題。我們可以給值為null的賦一個(gè)隨機(jī)的值,使得其對(duì)應(yīng)的數(shù)據(jù)可以隨機(jī)且均勻分布在不同的reduce上。
下面這個(gè)sql表是t1中的id為null時(shí)不參與聚合,在join時(shí),將它的key臨時(shí)轉(zhuǎn)為一個(gè)隨機(jī)數(shù),這樣避免了分到一個(gè)reduce中.但是這個(gè)t1的id實(shí)際上沒(méi)有個(gè)改變,只是join的時(shí)候用作key時(shí)變了.
select t1.* from t1 full join t2 on case when t1.id is null then concat('hive',rand()) else t1.id end = t2.id;3)SMB Join(重點(diǎn))
SMB=sort merge bucket join
如何進(jìn)行SMB join?
1.兩表是分別以join on的條件建立的分桶表,且分的桶數(shù)相同. 2.set hive.optimize.bucketmapjoin=true;set hive.optimize.bucketmapjoin.sortedmerge=true;set hive.input.format=org.hadoop.hive.ql.io.BucketizedHiveInputFormat;3.map join
1)common join
什么是common join?
如果不指定map join或者不符合map join的條件,那么hive解析器會(huì)將join操作轉(zhuǎn)換成common join,即:在reduce階段完成join.?整個(gè)過(guò)程包含:map、shuffle、reduce階段。
①map階段
讀取源表的數(shù)據(jù),在map端輸出時(shí),以join on條件作為key,如果join有多個(gè)關(guān)聯(lián)鍵,則以這些關(guān)聯(lián)鍵的組合作為key。map輸出的value為join之后所關(guān)心的(select 或者 where中需要用到的)列。同時(shí),在value中還包含表的tag信息,用于標(biāo)明此value對(duì)應(yīng)哪個(gè)表。
②shuffle階段
將key-value按照key的hash值推送至不同的reduce中,這樣確保兩個(gè)表中相同的key位于同一個(gè)reduce中。
③reduce階段
根據(jù)key的值完成join操作,期間通過(guò)tag來(lái)識(shí)別不同表的數(shù)據(jù)。
2)hive map join
①什么是map join?
就是在map階段進(jìn)行表之間的連接,而不是進(jìn)入到reduce階段才進(jìn)行連接。這樣就節(jié)省了在shuffle階段時(shí)要進(jìn)行的大量數(shù)據(jù)傳輸,從而起到了優(yōu)化job的作用。
②map join的原理
通常情況下,相同key的key-value存在于不同的map task中。這樣就必須在reduce task階段連接。要使map task能夠順利進(jìn)行,那么就必須滿足這樣的條件:只有一份表的數(shù)據(jù)分布在不同的map中,其他連接表的數(shù)據(jù)必須在該表的不同map中有完整的拷貝。
③map join使用的場(chǎng)景
在兩個(gè)要連接的表中,有一個(gè)很大,有一個(gè)很小,這樣這個(gè)小表可以存放在內(nèi)存中而不影響性能。我們把小表的文件復(fù)制到那張大表的map task中,再讓map把文件讀到內(nèi)存中待用。
④hive內(nèi)置提供的優(yōu)化機(jī)制之一就包括map join
在很久以前,這個(gè)選項(xiàng)就自動(dòng)開(kāi)啟:默認(rèn)小表25M
set hive.auto.convert.join=true; hive還提供了另一個(gè)參數(shù):表文件的大小作為開(kāi)啟和關(guān)閉map join的閾值. hive.mapjoin.smalltable.filesize=25000000 即25M 當(dāng)指定map join時(shí),小表join大表和大表join小表沒(méi)有區(qū)別。會(huì)加載小表到每個(gè)map端,在map端完成join。4.join數(shù)據(jù)傾斜
set hive.skewjoin.key=100000; 默認(rèn)為10萬(wàn). join的key對(duì)應(yīng)的記錄條數(shù)超過(guò)這個(gè)值則會(huì)進(jìn)行拆分,值根據(jù)數(shù)據(jù)量設(shè)置 ste hive.optimize.skewjoin=false; 如果是join過(guò)程中出現(xiàn)數(shù)據(jù)清切應(yīng)該設(shè)置為true;如果開(kāi)啟了,在join的過(guò)程中會(huì)開(kāi)啟兩個(gè)MR,通過(guò)下面的參數(shù)可以控制第二個(gè)job的mapper數(shù)量 set hive.skewjoin.mapjoin.map.tasks=10000;默認(rèn)1萬(wàn);5.group by
①并不是所有的聚合操作都需要在reduce端完成,很多聚合操作可以先在map端進(jìn)行預(yù)聚合,然后在reduce端得出最終結(jié)果。
hive.map.aggr=true; 是否在map端進(jìn)行預(yù)聚合,默認(rèn)為true set hive.groupby.mapaggr.checkinterval=100000; 在map端進(jìn)行聚合操作的條目數(shù)目②hive.groupby.skewindata=true 注:skew傾斜
該方法在reduce端預(yù)聚合,聚合程度比map階段預(yù)聚合程度高(因?yàn)閙ap片多,個(gè)數(shù)多). 當(dāng)選項(xiàng)設(shè)定為true,會(huì)有兩個(gè)MR job。 在第一個(gè)MR job中,map的輸出結(jié)果會(huì)隨機(jī)分發(fā)到reduce中。每個(gè)reduce做部分聚合操作, 并輸出結(jié)果。這樣處理的結(jié)果是相同的group by key有可能被分發(fā)到不同的reduce中,從而 達(dá)到負(fù)載均衡的目的。 第二個(gè)MR job再根據(jù)預(yù)處理的數(shù)據(jù)結(jié)果按照group by key分布到一個(gè)reduce中(這個(gè)可以 保證相同的group by key被分到同一個(gè)reduce中)。最后完成最終的聚合操作。6.count(distinct)去重
該操作在一個(gè)reduce task中執(zhí)行,當(dāng)數(shù)據(jù)量大的時(shí)候,這個(gè)reduce task需要處理的數(shù)據(jù)量太大,會(huì)導(dǎo)致整個(gè)job難以完成。用先group by id再count(id) 來(lái)替換。
7.笛卡爾積
應(yīng)盡量避免笛卡爾積。因?yàn)橹挥靡粋€(gè)reduce task執(zhí)行笛卡爾積,出現(xiàn)笛卡爾積的情景:
1)select t1,t2
2)join時(shí)不加條件
8.行列過(guò)濾
列處理:在select中指定想要的列,盡量避免用select *
行處理:當(dāng)使用left join、right join、full join時(shí),如果將后面表的過(guò)的過(guò)濾寫(xiě)在where后面。就會(huì)先全表關(guān)聯(lián),之后再過(guò)濾。??
四.并行執(zhí)行
什么是并行執(zhí)行?
hive會(huì)將一個(gè)查詢轉(zhuǎn)化成一個(gè)或多個(gè)階段,這樣的階段可以是mapreduce階段,limit階段,或者h(yuǎn)ive執(zhí)行過(guò)程中可能經(jīng)歷的其他階段。
默認(rèn)情況下,hive一次只會(huì)執(zhí)行一個(gè)階段,不過(guò),某個(gè)特定的job可能包含眾多的階段,而這些階段是可以并行執(zhí)行的,這樣可能使整個(gè)job執(zhí)行時(shí)間縮短。
通過(guò)設(shè)置hive.exec.parallel(并行)=true就可以開(kāi)啟并行執(zhí)行,不過(guò)在共享集群中,需要注意,如果Job中并行階段增多,那么集群利用率就會(huì)增加。
set hive.exec.parallel=true; 打開(kāi)任務(wù)并行執(zhí)行 set hive.exec.parallel.thread.number=16; 同一個(gè)sql允許最大并行度,默認(rèn)為8 當(dāng)然,得是在系統(tǒng)資源比較空閑的時(shí)候才有優(yōu)勢(shì),否則沒(méi)資源,并行也起不來(lái)五.嚴(yán)格模式
嚴(yán)格模式可以防止用戶執(zhí)行那些可能造成不好影響的查詢。開(kāi)啟嚴(yán)格模式:
set hive.mapred.mode=strict; 默認(rèn)是nonstrict嚴(yán)格模式限制3種類型的查詢
1.對(duì)分區(qū)表的查詢必須在where子句對(duì)分區(qū)字段限定條件,即不允許掃描所有分區(qū)。
2.使用order by 必須學(xué)limit
? 因?yàn)閛rder by為了執(zhí)行全局排序?qū)⑺械慕Y(jié)果數(shù)據(jù)分發(fā)到一個(gè)reduce task中進(jìn)行處理。強(qiáng)制要求用戶增加這個(gè)limit語(yǔ)句可以防止reduce task額外執(zhí)行很長(zhǎng)時(shí)間。?
3.限制笛卡爾積
六.推測(cè)執(zhí)行
在分布式集群環(huán)境下,因?yàn)槌绦騜ug(或hadoop本身的bug),資源分布不均等問(wèn)題,會(huì)造成同一個(gè)job的多個(gè)任務(wù)速度不一致的情況。有些任務(wù)的運(yùn)行速度可能明顯慢于其他任務(wù)(比如一個(gè)job的某個(gè)任務(wù)的進(jìn)度只有50%,而其他已經(jīng)執(zhí)行完畢),則這個(gè)任務(wù)會(huì)拖累job整體的執(zhí)行進(jìn)度。為了避免這種情況發(fā)生,hadoop采用了推測(cè)執(zhí)行機(jī)制,它根據(jù)一定的法則推測(cè)出“拖后腿”的任務(wù),讓該任務(wù)與原始任務(wù)同時(shí)處理同一份數(shù)據(jù),并最終選用最先成功運(yùn)行完成任務(wù)的計(jì)算結(jié)果作為最終結(jié)果。speculative:推測(cè)的
設(shè)置開(kāi)啟推測(cè)執(zhí)行參數(shù):Hadoop的mapred-site.xml文件中進(jìn)行配置 <property><name>mapreduce.map.speculative</name><value>true</value> </property><property><name>mapreduce.reduce.speculative</name><value>true</value> </property>hive本身也提供了配置項(xiàng)來(lái)控制reduce-site的推測(cè)執(zhí)行 <property><name>hive.mapred.reduce.tasks.speculative.execution</name><value>true</value> </property>七.HIve Map優(yōu)化
1.設(shè)置合理的Map個(gè)數(shù)
通常情況下,job會(huì)通過(guò)input目錄產(chǎn)生一個(gè)或多個(gè)map task,map task的個(gè)數(shù)由:
input文件總個(gè)數(shù),input文件大小,塊的大小決定,有多少片,就有多少個(gè)maptask。
1)復(fù)雜文件增加Map數(shù)
當(dāng)input的文件都很大,任務(wù)邏輯復(fù)雜,map執(zhí)行非常慢的時(shí)候,可以考慮增加Map數(shù)。來(lái)使得每個(gè)map處理的數(shù)據(jù)量減少,從而提高任務(wù)的執(zhí)行效率。
增加map的方法:根據(jù)下面的公式調(diào)節(jié)片的大小
computeSlite(Math.max( minSize, Math.min(maxSize,blocksize)))=blocksize=128M調(diào)整maxSize最大值,讓maxSize最大值低于blocksize就可以增加map的個(gè)數(shù).
2)是不是map數(shù)越多越好
不是,如果有很多小文件。一個(gè)map task處理一個(gè)小文件,則每個(gè)map task的任務(wù)啟動(dòng)和初始化時(shí)間遠(yuǎn)遠(yuǎn)大于邏輯處理時(shí)間,這樣會(huì)造成大量的資源浪費(fèi),而且,同時(shí)執(zhí)行的map task的數(shù)量是受限的。
3)是不是每個(gè)map處理的接近128M的文件就高枕無(wú)憂了?
不一定,比如一個(gè)127M的文件,正常會(huì)用一個(gè)map task去執(zhí)行,但這個(gè)文件中有1個(gè)或2個(gè)字段,但卻有幾千萬(wàn)個(gè)記錄。如果該map處理的邏輯比較復(fù)雜,用一個(gè) map任務(wù)去做,肯定比較耗時(shí)。
3.小文件進(jìn)行合并(親測(cè))
1.通過(guò)設(shè)置讀取片的大小來(lái)設(shè)置 set mapred.max.split.size=1682000000; 切片的最大值 set mapred.min.split.size=1346000000; 切片的最小值 set mapred.min.split.size.per.node=1346000000; 每個(gè)節(jié)點(diǎn)切片的最小值 set mapred.min.split.size.per.rack=1346000000; 每個(gè)機(jī)架切片的最小值2.通過(guò)另起一個(gè)job來(lái)合并小文件 set hive.merge.mapredfiles=true; 對(duì)mr進(jìn)行設(shè)置 set hive.merge.mapfiles=true; only-map進(jìn)行設(shè)置 set hive.merge.smallfiles.avgsize=16000000;默認(rèn)為16M set hive.merge.size.per.task=256000000; 合并后每個(gè)文件的目標(biāo)大小,默認(rèn)為256000000,256M切分的過(guò)程:
1.三個(gè)重要的屬性:
?mapSplitSize:切片大小的最大值
?minSplitSizeNode:同一個(gè)節(jié)點(diǎn)的數(shù)據(jù)塊形成切片時(shí),切片大小的最小值
? minSplitSizeRack:通一機(jī)架的數(shù)據(jù)塊形成切片時(shí),切片大小的最小值
2.切片形成該過(guò)程
? 1)不斷得帶節(jié)點(diǎn)列表,逐個(gè)節(jié)點(diǎn)(以塊為單位形成切片)
? ? ?遍歷累計(jì)每個(gè)節(jié)點(diǎn)上的數(shù)據(jù)塊,如果累加數(shù)據(jù)塊的大小>=maxSplitSize則將這些數(shù)據(jù)塊形成一 個(gè)切片.繼續(xù)改過(guò)程,直到剩余數(shù)據(jù)塊累加大小<maxSplitSize,則進(jìn)行下一步
? 2)如果剩余數(shù)據(jù)塊累加大小>=minSizeNode,則將這些數(shù)據(jù)塊形成一個(gè)切片。繼續(xù)該過(guò)程,直到數(shù)據(jù)塊累加大小<minSplitSizeNode。然后進(jìn)行下一步。
? 3)不斷迭代機(jī)架列表,逐個(gè)機(jī)架(以塊為單位),形成切片。如果累加數(shù)據(jù)塊大小>=maxSplitSize,則將這些數(shù)據(jù)塊形成一個(gè)切片,直到剩余數(shù)據(jù)塊累加大小<maxSplitSize則進(jìn)行下一步
? 4)遍歷并累加所有機(jī)架上的剩余數(shù)據(jù)塊,如果累加數(shù)據(jù)塊大小>=maxSplitSize則將這些數(shù)據(jù)塊形成一個(gè)切片,繼續(xù)該過(guò)程,直到剩余數(shù)據(jù)塊累加大小<maxSplitSize,則進(jìn)行下一步。
5)最終將剩余的數(shù)據(jù)塊形成一個(gè)切片。
八.設(shè)置合理的reduce task數(shù)
1.調(diào)整reduce個(gè)數(shù)方法一
1)默認(rèn)每個(gè)Reduce處理的數(shù)據(jù)量默認(rèn)是256Mset hive.exec.reducers.bytes.per.reducer=256000000; 2)每個(gè)application最大的reduce數(shù),默認(rèn)為1009,如果指定為負(fù)值,則hive在自動(dòng)確定reducer數(shù)量時(shí)將此值作為最大的reducer數(shù)量. set hive.exec.reducers.max=1009 3)計(jì)算reducer數(shù)的公式N=min(參數(shù)2,總輸入數(shù)據(jù)量/參數(shù)1)2.調(diào)整reduce個(gè)數(shù)方法二
在hadoop的maped-default.xml文件中修改 設(shè)置每個(gè)Job的Reduce個(gè)數(shù) set mapreduce.job.reduces=15;默認(rèn)為-1表示禁用3.reduce task個(gè)數(shù)并不是越多越好
過(guò)多的啟動(dòng)和初始化reduce task會(huì)消耗時(shí)間和資源.另外有多少個(gè)reduce task就會(huì)有多少個(gè)輸出文件,如果生成了很多小文件,那么如果這些小文件作為下一個(gè)任務(wù)輸入,則會(huì)出現(xiàn)小文件過(guò)多的問(wèn)題。
在設(shè)置reduce個(gè)數(shù)的時(shí)候也需要考慮這兩個(gè)原則:處理大數(shù)據(jù)量利用合適的reduce數(shù),使單個(gè)reduce任務(wù)處理數(shù)據(jù)量大小要合適。
九.數(shù)據(jù)傾斜
group by數(shù)據(jù)傾斜:map aggre、skewindata兩個(gè)job
多個(gè)key同時(shí)導(dǎo)致數(shù)據(jù)傾斜:多設(shè)置reduce task個(gè)數(shù)
join數(shù)據(jù)傾斜:map join、skewjoin兩個(gè)job、SMB、空值處理
十.explain查看執(zhí)行計(jì)劃
用法: explain extended select xxx from xxx;十一.謂詞下推
將SQL語(yǔ)句的where謂詞邏輯都盡可能提前執(zhí)行,減少下游處理的數(shù)據(jù)量。對(duì)應(yīng)邏輯優(yōu)化器是:PredicatePushDown.
set hive.optimize.ppd.=true;謂詞下推,默認(rèn)是true 會(huì)自動(dòng)將join后where中的where提前:先where再jointextfile 和sequencefile的存儲(chǔ)格式都是基于行存儲(chǔ)的。
十二.合適的文件格式
1.列式存儲(chǔ)和行式存儲(chǔ)
1)行存儲(chǔ)的特點(diǎn)
當(dāng)查詢滿足條件的一整行數(shù)據(jù)時(shí),列存儲(chǔ)需要去每個(gè)聚集的字段找到對(duì)應(yīng)的每個(gè)列的值,行存儲(chǔ)只需要找到其中的第一個(gè)值,其余的值都在相鄰地方,所以此時(shí)行存儲(chǔ)查詢的速度更快。
2)列存儲(chǔ)的特點(diǎn)
因?yàn)槊總€(gè)字段的數(shù)據(jù)聚集存儲(chǔ),在查詢只需要少數(shù)幾個(gè)字段的時(shí)候,能大大減少讀取的數(shù)據(jù)量。表中相同列的值的類型肯定是相同的,列式存儲(chǔ)可以針對(duì)性的設(shè)計(jì)更好的壓縮算法。
orc和parquet是基于列式存儲(chǔ)的。
2.textfile
默認(rèn)格式,數(shù)據(jù)不做壓縮,磁盤(pán)開(kāi)銷(xiāo)大,有序列化和反序列化的開(kāi)銷(xiāo)。壓縮后的textfile無(wú)法分割和合并,查詢效率最低(序列化和反序列化),可以直接存儲(chǔ),load的速度最快。
3.orc格式
建表語(yǔ)句
create table xx( ... ) row format delimited fields terminated by '\t' stored as orc tblproperties("orc.compress"="NONE");snappy壓縮: stored as orc tblproperties("orc.compress"="SNAPPY");也可以通過(guò)alter table來(lái)設(shè)置 alter table xx set tblproperties('orc.bloom.filter.columns'='*','orc.compress'='SNAPPY');orc是列式存儲(chǔ)的。使用orc格式,可以降低磁盤(pán)存儲(chǔ)空間,查詢效率也不會(huì)差,建議使用orc的snappy壓縮。
由于數(shù)據(jù)壓縮,數(shù)據(jù)量變小,所以Job啟動(dòng)后生成的map,reduce數(shù)目也會(huì)變少,占用的container就會(huì)少,所以變相增加了集群的計(jì)算能力。
4.parquet
spark默認(rèn)為parquet,具有很好的壓縮性能,可以指定每一列的壓縮方式,?可以減少大量的表掃描、序列化和反序列化的時(shí)間。支持復(fù)雜的嵌套數(shù)據(jù)烈性:json。
建表語(yǔ)句
create table xxx( xxx ) row format delimited fields terminated by "\t" stored as parquet ;--設(shè)置壓縮格式為snappy,根據(jù)需要來(lái)設(shè)置壓縮格式,默認(rèn)不壓縮 alter table xxx tblproperties('parquet.compression'='SNAPPY');5.總結(jié)
1.textfile存儲(chǔ)空間消耗比較大,并且壓縮的text無(wú)法分割和合并。查詢效率最低,因?yàn)橐葱蛄谢???梢灾苯哟鎯?chǔ),? load數(shù)據(jù)的速度最高。
2.orc,查詢效率高(二進(jìn)制存儲(chǔ),不需要反序列化,是自解析的,且為列式存儲(chǔ))。load時(shí)需要將text轉(zhuǎn)換成parquet,速度低。因?yàn)榇鎯?chǔ)空間少,所以也減少了maptask reducetask,和container的數(shù)量,提高集群的計(jì)算能力。無(wú)論在存儲(chǔ)還是查詢上,orc都比parquet好。
3.parquet,查詢效率高(二進(jìn)制存儲(chǔ),不需要反序列化,是自解析的,且為列式存儲(chǔ))。load時(shí)需要將text轉(zhuǎn)換成parquet,速度低。因?yàn)榇鎯?chǔ)空間少,所以也減少了maptask reducetask,和container的數(shù)量,提高集群的計(jì)算能力。適配spark,impala。
總結(jié)
以上是生活随笔為你收集整理的[hive]hive优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 量子计算 1 三个命题
- 下一篇: IND-CPA(选择明文攻击下的不可区分