hadoop作業(yè)監(jiān)控dr-elephant啟發(fā)式算法詳解

Metrics測量指標

1. Used Resources

Job使用資源的數(shù)量,單位是:GB Hours

計算方式

我們將任務的資源使用定義為:所有mapper任務和所有reducer任務的資源使用的總和性雄。

例如:

有如下的job:

4 mappers with runtime {12, 15, 20, 30} mins.

4 reducers with runtime {10 , 12, 15, 18} mins.

向yarn申請的容器大小為:4 GB

那么,

所有mapper使用的資源: 4 * (( 12 + 15 + 20 + 30 ) / 60 ) GB Hours = 5.133 GB Hours

所有reducer使用的資源: 4 * (( 10 + 12 + 15 + 18 ) / 60 ) GB Hours = 3.666 GB Hours

Job使用的總資源= 5.133 + 3.6666 = 8.799 GB Hours

2.Wasted Resources

資源浪費就是指資源浪費的數(shù)量奶镶,我們通過GB

hours或者百分比方式展示job浪費資源的數(shù)量。

計算方式

為了計算資源的浪費情況骑脱,我們需要先計算下面的指標:

1)Map和reduce任務中浪費的最小的內(nèi)存大小

2)Map和reduce任務的運行時間


任務浪費的最小的內(nèi)存大小= 申請的yarn容器的大小- 所有的任務中最大使用的內(nèi)存大小

任務浪費的資源= 任務浪費的最小內(nèi)存大小* 任務運行的時間,

job總的資源浪費 = 所有的任務浪費的資源總和


對于每一個任務我們定義如下:

peak_memory_used := task使用的內(nèi)存上界

runtime := task運行時長


通過所有task中的最大使用的物理內(nèi)存(max_physical_memory)和虛擬內(nèi)存(virtual_memory)可以計算出任意task的peak_memory_used苍糠,又由于每個任務的上界通過max_physical_memory來確定叁丧,因此我們可以說每個任務的peak_memory_used可以通過下面的公式計算出來:

peak_memory_used = Max(max_physical_memory, virtual_memory/2.1)

其中2.1是集群的內(nèi)存因子(該參數(shù)yarn.nodemanager.vmem-pmem-ratio對應的值)


每個task的最小內(nèi)存浪費可以通過下面的公式計算:

wasted_memory = container_size - peak_memory_used


每個任務的最小資源浪費可以通過下面的公式計算:

wasted_resource = wasted_memory * runtime


總的資源的浪費情況就等于所有任務的wasted_resource的總和

3.Runtime

運行時間指標展示作業(yè)總的運行時間。

計算方式

Job的運行時間是通過job的完成時間減去job提交到y(tǒng)arn的資源管理器的時間計算出來的岳瞭。

例如:

Job的開始時間是:1461837302868 ms

Job的完成時間是:1461840952182 ms

Job的運行時間是:1461840952182 - 1461837302868= 3649314 ms or 1.01 hours

4.Wait time

Job的等待時間是指job運行中花費在等待狀態(tài)總的時間拥娄。

計算方式

對于每一個job我們定義如下的名詞:

ideal_start_time := 所有任務都應該完成啟動的理想的時間

finish_time := 任務完成時間

task_runtime := 任務運行時間


- Map tasks

對于map任務,我們定義如下:

ideal_start_time := job的開始時間


我們找出所有map任務中最長運行時間(task_runtime_max)和最后的完成時間( finish_time_last ),那么job中mapper的總的等待時間就可以通過如下的公式計算出來:

mapper_wait_time = finish_time_last - (ideal_start_time + task_runtime_max)


- Reduce tasks

對于reducer任務寝优,我們定義如下:


ideal_start_time := 通過獲取的reducer慢開始的百分比(mapreduce.job.reduce.slowstart.completedmaps:這個參數(shù)的含義是条舔,當Map Task完成的比例達到該值后才會為Reduce Task申請資源,默認是0.05)并找到map任務完成之后最先開始的那個reducer乏矾,就可以計算出該參數(shù)


