阿里雲 MaxCompute 行業級應用(優酷、鬥魚)及 MaxCompute SQL 調優

一、Maxcompute在優酷的應用

1.1 優酷業務的特點

在這裏插入圖片描述

1.2 Maxcompute 簡單易用

在這裏插入圖片描述

1.3 Maxcompute 生態完善

在這裏插入圖片描述

1.4 Maxcompute 性能強悍

在這裏插入圖片描述

1.5 MaxCompute 資源彈性

在這裏插入圖片描述

1.6 大數據整體方案

在這裏插入圖片描述

1.7 數據分層

在這裏插入圖片描述
數據中臺,從ODS層 ——> CDM層 ——> ADS層

1.8 業務賦能

在這裏插入圖片描述

1.9 計算優化

在這裏插入圖片描述

1.10 存儲優化

在這裏插入圖片描述

二、鬥魚 MaxCompute + Hadoop 混搭大數據架構實踐

2.1 自建集羣的發展瓶頸

在這裏插入圖片描述

2.2 大數據上雲的挑戰

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
Hive 窗口函數 ,像 rank() ,MaxCompute 不支持,需要確定哪些業務可以遷到雲上,哪些不可以。

在這裏插入圖片描述
在這裏插入圖片描述

2.3 混合雲模式帶來的變化

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

三、MaxCompute SQL 優化

在這裏插入圖片描述

3.1 SQL 成本計算

  • 計算成本 <- 讀取IO數據量 * SQL複雜度
  • SQL 複雜度:Join / Group By / Order By / Distinct / window func / Insert into

因此,優化SQL的過程,實際上就是要儘可能減少IO讀取,儘可能減少計算資源使用,儘可能降低SQL複雜度,儘可能提升運行速度。

3.2 SQL IO 讀取優化

3.2.1 表分區優化

  • 建立分區表
Create Table t1 (...) partitioned by (pt string,region string)

分區層數不要太多

  • 分區裁剪

避免全表掃描,減少資源浪費

Case:where pt = xxx and region = xxx

分區儘量按層級順序剪裁

分區值儘量常量化,避免不可確定值,如UDF

分區值儘量避免引用列的表達式計算或者子查詢

  • 寫分區

寫入靜態分區,優化數據存儲

避免動態分區,防止小文件過多和計算長尾

3.2.2 列裁剪、條件過濾

  • 只引用有效列

避免 select * from xxx

常量代替引用列,如count© -> count(1) // c not null

  • 儘可能 pushdown 過濾條件

where a > 10 and (b > 1 or c < 1)

  • Limit N

3.2.3 源表用戶

  • 合併不同SQL,一讀多計算

讀取相同源表可合併,節省IO和計算資源

對源表統計多種指標計算或者篩選不同數據處理

避免規模過大,運行時間過長

  • Multi Insert ,動態分區,一讀多寫

同一SQL讀取相同源表,系統會優化只讀取一次

資源足夠,也可以考慮拆分SQL,讀取和計算更好並行,資源換時間

  • 子查詢合併

對於SQL中相同的子查詢也會合併成一個源

儘可能保持子查詢語句一樣,觸發合併

在這裏插入圖片描述

3.3 SQL 計算優化

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

3.4 SQL 整體優化

3.4.1 關鍵路徑優化

在這裏插入圖片描述

3.4.2 長週期指標統計優化

在這裏插入圖片描述

3.5 總結

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章