1. task數(shù)據(jù)本地化級別
(1) PROCESS_LOCAL:進程本地化
(2) NODE_LOCAL:節(jié)點本地化
(3) NO_PREF:沒有本地化級別
(4) RACK_LOCAL:機架本地化
(5) ANY:跨機架取數(shù)據(jù)
2. TaskScheduler發(fā)送task選擇本地化級別的策略
比如計算需要的數(shù)據(jù)在node01這臺服務(wù)器中的Executor1這個進程中通今,那么TaskScheduler會把TaskSet發(fā)往Executor1進程中執(zhí)行提完,此時的數(shù)據(jù)本地化級別時PROCESS_LOCAL亏钩,Executor1是最佳的計算位置羞酗,如果發(fā)送的task在等待了3秒,重試了5次之后仍然沒有執(zhí)行啥供,那么TaskScheduler就認(rèn)為Executor1的資源不充足惨远,不足以支撐計算,那么降低數(shù)據(jù)本地化級別蟆盹,把task發(fā)往node01的另外一個進程Executor2中,這時的數(shù)據(jù)本地化級別為NODE_LOCAL闺金,如果還無法執(zhí)行,降低為RACK_LOCAL峰档,ANY败匹,直到Task可以開始計算
3. 查看某任務(wù)的數(shù)據(jù)本地化級別的方法
(1) 在Spark Web UI中查看
(2) 查看Spark作業(yè)的執(zhí)行日志
4. 修改task數(shù)據(jù)本地化級別的方法
增加等待時間,默認(rèn)3s讥巡,可以成倍數(shù)提高掀亩,按照6s,12s欢顷,24s…這樣的方式來修改槽棍,這樣可以快速找到最佳值,配置參數(shù):
# 可以調(diào)整全部級別的task執(zhí)行等待時間抬驴,也可以分別調(diào)整
spark.locality.wait default(3s)
spark.locality.wait.process default(3s)
spark.locality.wait.node default(3s)
spark.locality.wait.rack default(3s)
在默認(rèn)情況下炼七,最初的數(shù)據(jù)本地化級別為PROCESS_LOCAL,如果等待了3s布持,重試5次后還沒有開始執(zhí)行task豌拙,那么會降低級別,再嘗試開始執(zhí)行task题暖,比如按傅,我們就想讓task的數(shù)據(jù)本地化級別為PROCESS_LOCAL,那么把spark.locality.wait.process
修改為一個很大的值胧卤,那么這個task會一直等待唯绍,直到本機的executor中已經(jīng)加載過來了需要的數(shù)據(jù),當(dāng)然枝誊,我們不會這么做况芒。