我們找到reducer任務最大運行時間( task_runtime_max)和最后完成的時間( finish_time_last )

那么job的reducer任務的總等待時間就可以使用如下公式計算出來:

reducer_wait_time =finish_time_last - (ideal_start_time + task_runtime_max)


total_wait_time = mapper_wait_time + reducer_wait_time

例如:


如上圖:

對于map任務:

ideal_start_time = t1

task_runtime_max = Map_1對應的運行時間

finish_time_last = t4

mapper_wait_time = t4 – Map_1對應的運行時間– t1

對于reduce任務:

ideal_start_time = t2

task_runtime_max = Reduce_3對應的運行時間

finish_time_last = t6

reducer_wait_time = t6 -

Reduce_3對應的運行時間- t2

總的等待時間:

total_wait_time =mapper_wait_time + reducer_wait_time


MapReduce算法分析

1.Mapper數(shù)據(jù)傾斜

數(shù)據(jù)進入到Mapper作業(yè)中后孟抗,有可能會發(fā)生數(shù)據(jù)的傾斜,這種數(shù)據(jù)傾斜主要是考慮到HDFS文件大小差別太大導致的钻心。

1)判斷依據(jù)

根據(jù)每個map task運行的時間和數(shù)據(jù)量兩個指標進行判定凄硼。

2)原理

Mapper數(shù)據(jù)傾斜啟發(fā)式算法(mapper

data skew heuristic)會將所有的Mapper分成兩部分,其中一部分的所有作業(yè)(task)的平均數(shù)據(jù)量會大于另一部分的平均數(shù)據(jù)量捷沸,之后根據(jù)這兩個組的平均數(shù)據(jù)量的差值的絕對值/這兩組數(shù)據(jù)中平均數(shù)據(jù)量的最小值來判斷數(shù)據(jù)傾斜程度摊沉。時間方面的傾斜程度算法一樣。

此圖中的A和B兩組的平均數(shù)據(jù)量和平均運行時間都差不多痒给,沒有發(fā)生數(shù)據(jù)傾斜

此圖中A和B兩組的平均運行時間差不多说墨,但是平均數(shù)據(jù)量差別很大,最終導致嚴重程度為Critical苍柏,這說明該作業(yè)讀取的hdfs中的數(shù)據(jù)文件大小差別太大尼斧,1)可能是有很多小文件, 2)也可能是文件大小超過block大小的10%以上一點试吁,導致超出的部分又占用了一個block

3)計算步驟

(1)遞歸的計算作業(yè)輸入數(shù)據(jù)量的平均值棺棵,然后根據(jù)作業(yè)的輸入量平均值將所有的作業(yè)分成兩組Group_A 和Group_B。

(2)計算各組的平均值熄捍,并求出數(shù)據(jù)量小的組的平均值(minAvg)和兩組平均值之差的絕對值(diffAvgAbs)

(3)求出誤差( diffAvgAbs/ minAvg )烛恤,根據(jù)誤差和給定的誤差級別(比如:{2, 4, 8, 16})計算嚴重程度severity

(4)計算出數(shù)據(jù)量小的那組的的task數(shù)量,并根據(jù)配置的task數(shù)量級別(比如:{10, 50, 100, 200})計算出task數(shù)量的嚴重程度taskSeverity

(5)取數(shù)據(jù)量大的那組的平均數(shù)據(jù)量余耽,并根據(jù)配置的文件大小級別(比如:{1d / 8, 1d / 4, 1d / 2, 1d}其中的每個值需要乘以block的大懈堪亍)計算出task數(shù)據(jù)量的嚴重程度fileSeverity

(6)求出上面計算出來的嚴重程度的最小值作為map 數(shù)據(jù)傾斜程度的結(jié)果。


2.Mapper GC

