在大數據離線計算平臺上每天會有上萬個任務在執行,對cpu、內存、存儲資源由極大的消耗,那么如何降低資源使用率、提高計算效率,就涉及到計算優化的問題。從系統優化方面來講:
HBO
1)HBO 是根據任務的歷史執行情況優化資源分配
2)HBO方案提出:
① 在Hadoop中map task與reduce task的task個數分配是根據用戶提交的任務總數據量和每個map task能處理的數據量決定的。
② 這種方式是一種平均的資源分配方法,但是仔細分析每一個map、reduce任務會發現它們處理的數據量會有很大差距,大部分的任務節點僅僅處理一小部分數據,而有些reduce節點處理的數據量又太多,從而導致整個任務的執行時間被拖慢,浪費了資源。總結成一句話:小數據量任務資源浪費、大數據量任務資源不足。
③ 這些任務都是定時在是計算平臺上執行的,由此想到了利用任務歷史執行情況更合理的優化資源分配的方法
3)HBO 分配資源方法:
① 核心思想:基礎資源評估+加權資源評估
② 基礎資源評估:對于map任務的數量根據用戶提交任務的數據量和每個map任務期望執行的數據量來估算;對于reduce任務個數由map任務的輸入數據量估算或者根據近幾天map任務對reduce任務的輸出數據量的平均值進行估算。
③ 加權資源評估:通過當前任務近期執行速度與任務預期執行速度作比較,如果小于預期則等比例添加資源,估算出最終的任務數量
CBO
1)基于代價的優化器,根據收集的信息選擇代價最小的執行方式
2)CBO組成:
① Meta Manager:優化器在選擇優化策略時會使用一些元數據,如數據表元數據,分區元數據,統計信息元數據等。
② Statistics:為優化器提供準確的統計信息,進行優化策略的選擇
③ Rule Set:每一條優化規則都是特定場景下的優化點,優化器根據代價模型選擇啟用哪些規則。規則分為:
? ? + Substitute Rule:優化了一定好的規則
? ? + Explore Rule:優化后需要考慮各種因素的規則
? ? + Build Rule:優化后不能再次優化的規則
④ Volcano Planner Core:把所有信息統一處理,根據代價模型,涉及代價最小的方案
3)Volcano Planner Core:
① planner需要的數據有規則集、統計數據(每個節點元數據、RowCount值、Distinct值等)、代價模型(代價即各種資源,如IO開銷、cpu等。根據不同的操作符計算不同的代價,然后選擇代價最小的策略)
②?Planner的輸入是查詢語句經過編譯后生成的計劃樹
③ 規則匹配:Planner將計劃樹的每個節點進行注冊,注冊的同時會在規則集中匹配所有可以匹配的規則,所有與節點可以匹配到的規則加入到隊列中
④ 規則應用:從隊列中pop出一個匹配的規則進行優化,優化成功產生新的節點,重復之前的注冊和匹配過程。Planner會對隊列中所有規則進行優化,包括新產生的節點的規則
⑤ 代價計算:發生在產生的新節點注冊階段,計算規則如下:
? ? + 如果代價不存在或者子節點的代價還沒計算,則忽略
? ? + 如果有代價,則將本身的代價和子節點的代價相加,若小于目前的最優策略,則認為當前節點是最優的。還會對其父節點的代價進行迭代計算,進而估算整條鏈路的代價