溫馨提示×

溫馨提示×

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

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

Hive性能調優(yōu)中如何實現(xiàn)并行執(zhí)行/嚴格模式/JVM重用/推測執(zhí)行

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

這篇文章主要介紹了Hive性能調優(yōu)中如何實現(xiàn)并行執(zhí)行/嚴格模式/JVM重用/推測執(zhí)行,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

并行執(zhí)行

Hive性能調優(yōu)中如何實現(xiàn)并行執(zhí)行/嚴格模式/JVM重用/推測執(zhí)行

set hive.exec.parallel=true;              //打開任務并行執(zhí)行
set hive.exec.parallel.thread.number=16;  //同一個sql允許最大并行度,默認為8。

當然,得是在系統(tǒng)資源比較空閑的時候才有優(yōu)勢,否則,沒資源,并行也起不來。

嚴格模式

Hive提供了一個嚴格模式,可以防止用戶執(zhí)行“高危”的查詢。

通過設置屬性hive.mapred.mode值為默認是非嚴格模式nonstrict 。開啟嚴格模式需要修改hive.mapred.mode值為strict,開啟嚴格模式可以禁止3種類型的查詢。

<property>
   <name>hive.mapred.mode</name>
   <value>strict</value>
   <description>
     The mode in which the Hive operations are being performed.
     In strict mode, some risky queries are not allowed to run. They include:
       Cartesian Product.
       No partition being picked up for a query.
       Comparing bigints and strings.
       Comparing bigints and doubles.
       Orderby without limit.
   </description>
 </property>
  1. 對于分區(qū)表,用戶不允許掃描所有分區(qū),除非where語句中含有分區(qū)字段過濾條件來限制范圍,否則不允許執(zhí)行。進行這個限制的原因是,通常分區(qū)表都擁有非常大的數(shù)據(jù)集,而且數(shù)據(jù)增加迅速。沒有進行分區(qū)限制的查詢可能會消耗令人不可接受的巨大資源來處理這個表。

  2. 對于使用了order by語句的查詢,要求必須使用limit語句。因為order by為了執(zhí)行排序過程會將所有的結果數(shù)據(jù)分發(fā)到同一個Reducer中進行處理,強制要求用戶增加這個LIMIT語句可以防止Reducer額外執(zhí)行很長一段時間。

  3. 限制笛卡爾積的查詢。對關系型數(shù)據(jù)庫非常了解的用戶可能期望在執(zhí)行JOIN查詢的時候不使用ON語句而是使用where語句,這樣關系數(shù)據(jù)庫的執(zhí)行優(yōu)化器就可以高效地將WHERE語句轉化成那個ON語句。不幸的是,Hive并不會執(zhí)行這種優(yōu)化,因此,如果表足夠大,那么這個查詢就會出現(xiàn)不可控的情況。

JVM重用

JVM重用是Hadoop調優(yōu)參數(shù)的內容,其對Hive的性能具有非常大的影響,特別是對于很難避免小文件的場景或task特別多的場景,這類場景大多數(shù)執(zhí)行時間都很短。

Hadoop的默認配置通常是使用派生JVM來執(zhí)行map和Reduce任務的。這時JVM的啟動過程可能會造成相當大的開銷,尤其是執(zhí)行的job包含有成百上千task任務的情況。JVM重用可以使得JVM實例在同一個job中重新使用N次。N的值可以在Hadoop的mapred-site.xml文件中進行配置。通常在10-20之間,具體多少需要根據(jù)具體業(yè)務場景測試得出。

<property>
 <name>mapreduce.job.jvm.numtasks</name>
 <value>10</value>
 <description>How many tasks to run per jvm. If set to -1, there is
 no limit.
 </description>
</property>

我們也可以在hive當中通過

set mapred.job.reuse.jvm.num.tasks=10;

這個設置來設置我們的jvm重用 當然,這個功能也是有它的缺點的。開啟JVM重用將一直占用使用到的task插槽,以便進行重用,直到任務完成后才能釋放。如果某個“不平衡的”job中有某幾個reduce task執(zhí)行的時間要比其他Reduce task消耗的時間多的多的話,那么保留的插槽就會一直空閑著卻無法被其他的job使用,直到所有的task都結束了才會釋放。

推測執(zhí)行

在分布式集群環(huán)境下,因為程序Bug(包括Hadoop本身的bug),負載不均衡或者資源分布不均等原因,會造成同一個作業(yè)的多個任務之間運行速度不一致,有些任務的運行速度可能明顯慢于其他任務(比如一個作業(yè)的某個任務進度只有50%,而其他所有任務已經(jīng)運行完畢),則這些任務會拖慢作業(yè)的整體執(zhí)行進度。為了避免這種情況發(fā)生,Hadoop采用了推測執(zhí)行(Speculative Execution)機制,它根據(jù)一定的法則推測出“拖后腿”的任務,并為這樣的任務啟動一個備份任務,讓該任務與原始任務同時處理同一份數(shù)據(jù),并最終選用最先成功運行完成任務的計算結果作為最終結果。

Hive 同樣可以開啟推測執(zhí)行

設置開啟推測執(zhí)行參數(shù):Hadoop的mapred-site.xml文件中進行配置

<property>
 <name>mapreduce.map.speculative</name>
 <value>true</value>
 <description>If true, then multiple instances of some map tasks
              may be executed in parallel.</description>
</property>

<property>
 <name>mapreduce.reduce.speculative</name>
 <value>true</value>
 <description>If true, then multiple instances of some reduce tasks
              may be executed in parallel.</description>
</property>

不過hive本身也提供了配置項來控制reduce-side的推測執(zhí)行:

<property>
   <name>hive.mapred.reduce.tasks.speculative.execution</name>
   <value>true</value>
   <description>Whether speculative execution for reducers should be turned on. </description>
 </property>

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Hive性能調優(yōu)中如何實現(xiàn)并行執(zhí)行/嚴格模式/JVM重用/推測執(zhí)行”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!

向AI問一下細節(jié)

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

AI