Mapper GC會分析任務的GC效率宾添。它會計算出所有mapper的平均GC時間占平均CPU時間的比例船惨。避免打擾用戶柜裸,該算法在代碼中設置了很寬松的范圍(觀察線上跑的結(jié)果發(fā)現(xiàn)確實沒有GC報警的情況),但是如果分析的結(jié)果仍然報警的話粱锐,說明你的代碼確實需要優(yōu)化了疙挺。

1)判斷依據(jù)

平均GC時間占平均CPU時間的比例,比例越高怜浅,嚴重程度越大铐然,通常來說代碼需要優(yōu)化。

2)原理

計算出所有作業(yè)的平均的CPU使用時間恶座、平均運行時間以及平均GC的時間搀暑。我們要計算Mapper GC嚴重度的最小值,這個值可以通過平均運行時間和平均垃圾回收時間占平均CPU總消耗時間的比例來計算跨琳。

3)計算步驟

(1)計算出平均CPU使用時間(avgCPU)自点、平均運行時間(avgRuntime)、平均GC時間(avgGC)脉让。

(2)計算出平均GC時間占平均CPU時間的比例(gcRatio)

(3)使用gcRatio和誤差級別(比如:{0.01d, 0.02d, 0.03d, 0.04d})計算嚴重程度gcSeverity

(4)使用平均運行時間和運行時間的級別(比如:{5, 10, 12, 15} 單位:分鐘數(shù))計算運行時間的嚴重程度runtimeSeverity

(5)取上面兩個嚴重程度的最小值作為gc的嚴重程度桂敛。

3.Mapper的內(nèi)存消耗

分析每個Mapper實際內(nèi)存的消耗,并檢查作業(yè)消耗的內(nèi)存比例以及向yarn申請的容器的總內(nèi)存溅潜,該指標用于分析用戶申請的容器內(nèi)存是否合理术唬,比如:你申請了10G的yarn容器的內(nèi)存,但是實際消耗內(nèi)存卻只有1G滚澜,說明你的任務浪費了很多內(nèi)存資源粗仓,此時就會顯示嚴重級別為critical,說明你需要減少每個mapper向yarn容器申請的內(nèi)存資源的大小设捐。

1)判斷依據(jù)

task任務平均使用內(nèi)存占向yarn容器所申請的內(nèi)存的比例借浊。比例越低說明內(nèi)存資源浪費程度越高,需要優(yōu)化萝招,反之則說明資源利用率越高越好巴碗。

2)原理

計算平均內(nèi)存消耗占用向yarn資源容器申請的內(nèi)存大小比率,使用該比率結(jié)合設置的內(nèi)存利用率級別判斷mapper對內(nèi)存的消耗是否合理即寒。

此圖對內(nèi)存的消耗就不合理,因為申請的內(nèi)存高達24G召噩,但是實際使用的內(nèi)存最大卻只有6G左右母赵,平均內(nèi)存使用才3.7G左右,嚴重浪費內(nèi)存資源具滴。

3)計算步驟

(1)計算所有task的平均物理內(nèi)存消耗(avgPhysicalMemory)凹嘲、平均虛擬內(nèi)存消耗(avgVirtualMemory)、平均運行時間(avgRuntime)构韵,并從該應用的配置文件中獲取向yarn容器申請的內(nèi)存大兄懿洹(containerMemory)

(2)計算平均物理內(nèi)存消耗(avgPhysicalMemory)和向yarn容器申請的內(nèi)存大星魉摇(containerMemory)的比值(ratio)。

(3)使用上面的比值(ratio)結(jié)合內(nèi)存利用率級別(比如:{0.6d, 0.5d, 0.4d, 0.3d})凶朗,計算出嚴重程度severity瓷胧。

(4)再使用向yarn容器申請的內(nèi)存大小(containerMemory)與容器級別(比如:{1.1d,

1.5d, 2.0d, 2.5d} 中的每一個值需要乘以yarn的配置文件中配置的默認的容器大信锓摺)計算出申請的容器的嚴重程度containerSeverity

