Spark效能調優4 本地化等待時間

2021-09-26 22:32:16 字數 2626 閱讀 8947

spark

在driver

上,對的每乙個

stage

的task

,進行分配之前,都會計算出每個

task

要計算的是哪個分片資料,

rdd的某個

partition

;spark

的task

分配演算法,優先,會希望每個

task

正好分配到它要計算的資料所在的節點,這樣的話,就不用在網路間傳輸資料;

但是呢,通常來說,有時,事與願違,可能

task

沒有機會分配到它的資料所在的節點,為什麼呢,可能那個節點的計算資源和計算能力都滿了;所以呢,這種時候,通常來說,

spark

會等待一段時間,預設情況下是

3s鐘(不是絕對的,還有很多種情況,對不同的本地化級別,都會去等待),到最後,實在是等待不了了,就會選擇乙個比較差的本地化級別,比如說,將

task

分配到靠它要計算的資料所在節點,比較近的乙個節點,然後進行計算。

但是對於第二種情況,通常來說,肯定是要發生資料傳輸,

task

會通過其所在節點的

blockmanager

來獲取資料,

blockmanager

發現自己本地沒有資料,會通過乙個

getremote()

方法,通過

transferservice

(網路資料傳輸元件)從資料所在節點的

blockmanager

中,獲取資料,通過網路傳輸回

task

所在節點。

對於我們來說,當然不希望是類似於第二種情況的了。最好的,當然是

task

和資料在乙個節點上,直接從本地

executor

的blockmanager

中獲取資料,純記憶體,或者帶一點磁碟

io;如果要通過網路傳輸資料的話,那麼實在是,效能肯定會下降的,大量網路傳輸,以及磁碟

io,都是效能的殺手。

process_local

:程序本地化,**和資料在同乙個程序中,也就是在同乙個

executor

中;計算資料的

task

由executor

執行,資料在

executor

的blockmanager

中;效能最好

node_local

:節點本地化,**和資料在同乙個節點中;比如說,資料作為乙個

hdfs block

塊,就在節點上,而

task

在節點上某個

executor

中執行;或者是,資料和

task

在乙個節點上的不同

executor

中;資料需要在程序間進行傳輸

no_pref

:對於task

來說,資料從**獲取都一樣,沒有好壞之分

rack_local

:機架本地化,資料和

task

在乙個機架的兩個節點上;資料需要通過網路在節點之間進行傳輸

any:資料和

task

可能在集群中的任何地方,而且不在乙個機架中,效能最差

spark.locality.wait,預設是3s

我們什麼時候要調節這個引數?

觀察日誌,

spark

作業的執行日誌,推薦大家在測試的時候,先用

client

模式,在本地就直接可以看到比較全的日誌。

日誌裡面會顯示,

starting task

。。。,

process local

、node local

觀察大部分

task

的資料本地化級別

如果大多都是

process_local

,那就不用調節了

如果是發現,好多的級別都是

node_local

、any

,那麼最好就去調節一下資料本地化的等待時長

調節完,應該是要反覆調節,每次調節完以後,再來執行,觀察日誌

看看大部分的

task

的本地化級別有沒有提公升;看看,整個

spark

作業的執行時間有沒有縮短

你別本末倒置,本地化級別倒是提公升了,但是因為大量的等待時長,

spark

作業的執行時間反而增加了,那就還是不要調節了

怎麼調節?

spark.locality.wait,預設是3s;

6s,10s

預設情況下,下面

3個的等待時長,都是跟上面那個是一樣的,都是3s

spark效能調優 本地化等待時長

本地化級別 1.程序本地化 2.節點本地化 3.機架本地化 4.any 都沒有 但是,通常來說,有時候,事與願違,可能task沒有機會分配到它的資料所在的節點,可能那個節點的計算資源和計算能力都滿了,所以,這種時候,通常倆說,spark會等待一段時間,預設情況下是3s 不是絕對的,還有很多情況,對不...

Spark效能調優系列 資料本地化

背景 資料本地化對於spark job效能有著巨大的影響,如果資料以及要計算它的 是一起的,那麼效能當然會非常高。但是如果資料與計算它的 是分開的,那麼其中之一必須到另外一方機器上,通常來說,移動 到其它節點,會比移動資料到 所在的節點上,速度要快的多。因為 較小,spark也正是基於這個資料本地化...

54 效能調優之調節資料本地化等待時長

本文為 spark大型電商專案實戰 系列文章之一,主要介紹在實際專案中通過調節資料本地化等待時長進行效能優化。但是呢,通常來說,有時事與願違,可能 task 沒有機會分配到它的資料所在的節點,可能那個節點的計算資源和計算能力都滿了,通常來說,這時 spark 會等待一段時間,預設情況下是3s鐘 不是...