Dr. Elephant 使用文檔

1. 引言

Dr. Elephant 由 LinkedIn 于 2016 年 4 月份開(kāi)源拘哨,是一個(gè) Hadoop 和 Spark 的性能監(jiān)控和調(diào)優(yōu)工具镶殷。Dr. Elephant 能自動(dòng)化收集所有指標(biāo),進(jìn)行數(shù)據(jù)分析恋拷,并以簡(jiǎn)單易用的方式進(jìn)行呈現(xiàn)准给。Dr. Elephant 的目標(biāo)是提高開(kāi)發(fā)人員的開(kāi)發(fā)效率和增加集群任務(wù)調(diào)試的高效性。Dr. Elephant 支持對(duì) Hadoop 和 Spark 任務(wù)進(jìn)行可插拔式描滔、配置化以及基于規(guī)則的啟發(fā)式j(luò)ob性能分析棒妨,并且根據(jù)分析結(jié)果給出合適的建議來(lái)指導(dǎo)如何調(diào)優(yōu)使任務(wù)更有效率。

2. 概述

下面是 Dr.Elephant 的界面展示含长。

dr_01.png

Dashboard 按時(shí)間的由近到遠(yuǎn)展示出 Job 的診斷結(jié)果券腔。下面的 Tab:Mapper Data Skew 等都對(duì)應(yīng)到一條規(guī)則。藍(lán)色表示規(guī)則診斷通過(guò)拘泞,其他顏色表示有問(wèn)題纷纫。 Dr.Elephant 將診斷結(jié)果做了分級(jí),分別對(duì)應(yīng)不同的顏色陪腌。

Dr.Elephant 還提供了 job 的搜索和比較辱魁,界面如下圖

dr_03.png

針對(duì)單個(gè) job 還可以看到 performance 的歷史曲線(xiàn)圖。

flow-history01.png

優(yōu)化建議诗鸭。

suggestions.png

3. 系統(tǒng)架構(gòu)

Dr. Elephant 的系統(tǒng)架構(gòu)如下圖染簇。主要包括三個(gè)部分:

  • 數(shù)據(jù)采集:數(shù)據(jù)源為 Job History
  • 診斷和建議:內(nèi)置診斷系統(tǒng)
  • 存儲(chǔ)和展示:MySQL 和 WebUI


    drelephant-arch.png

4. 優(yōu)化建議

下面是一些常規(guī)優(yōu)化建議。

1. Tuning Each Step is Important

對(duì)于Pig任務(wù)來(lái)說(shuō)强岸,如果使用默認(rèn)參數(shù)來(lái)設(shè)置reducer的數(shù)量锻弓,這對(duì)任務(wù)的性能可能是致命的。一般來(lái)說(shuō)蝌箍,對(duì)每個(gè)Pig任務(wù)青灼,都花一些時(shí)間來(lái)調(diào)優(yōu)參數(shù)PARALLEL是非常值得做的暴心。例如:

memberFeaturesGrouped = GROUP memberFeatures BY memberId PARALLEL 90;
2. File Count vs. Block Count

由于 NameNode 的內(nèi)存中要保存文件的 metadata,所以大文件要優(yōu)于小文件杂拨。

3. Java Task Memory Management

map/reduce task 默認(rèn)會(huì)分配 2G 內(nèi)存专普。對(duì)于 Java job,2G 內(nèi)存會(huì)被拆分為 1G heap 和 0.5 ~ 1G non-heap扳躬。然而這對(duì)于某些 job 來(lái)說(shuō)并不是足夠的脆诉。下面是一些能夠減少內(nèi)存使用的技巧。

UseCompressedOops

32 系統(tǒng)的 JVM 使用 32bit 的無(wú)符號(hào)整型來(lái)定位內(nèi)存區(qū)域贷币,最大可表示的堆空間為 2^32 击胜,也就是 4G。64 位的 JVM 使用 64bit 的無(wú)符號(hào) long 型來(lái)表示內(nèi)存位置役纹,最大可以表示的內(nèi)存堆大小為 2^64偶摔。使用 long 代替 int,導(dǎo)致需要的內(nèi)存增大促脉。最新的 JVM 支持在使用時(shí)添加選項(xiàng) CompressedOops辰斋,在一些情況下使用 32bit 的空間代替 64bit 空間來(lái)保存內(nèi)存定位信息,這樣也可以在一定程度上減少內(nèi)存的使用瘸味。添加設(shè)置

Hadoop-inject.mapreduce.(map|reduce).java.opts=-Xmx1G -XX:+UseCompressedOops
UseCompressedStrings

這樣會(huì)將 String 類(lèi)型轉(zhuǎn)換為壓縮的 byte[] 型宫仗。如果 String 類(lèi)型變量使用的比較多,這樣會(huì)節(jié)省非常多的內(nèi)存旁仿。設(shè)置:添加 -XX:+UseCompressedStrings 到配置項(xiàng) mapreduce.(map|reduce).java.opts藕夫。

4. Mapper time too short

出現(xiàn)這類(lèi)警告,有可能存在以下三種情況:

  • A large number of mappers
  • Short mapper avg runtime
  • Small file size

5. 常見(jiàn)參數(shù)的優(yōu)化

1. Mapper 相關(guān)

mapreduce.input.fileinputformat.split.minsize

map 輸入的文件塊的大小的最小值枯冈。增加這個(gè)參數(shù)的值就可以減少 mapper 的數(shù)量毅贮。