(5)計算出上面兩個嚴重級別的最小值作為內(nèi)存消耗的嚴重級別

4.Mapper的運行速度

分析Mapper代碼的運行效率搓萧。通過這些分析可以知道m(xù)apper屬于CPU消耗型的,或者是mapper處理的數(shù)據(jù)量過大宛畦。通過這個能夠分析出mapper運行速度快慢和處理的數(shù)據(jù)量大小之間的關(guān)系瘸洛。

1)判斷依據(jù)

???????? 所有task的運行速度的中值作為判斷mapper運行速度的依據(jù),而運行速度是通過每個task的輸入數(shù)據(jù)/運行時長得到的次和。

2)原理

???????? 通過計算每個task的運行速度的中值反肋,結(jié)合配置的磁盤的讀取速度,判斷出mapper任務的執(zhí)行速度踏施,但是需要排除運行時間過短導致的錯誤的結(jié)果石蔗。

此任務運行速度就太慢了,也可以推斷出該任務是CPU消耗型任務读规。

3)計算步驟

(1)計算出運行速度的中值(medianSpeed)抓督、運行時間的中值(medianRuntime)、輸入數(shù)據(jù)量的中值(medianDataSize)

(2)使用運行速度中值(medianSpeed)結(jié)合運行速度的級別(比如:{1d / 2, 1d / 4, 1d / 8, 1d / 32} 每個值需要乘以磁盤的讀取速度束亏,默認100M/s)計算出嚴重級別speedSeverity铃在。

(3)再使用運行時間的中值(medianRuntime)結(jié)合運行時間級別(比如:{5, 10, 15, 30})計算出運行時間的嚴重程度runtimeSeverity

(4)取speedSeverity和runtimeSeverity兩個嚴重級別的較小者作為運行速度的嚴重級別。

5.Mapper溢出

該算法從磁盤IO的角度去評測mapper的性能碍遍。mapper溢出比例(溢出的記錄數(shù)/總輸出的記錄數(shù))是衡量mapper性能的一個重要指標:如果這個值接近2定铜,表示幾乎每個記錄都溢出了,并臨時寫到磁盤兩次(其中一次發(fā)生在內(nèi)存排序緩存溢出時怕敬,另一次發(fā)生在歸并排序所有溢出的切換時)揣炕。當這些發(fā)生時表明mapper輸入輸出的數(shù)據(jù)量過大了。

1)判斷依據(jù)

總的溢出記錄數(shù)和總的輸出記錄數(shù)的比值东跪。

2)原理

計算出所有task的溢出記錄數(shù)和所有task的輸出記錄數(shù)的比值畸陡,使用該比值進行mapper溢出嚴重程度的判斷,該比值越大說明輸入輸出的數(shù)據(jù)量過大虽填,需要進行優(yōu)化以提高運行速度丁恭。

3)計算步驟

(1)計算出所有task的總的溢出記錄數(shù)(totalSpillRecords)、總的輸出記錄數(shù)(totalOutputRecords)斋日,并計算出其比值(ratioSpill)

(2)使用上面計算的比值結(jié)合配置的溢出級別(比如:{2.01d, 2.2d, 2.5d, 3.0d})計算出溢出的嚴重程度spillSeverity牲览。

(3)根據(jù)task的數(shù)量計算出任務數(shù)的嚴重程度taskNumberSeverity

(4)取上面兩個小的嚴重程度作為溢出嚴重程度。

6.Mapper運行時間

這部分分析mappers的數(shù)量是否合適恶守。通過分析結(jié)果第献,我們可以更好的優(yōu)化任務中mapper的數(shù)量這個參數(shù)的設置贡必。有以下兩種情況發(fā)生時,這個參數(shù)的優(yōu)化就顯得很迫切了:

1)Mapper的運行時間很短庸毫,可能的原因如下:

mapper的數(shù)量過多

mapper的平均運行時間很短

文件尺寸太小

2)Mapper的運行時間很長仔拟,可能的原因包括:

mapper的數(shù)量很少

