
在大數(shù)據(jù)離線計(jì)算平臺(tái)上每天會(huì)有上萬(wàn)個(gè)任務(wù)在執(zhí)行,對(duì)cpu、內(nèi)存、存儲(chǔ)資源由極大的消耗,那么如何降低資源使用率、提高計(jì)算效率,就涉及到計(jì)算優(yōu)化的問(wèn)題。從系統(tǒng)優(yōu)化方面來(lái)講:
HBO
1)HBO 是根據(jù)任務(wù)的歷史執(zhí)行情況優(yōu)化資源分配
2)HBO方案提出:
① 在Hadoop中map task與reduce task的task個(gè)數(shù)分配是根據(jù)用戶提交的任務(wù)總數(shù)據(jù)量和每個(gè)map task能處理的數(shù)據(jù)量決定的。
② 這種方式是一種平均的資源分配方法,但是仔細(xì)分析每一個(gè)map、reduce任務(wù)會(huì)發(fā)現(xiàn)它們處理的數(shù)據(jù)量會(huì)有很大差距,大部分的任務(wù)節(jié)點(diǎn)僅僅處理一小部分?jǐn)?shù)據(jù),而有些reduce節(jié)點(diǎn)處理的數(shù)據(jù)量又太多,從而導(dǎo)致整個(gè)任務(wù)的執(zhí)行時(shí)間被拖慢,浪費(fèi)了資源??偨Y(jié)成一句話:小數(shù)據(jù)量任務(wù)資源浪費(fèi)、大數(shù)據(jù)量任務(wù)資源不足。
③ 這些任務(wù)都是定時(shí)在是計(jì)算平臺(tái)上執(zhí)行的,由此想到了利用任務(wù)歷史執(zhí)行情況更合理的優(yōu)化資源分配的方法
3)HBO 分配資源方法:
① 核心思想:基礎(chǔ)資源評(píng)估+加權(quán)資源評(píng)估
② 基礎(chǔ)資源評(píng)估:對(duì)于map任務(wù)的數(shù)量根據(jù)用戶提交任務(wù)的數(shù)據(jù)量和每個(gè)map任務(wù)期望執(zhí)行的數(shù)據(jù)量來(lái)估算;對(duì)于reduce任務(wù)個(gè)數(shù)由map任務(wù)的輸入數(shù)據(jù)量估算或者根據(jù)近幾天map任務(wù)對(duì)reduce任務(wù)的輸出數(shù)據(jù)量的平均值進(jìn)行估算。
③ 加權(quán)資源評(píng)估:通過(guò)當(dāng)前任務(wù)近期執(zhí)行速度與任務(wù)預(yù)期執(zhí)行速度作比較,如果小于預(yù)期則等比例添加資源,估算出最終的任務(wù)數(shù)量
CBO
1)基于代價(jià)的優(yōu)化器,根據(jù)收集的信息選擇代價(jià)最小的執(zhí)行方式
2)CBO組成:
① Meta Manager:優(yōu)化器在選擇優(yōu)化策略時(shí)會(huì)使用一些元數(shù)據(jù),如數(shù)據(jù)表元數(shù)據(jù),分區(qū)元數(shù)據(jù),統(tǒng)計(jì)信息元數(shù)據(jù)等。
② Statistics:為優(yōu)化器提供準(zhǔn)確的統(tǒng)計(jì)信息,進(jìn)行優(yōu)化策略的選擇
③ Rule Set:每一條優(yōu)化規(guī)則都是特定場(chǎng)景下的優(yōu)化點(diǎn),優(yōu)化器根據(jù)代價(jià)模型選擇啟用哪些規(guī)則。規(guī)則分為:
? ? + Substitute Rule:優(yōu)化了一定好的規(guī)則
? ? + Explore Rule:優(yōu)化后需要考慮各種因素的規(guī)則
? ? + Build Rule:優(yōu)化后不能再次優(yōu)化的規(guī)則
④ Volcano Planner Core:把所有信息統(tǒng)一處理,根據(jù)代價(jià)模型,涉及代價(jià)最小的方案
3)Volcano Planner Core:

① planner需要的數(shù)據(jù)有規(guī)則集、統(tǒng)計(jì)數(shù)據(jù)(每個(gè)節(jié)點(diǎn)元數(shù)據(jù)、RowCount值、Distinct值等)、代價(jià)模型(代價(jià)即各種資源,如IO開(kāi)銷、cpu等。根據(jù)不同的操作符計(jì)算不同的代價(jià),然后選擇代價(jià)最小的策略)
②?Planner的輸入是查詢語(yǔ)句經(jīng)過(guò)編譯后生成的計(jì)劃樹(shù)
③ 規(guī)則匹配:Planner將計(jì)劃樹(shù)的每個(gè)節(jié)點(diǎn)進(jìn)行注冊(cè),注冊(cè)的同時(shí)會(huì)在規(guī)則集中匹配所有可以匹配的規(guī)則,所有與節(jié)點(diǎn)可以匹配到的規(guī)則加入到隊(duì)列中
④ 規(guī)則應(yīng)用:從隊(duì)列中pop出一個(gè)匹配的規(guī)則進(jìn)行優(yōu)化,優(yōu)化成功產(chǎn)生新的節(jié)點(diǎn),重復(fù)之前的注冊(cè)和匹配過(guò)程。Planner會(huì)對(duì)隊(duì)列中所有規(guī)則進(jìn)行優(yōu)化,包括新產(chǎn)生的節(jié)點(diǎn)的規(guī)則
⑤ 代價(jià)計(jì)算:發(fā)生在產(chǎn)生的新節(jié)點(diǎn)注冊(cè)階段,計(jì)算規(guī)則如下:
? ? + 如果代價(jià)不存在或者子節(jié)點(diǎn)的代價(jià)還沒(méi)計(jì)算,則忽略
? ? + 如果有代價(jià),則將本身的代價(jià)和子節(jié)點(diǎn)的代價(jià)相加,若小于目前的最優(yōu)策略,則認(rèn)為當(dāng)前節(jié)點(diǎn)是最優(yōu)的。還會(huì)對(duì)其父節(jié)點(diǎn)的代價(jià)進(jìn)行迭代計(jì)算,進(jìn)而估算整條鏈路的代價(jià)