Hive JVM重用與推測執行

2021-10-01 05:10:27 字數 1405 閱讀 3138

mapreduce.job.jvm.numtasks<

/name>

10<

/value>

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執行的時間要比其他reduce task消耗的時間多的多的話,那麼保留的插槽就會一直空閒著卻無法被其他的job使用,直到所有的task都結束了才會釋放。

mapreduce.map.speculative<

/name>

true

<

/value>

if true

, then multiple instances of some map tasks

may be executed in parallel.

<

/property>

mapreduce.reduce.speculative<

/name>

true

<

/value>

if true

, then multiple instances of some reduce tasks

may be executed in parallel.

<

/property>

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

hive.mapred.reduce.tasks.speculative.execution<

/name>

true

<

/value>

whether speculative execution for reducers should be turned on.

<

/description>

<

/property>

關於調優這些推測執行變數,還很難給乙個具體的建議。如果使用者對於執行時的偏差非常敏感的話,那麼可以將這些功能關閉掉。如果使用者因為輸入資料量很大而需要首席執行官時間的map或者reduce task的話,那麼啟動推測執行造成的浪費是非常巨大大。

Hive 推測執行

在分布式集群環境下,因為程式bug 包括hadoop本身的bug 負載不均衡或者資源分布不均等原因,會造成同乙個作業的多個任務之間執行速度不一致,有些任務的執行速度可能明顯慢於其他任務 比如乙個作業的某個任務進度只有50 而其他所有任務已經執行完畢 則這些任務會拖慢作業的整體執行進度。為了避免這種情...

spark推測執行 填坑

1 spark推測執行開啟 設定 spark.speculation true即可 額外設定 1.spark.speculation interval 100 檢測週期,單位毫秒 2.spark.speculation quantile 0.75 完成task的百分比時啟動推測 3.spark.sp...

Hive 優化之 推測執行

mapreduce將作業分解成多個任務並行執行的機制,決定了作業執行的總體時間對執行緩慢的任務比較敏感。為了盡量避免執行緩慢的任務對作業執行時間 託後腿 的情況,需要啟動作業的推測執行。在分布式集群環境下,因為程式bug 包括hadoop本身的bug 負載不均衡或者資源分布不均等原因,會造成同乙個作...