mapper的平均運行時間很長

文件的大小過大(個別文件是GB級別)

1)判斷依據(jù)

???????? 根據(jù)所有task運行的平均時長進行嚴重程度的判斷

2)原理

???????? 首先計算出所有task的平均運行時間,之后根據(jù)該平均運行時間計算出最短和最長的任務運行時長嚴重級別岔绸,取兩個嚴重級別中較大的作為運行時長的嚴重級別理逊。

3)計算步驟

(1)計算出所有task的平均輸入大小(avgInputSize)盒揉、平均運行時長(avgRuntime)(2)根據(jù)平均運行時長(avgRuntime)結(jié)合短運行時長級別(比如:{10, 4, 2, 1} 其中的每個值代表的是分鐘數(shù))計算出短運行時長的嚴重級別shortSeverity

(3)根據(jù)任務數(shù)結(jié)合任務數(shù)的級別(比如:{50, 101, 500, 1000})計算出任務數(shù)的嚴重程度taskNumberSeverity

(4)取上面shortSeverity和taskNumberSeverity的較小值作為短運行時長的嚴重級別realShortSeverity

(5)根據(jù)平均運行時長(avgRuntime)結(jié)合長運行時長級別(比如:{15, 30, 60, 120} 其中的每個值代表的是分鐘數(shù))計算出長運行時長的嚴重級別longSeverity

(6)取realShortSeverity和longSeverity總的較大則作為運行時長的嚴重級別

7.Reducer數(shù)據(jù)傾斜

分析進入到每個Reduce中的數(shù)據(jù)是否有傾斜晋被。該分析能夠發(fā)現(xiàn)Reducer中是否存在這種情況,將Reduce分為兩部分刚盈,其中一部分的輸入數(shù)據(jù)量明顯大于另一部分的輸入數(shù)據(jù)量羡洛。

1)判斷依據(jù)

根據(jù)每個reduce task運行的時間和數(shù)據(jù)量兩個指標進行判定。

2)原理

Mapper數(shù)據(jù)傾斜啟發(fā)式算法(reducer

data skew heuristic)會將所有的Reducer分成兩部分藕漱,其中一部分的所有作業(yè)(task)的平均數(shù)據(jù)量會大于另一部分的平均數(shù)據(jù)量欲侮,之后根據(jù)這兩個組的平均數(shù)據(jù)量的差值/這兩組數(shù)據(jù)中平均數(shù)據(jù)量的最小值來判斷數(shù)據(jù)傾斜程度。時間方面的傾斜程度算法一樣肋联。

3)計算步驟

(1)遞歸的計算作業(yè)輸入數(shù)據(jù)量的平均值威蕉,然后根據(jù)作業(yè)的輸入量平均值將所有的作業(yè)分成兩組Group_A 和Group_B。

(2)計算各組的平均值橄仍,并求出數(shù)據(jù)量小的組的平均值(minAvg)和兩組平均值之差的絕對值(diffAvgAbs)

(3)求出誤差( diffAvgAbs/ minAvg )韧涨,根據(jù)誤差和給定的誤差級別(比如:{2, 4, 8, 16})計算嚴重程度severity

(4)計算出數(shù)據(jù)量小的那組的的task數(shù)量,并根據(jù)配置的task數(shù)量級別(比如:{10, 50, 100, 200})計算出task數(shù)量的嚴重程度taskSeverity

(5)取數(shù)據(jù)量大的那組的平均數(shù)據(jù)量侮繁,并根據(jù)配置的文件大小級別(比如:{1d / 8, 1d / 4, 1d / 2, 1d}其中的每個值需要乘以block的大新侵唷)計算出task數(shù)據(jù)量的嚴重程度fileSeverity

(6)求出上面計算出來的嚴重程度的最小值作為map 數(shù)據(jù)傾斜程度的結(jié)果。

8.Reducer GC