mapreduce.input.fileinputformat.split.maxsize

當(dāng)使用 CombineFileInputFormat 或者 MultiFileInputFormat 時(shí),map 輸入的文件塊的大小的最大值尘奏。相應(yīng)的滩褥,縮小這個(gè)參數(shù)值就可以增加 mapper 的數(shù)量。值得注意的是炫加,如果使用 CombineFileInputFormat 時(shí)瑰煎,不設(shè)置最大的 split 大小,那么你的 job 會(huì)只使用一個(gè) mapper琢感。

2. Reducer 相關(guān)

mapreduce.job.reduces

對(duì)工作流性能影響最大的一個(gè)因素就是 reducer 的數(shù)量丢间。reducer 數(shù)量過(guò)少導(dǎo)致 task 執(zhí)行時(shí)間過(guò)長(zhǎng);數(shù)量過(guò)多同樣會(huì)導(dǎo)致問(wèn)題驹针。reducer 數(shù)量調(diào)整不是一個(gè)簡(jiǎn)單的事兒烘挫,下面是一些建議:

  • reducer 數(shù)量多意味著 NameNode 上更多的文件。過(guò)多的文件可能造成 NameNode 掛掉。如果 reduce 的輸出小于 512M 時(shí)饮六,盡量使用較少的 reducer其垄。
  • reducer 數(shù)量多意味著每個(gè) reducer 處理數(shù)據(jù)的時(shí)間更短。如果使用的reducer數(shù)量過(guò)少卤橄,每個(gè)reducer作業(yè)消耗的時(shí)間會(huì)顯著增加绿满。reducer運(yùn)行速度變快,就能處理更多的任務(wù)窟扑。
mapreduce.job.reduce.slowstart.completedmaps

這個(gè)參數(shù)是 reducer 開(kāi)始執(zhí)行前喇颁,至少有多少比例的 mapper 必須執(zhí)行結(jié)束,默認(rèn)值是 80%嚎货。但是 對(duì)于很多特定的 job橘霎,80% 不是最好的。下面是一些參數(shù)調(diào)整的參考殖属。

  • 每個(gè) reducer 接收數(shù)據(jù)多少
  • 剩下的 map 需要花費(fèi)的時(shí)間

如果 map 的輸出數(shù)據(jù)量比較大姐叁,一般建議 reducer 提前開(kāi)始執(zhí)行以處理數(shù)據(jù);反之 reducer 可以稍晚執(zhí)行洗显。一個(gè)估算的方法是先計(jì)算 shuffle 時(shí)間:所有的 map 執(zhí)行完到第一個(gè) reduce 開(kāi)始執(zhí)行中間的時(shí)間外潜,然后 reducers 比較理想的執(zhí)行時(shí)間是最后一個(gè) map 結(jié)束時(shí)間減去 shuffle 時(shí)間。

3. Compression

mapreduce.map.output.compress

將該參數(shù)設(shè)置為 True 可以將 map 輸出的數(shù)據(jù)進(jìn)行壓縮挠唆,從而可以減少節(jié)點(diǎn)之間的數(shù)據(jù)傳輸量处窥。然而需要注意的是壓縮和解壓的時(shí)間要小于數(shù)據(jù)在節(jié)點(diǎn)之間的傳輸時(shí)間。如果 map 輸出數(shù)據(jù)量很大玄组,或者屬于比較容易壓縮的類(lèi)型碧库,這個(gè)參數(shù)設(shè)置為 True 則很有必要;反之設(shè)置為 False 則可以減少 CPU 的工作量巧勤。

4. Memory

mapreduce.(map|reduce).memory.mb

默認(rèn) 2G,1G heap + 0.5~1G non-heap弄匕。一些情況下這個(gè)內(nèi)存大小是不夠用的颅悉。

5. Advanced

controlling the number of spills / io.sort.record.percent
mapreduce.(map|reduce).speculative

將這個(gè)參數(shù)設(shè)置為 false 可以避免相同的 map 或者 reduce task 并發(fā)執(zhí)行。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末迁匠,一起剝皮案震驚了整個(gè)濱河市剩瓶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌城丧,老刑警劉巖延曙,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異亡哄,居然都是意外死亡枝缔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)愿卸,“玉大人灵临,你說(shuō)我怎么就攤上這事∨枯” “怎么了儒溉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)发钝。 經(jīng)常有香客問(wèn)我顿涣,道長(zhǎng),這世上最難降的妖魔是什么酝豪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任涛碑,我火速辦了婚禮,結(jié)果婚禮上寓调,老公的妹妹穿的比我還像新娘锌唾。我一直安慰自己,他們只是感情好夺英,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布晌涕。 她就那樣靜靜地躺著,像睡著了一般痛悯。 火紅的嫁衣襯著肌膚如雪余黎。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天载萌,我揣著相機(jī)與錄音惧财,去河邊找鬼。 笑死扭仁,一個(gè)胖子當(dāng)著我的面吹牛垮衷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乖坠,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼搀突,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了熊泵?” 一聲冷哼從身側(cè)響起仰迁,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顽分,沒(méi)想到半個(gè)月后徐许,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卒蘸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年雌隅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡澄步,死狀恐怖冰蘑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情村缸,我是刑警寧澤祠肥,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站梯皿,受9級(jí)特大地震影響仇箱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜东羹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一剂桥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧属提,春花似錦权逗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至恕酸,卻和暖如春堪滨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕊温。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工袱箱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人义矛。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓发笔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凉翻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子筐咧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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