Reduce GC用于分析任務的GC效率宪哩,能夠計算并告訴我們GC時間占所用CPU時間的比例娩贷。該算法在代碼中設置了很寬松的范圍,避免打擾用戶锁孟,但是如果分析的結(jié)果任然報警的話彬祖,說明你的代碼確實需要優(yōu)化了。

1)判斷依據(jù)

平均GC時間占平均CPU時間的比例品抽,比例越高涧至,嚴重程度越大,通常來說代碼需要優(yōu)化桑包。

2)原理

首先,會計算出所有任務的平均CPU消耗時間纺非、平均運行時間以及平均垃圾回收所消耗的時間哑了。然后赘方,算法會根據(jù)平均運行時間以及垃圾回收時間占平均CPU時間的比值來計算出最低的嚴重度。

3)計算步驟

(1)計算出平均CPU使用時間(avgCPU)弱左、平均運行時間(avgRuntime)窄陡、平均GC時間(avgGC)。

(2)計算出平均GC時間占平均CPU時間的比例(gcRatio)

(3)使用gcRatio和誤差級別(比如:{0.01d, 0.02d, 0.03d, 0.04d})計算嚴重程度gcSeverity

(4)使用平均運行時間和運行時間的級別(比如:{5, 10, 12, 15} 單位:分鐘數(shù))計算運行時間的嚴重程度runtimeSeverity

(5)取上面兩個嚴重程度的最小值作為gc的嚴重程度拆火。

9.Reducer內(nèi)存消耗

分析每個Reducer實際內(nèi)存的消耗跳夭,并檢查作業(yè)消耗的內(nèi)存比例以及向yarn申請的容器的總內(nèi)存,該指標用于分析用戶申請的容器內(nèi)存是否合理们镜,比如:你申請了10G的yarn容器的內(nèi)存币叹,但是實際消耗內(nèi)存卻只有1G,說明你的任務浪費了很多內(nèi)存資源模狭,此時就會顯示嚴重級別為critical颈抚,說明你需要減少每個Reducer向yarn容器申請的內(nèi)存資源的大小。

1)判斷依據(jù)

task任務平均使用內(nèi)存占向yarn容器所申請的內(nèi)存的比例嚼鹉。比例越低說明內(nèi)存資源浪費程度越高贩汉,需要優(yōu)化,反之則說明資源利用率越高越好锚赤。

2)原理

計算平均內(nèi)存消耗占用向yarn資源容器申請的內(nèi)存大小比率匹舞,使用該比率結(jié)合設置的內(nèi)存利用率級別判斷reducer對內(nèi)存的消耗是否合理。

此圖對內(nèi)存的消耗就不合理线脚,因為申請的內(nèi)存高達24G赐稽,但是實際使用的內(nèi)存最大卻只有6G左右,平均內(nèi)存使用才3.7G左右酒贬,嚴重浪費內(nèi)存資源又憨。

3)計算步驟

(1)計算所有task的平均物理內(nèi)存消耗(avgPhysicalMemory)、平均虛擬內(nèi)存消耗(avgVirtualMemory)锭吨、平均運行時間(avgRuntime)蠢莺,并從該應用的配置文件中獲取向yarn容器申請的內(nèi)存大小(containerMemory)零如。

(2)計算平均物理內(nèi)存消耗(avgPhysicalMemory)和向yarn容器申請的內(nèi)存大絮锝(containerMemory)的比值(ratio)。

(3)使用上面的比值(ratio)結(jié)合內(nèi)存利用率級別(比如:{0.6d, 0.5d, 0.4d, 0.3d})考蕾,計算出嚴重程度severity祸憋。

(4)再使用向yarn容器申請的內(nèi)存大小(containerMemory)與容器級別(比如:{1.1d,

1.5d, 2.0d, 2.5d} 中的每一個值需要乘以yarn的配置文件中配置的默認的容器大行の浴)計算出申請的容器的嚴重程度containerSeverity 蚯窥。

(5)計算出上面兩個嚴重級別的最小值作為內(nèi)存消耗的嚴重級別。

10.Reducer時間

這部分分析Reducer的執(zhí)行效率,可以幫助我們更好的配置任務中reducer的數(shù)量拦赠;當出現(xiàn)以下兩種情況時巍沙,說明Reducer的數(shù)量需要進行調(diào)優(yōu):

1)Reducer過多,hadoop任務可能的表現(xiàn)是:

Reducer數(shù)量過多

Reducer的運行時間很短

2)Reducer過少荷鼠,hadoop任務可能的表現(xiàn)是:

Reducer數(shù)量過少

Reducer運行時間很長

1)判斷依據(jù)

???????? 根據(jù)所有task運行的平均時長進行嚴重程度的判斷

2)原理

???????? 首先計算出所有task的平均運行時間句携,之后根據(jù)該平均運行時間計算出最短和最長的任務運行時長嚴重級別,取兩個嚴重級別中較大的作為運行時長的嚴重級別允乐。

任務數(shù)多矮嫉,運行時長過短,屬于嚴重級別的

運行時長計算:屬于嚴重級別的

任務數(shù)方面計算:屬于None級別的

取上面兩個級別的較小者None級別作為最終的嚴重級別牍疏。

3)計算步驟

(1)計算出所有task的最大運行時長(minRuntime)蠢笋、最小運行時長(maxRuntime)、平均運行時長(avgRuntime)(2)根據(jù)平均運行時長(avgRuntime)結(jié)合短運行時長級別(比如:{10, 4, 2, 1} 單位:分鐘)計算出短運行時長的嚴重級別shortSeverity

(3)根據(jù)任務數(shù)結(jié)合任務數(shù)的級別(比如:{50, 101, 500, 1000})計算出任務數(shù)的嚴重程度taskNumberSeverity

(4)取上面shortSeverity和taskNumberSeverity的較小值作為短運行時長的嚴重級別realShortSeverity

(5)根據(jù)平均運行時長(avgRuntime)結(jié)合長運行時長級別(比如:{15, 30, 60, 120}單位:分鐘數(shù))計算出長運行時長的嚴重級別longSeverity

(6)取realShortSeverity和longSeverity總的較大則作為運行時長的嚴重級別

11.洗牌和排序

分析reducer消耗的總時間以及reducer在進行洗牌和排序時消耗的時間麸澜,通過這些分析挺尿,可以判斷reducer的執(zhí)行效率。

1)判斷依據(jù)

???????? 所有task的平均shuffle時長和平均sort時長進行判斷的炊邦,取兩者中較大的作為洗牌和排序的嚴重級別

2)原理

???????? 首先計算出所有的task的平均shuffle時長和平均sort時長编矾,之后再分別與平均執(zhí)行時長(totalTime - shuffleTime - sortTime)進行相除,計算出shuffle和sort的嚴重級別馁害,取兩者中較大的作為洗牌和排序的嚴重級別窄俏。

其中后面的X代表倍數(shù)的意思,計算方式是:avgShuffleTime / avgCodeTime 和avgSortTime /

avgCodeTime碘菜。

此圖顯示shuffle的時間很長凹蜈,但是sort的時間很短,說明你需要調(diào)整slowstart參數(shù)"mapreduce.job.reduce.slowstart.completedmaps"從0.90 調(diào)大一些忍啸,要小于1.0仰坦。但是需要注意的是,調(diào)整此參數(shù)可以降低shuffle的時間计雌,但是可能會增加整個job的運行時間悄晃。?

3)計算步驟

(1)計算出所有task的平均執(zhí)行時長(avgExecuteTime)、平均shuffle時長(avgShuffleTime)凿滤、平均sort時長(avgSortTime)

(2)將平均shuffle時長結(jié)合運行時長的級別(比如:{1, 5, 10, 30} 單位:分鐘數(shù))計算出shuffle的嚴重級別shuffleSeverity

(3)計算shuffleRatio?= avgShuffleTime* 2 / avgExecuteTime妈橄,之后使用shuffleRatio結(jié)合運行比率級別(比如:{1, 2, 4, 8})計算出shuffle運行比率級別shuffleRatioSeverity

(4)取shuffleSeverity 和shuffleRatioSeverity的較小者作為真正的shuffle嚴重級別realShuffleSeverity

(5)將平均sort時長(avgSortTime)結(jié)合運行時長的級別(比如:{1, 5, 10, 30}單位:分鐘數(shù))計算出sort的嚴重級別sortSeverity

(6)計算sortRatio?= avgSortTime * 2 /avgExecuteTime,之后使用sortRatio結(jié)合運行比率級別(比如:{1, 2, 4, 8})計算出sort運行比率級別sortRatioSeverity

(7)取sortSeverity和sortRatioSeverity的最小值作為真正的shuffle嚴重級別realSortSeverity

(8)取realShuffleSeverity和realSortSeverity中較大者作為洗牌和排序的嚴重級別

參考文獻:

1. CSDN一位大牛寫的文章:

https://zhuanlan.zhihu.com/p/20855271?refer=dr-elephant

2. Dr-elephant官方文檔:

https://github.com/linkedin/dr-elephant/wiki/Metrics-and-Heuristics

3. 線上跑的dr-elephant程序web頁面

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翁脆,一起剝皮案震驚了整個濱河市眷蚓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌反番,老刑警劉巖沙热,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叉钥,死亡現(xiàn)場離奇詭異,居然都是意外死亡篙贸,警方通過查閱死者的電腦和手機沼侣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歉秫,“玉大人,你說我怎么就攤上這事养铸⊙丬剑” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵钞螟,是天一觀的道長兔甘。 經(jīng)常有香客問我,道長鳞滨,這世上最難降的妖魔是什么洞焙? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮拯啦,結(jié)果婚禮上澡匪,老公的妹妹穿的比我還像新娘。我一直安慰自己褒链,他們只是感情好唁情,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甫匹,像睡著了一般甸鸟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兵迅,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天抢韭,我揣著相機與錄音,去河邊找鬼恍箭。 笑死刻恭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的季惯。 我是一名探鬼主播吠各,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼勉抓!你這毒婦竟也來了贾漏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤藕筋,失蹤者是張志新(化名)和其女友劉穎纵散,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡伍掀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年掰茶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜜笤。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡濒蒋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出把兔,到底是詐尸還是另有隱情沪伙,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布县好,位于F島的核電站围橡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏缕贡。R本人自食惡果不足惜翁授,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晾咪。 院中可真熱鬧收擦,春花似錦、人聲如沸禀酱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剂跟。三九已至减途,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間曹洽,已是汗流浹背鳍置。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留送淆,地道東北人税产。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像偷崩,于是被迫代替她去往敵國和親辟拷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 摘自:http://staticor.io/post/hadoop/2016-01-23hadoop-defini...
    wangliang938閱讀 593評論 0 1
  • 目的這篇教程從用戶的角度出發(fā)阐斜,全面地介紹了Hadoop Map/Reduce框架的各個方面衫冻。先決條件請先確認Had...
    SeanC52111閱讀 1,725評論 0 1
  • MapReduce框架結(jié)構(gòu)## MapReduce是一個用于大規(guī)模數(shù)據(jù)處理的分布式計算模型MapReduce模型主...
    Bloo_m閱讀 3,750評論 0 4
  • 有時候隅俘,回想以前邻奠,恍如隔世。 現(xiàn)在的日子不咸不淡为居,也好久沒跟你說會話了碌宴。 好多以前相信的話語,現(xiàn)在也沒有那么堅定了...
    洋蔥蔥閱讀 338評論 16 8
  • 將冬的天津 樹葉長成眼睛喜歡的色彩 有為我種下的后悔蒙畴,不是悔恨 不是眼里如初 天空如水 無以回報贰镣,其疾疾似矢 也如...
    Amaorent阿毛的空瓶子閱讀 193評論 0 11