阿里大數據管理篇大總結

第 1 章 元數據

1.1 元數據概述
1.1.1 元數據定義

元數據打通了源數據、數據倉庫、數據應用,記錄了數據從產生到消費的全過程。元數據主要記錄數據倉庫中模型的定義、各層級間的映射關係、監控數據倉庫的數據狀態及 ETL 的任務運行狀態。

元數據按用途的不同分爲兩類:技術元數據( Technical Metadata) 和業務元數據(Business Metadata )

1.1.2 元數據價值

元數據有重要的應用價值,是數據管理、數據內容、數據應用的基礎;

1.1.3 統一元數據體系建設

元數據的質量直接影響到數據管理的準確性,如何把元數據建設好將起到至關重要的作用。元數據建設的目標是打通數據接入到加工,再到數據消費整個鏈路,規範元數據體系與模型,提供統一的元數據服務出口,保障元數據產出的穩定性和質量。

1.2 元數據應用

價值:數據驅動決策,數字化運營

1.2.1 Data Profile

核心思路:爲紛繁複雜的數據建立一個脈絡清晰的血緣圖譜。通過圖計算、標籤傳播算法等技術,系統化、自動化地對計算與存儲平臺上的數 據進行打標、整理、歸檔,實際承擔的是爲元數據 “畫像” 的任務,開發了四類標籤:

1.2.2 元數據門戶
1.2.3 應用鏈路分析

通過應用鏈路分析,產出表級血緣、字段血緣和表的應用血緣。其中表級血緣主要有兩種計算方式:

常見的應用鏈路分析應用主要有影響分析、重要性分析、下線分析、鏈路分析、尋根溯源、故障排查等

1.2.4 數據建模

通過元數據驅動的數據倉庫模型建設,可以在一定程度上解決此問題,提高數據倉庫建模的數據化指導,提升建模效率。

星形模型設計中,使用元數據信息有:

1.2.5 驅動 ETL 開發

第 2 章 計算管理

2.1 系統優化
2.1.1 HBO

(History-Based Optimizer,基於歷史的優化器)

在任務穩定的情況下,可以考慮基於任務的歷史執行情況進行資源評估,即採用 HBO

針對 “大促” 這類數據量暴漲的場景, HBO 也增加了根據數據量動態調整 Instance 數的功能,主要依據 Map 的數據量增長情況進行調整。

2.1.2 CBO

基於代價的優化器,根據收集的統 計信息來計算每種執行方式的代價,進而選擇最優的執行方式。

引人了重新排序 Join(JoinReorder)和自動 MapJoin(AutoMapJoin )優化規則等,同時基於 Volcano 模型的優 化器會盡最大的搜索寬度來獲取最優計劃

可以設置規則白名單(使用哪些優化規則)、黑名單(關閉哪些優化規則)

Optimizer 會提供謂詞下推( PredicatePushDown )優化,主要目的是儘量早地進行謂詞過濾,以減少後續操作的數據量,提高性能。但需要注意的是:

2.2 任務優化
2.2.1 Map 傾斜

在 Map 端讀數據時,由於讀人數據的文件大小分佈不均勻,因此 會導致有些 MapInstance 讀取並且處理的數據特別多,而有些 Map Instance 處理的數據特別少,造成 Map 端長尾;

上游表文件的大小特別不均勻,並且小文件特別多,導致當前表 Map 端讀取的數據分佈不均勻,引起長尾,手段有二:

Map 端長尾的根本原因是由於讀入的文件塊的數據分佈不均勻,再 加上 UDF 函數性能、Join、聚合操作等,導致讀人數據量大的 Map lnstance 耗時較長。在開發過程中如果遇到 Map 端長尾的情況,首先考 慮如何讓 Map Instance 讀取的數據量足夠均勻,然後判斷是哪些操作導致 Map Instance 比較慢,最後考慮這些操作是否必須在 Map 端完成, 在其他階段是否會做得更好。

2.2.2 Join 傾斜

因爲數據傾斜導致長尾的現象比較普遍,嚴重影響任務的執行時 間,尤其是在 “雙 l l” 等大型活動期間,長尾程度比平時更嚴重。比 如某些大型店鋪的 PV 遠遠超過一般店鋪的 PV,當用瀏覽日誌數據和 賣家維表關聯時,會按照賣家 ID 進行分發

2.2.3 Reduce 傾斜

Reduce 端產生長尾的主要原因就是 key 的數據分佈不均勻

第 3 章 存儲和成本管理

3.1 數據壓縮

針對 3 份副本的壓縮方案:archive 壓縮方法,存儲比約爲 1:3 提高到 1:1.5

3.2 數據重分佈
3.3 存儲治理項優化

3.4 生命週期管理

生命週期管理的根本目的就是用最少的存儲成本來滿足最大的業務需求,使數據價值最大化。

3.4.1 生命週期管理策略
  1. 週期性刪除策略

  2. 徹底刪除策略

  3. 永久保留策略

  4. 極限存儲策略

  5. 冷數據管理策略

  6. 增量表 merge 全量表策略:交易增量數據,使用 訂單創建日期或者訂單結束日期作爲分區,同時將未完結訂單放在最大 分區中,對於存儲,一個訂單在表裏只保留一份;對於用戶使用,通過 分區條件就能查詢某一段時間的數據。

3.4.2 通用的生命週期管理矩陣
  1. 歷史數據等級劃分

3.5 數據成本計量

將數據成本定義爲存儲成本、計算成本和掃描成本三個部分,能夠很好地體現出數據在加工鏈路中的 上下游依賴關係

3.6 數據使用計費

第 4 章 數據質量

4.1 數據質量保障原則

如何評估數據質量的好壞,業界有不同的標準,阿里主要從 4 個方面進行評估:完整性、準確性、一致性、及時性;

1. 完整性

數據完整性是數據最基礎的保障;

2. 準確性

3. 一致性

4. 及時性

4.2 數據質量方法概述

阿里的數據質量建設體系:

  1. 消費場景知曉
  1. 數據生產加工各個環節卡點校驗

主要對兩部分的數據卡點校驗:在線系統和離線系統數據生產加工各個環節的卡點校驗;

  1. 風險點監控

風險點監控:主要針對在數據運行過程中可能出現的數據質量和時效等問題進行監控;

主要對兩個方面進行風險點監控:

  1. 質量衡量
  1. 質量配套工具
4.2.1 消費場景知曉
  1. 數據資產等級定義

背景:針對阿里龐大的數據倉庫,數據的規模已經達到 EB 級,對於這麼大的數據量,如果一概而論勢必會造成精力無法集中、保障無法精確;

五個數據等級,不同性質的重要性一次降低:

即,數據一旦出錯,將會引起重大資產損失,面臨重大受益損失,造成重大公共風險;

即,數據直接或間接用於集團業務和效果的評估、重要平臺的運維、對外數據產品的透露、影響用戶在阿里系網站的行爲等;

即,數據直接或間接用於內部一般數據產品或者運營 / 產品報告,如果出現問題會給事業部或業務線造成影響,或者造成工作效率損失;

即,數據主要用於小二的日常數據分析,出現問題幾乎不會帶來影響或者影響很小;

不能明確說出數據的應用場景,則標註爲未知;

  1. 對於不同的數據資產等級,使用英文 Asset 進行標記:

毀滅性質:A1 等級;
全局性質:A2 等級;
局部性質:A3 等級;
一般性質:A4 等級;
未知性質:A5 等級;
重要程度:A1 > A2 > A3 > A4 > A5;

如果一份數據出現在多個應用場景中,遵循就高原則;

  1. 數據資產等級落地方法

需要解決的問題:對於如此龐大的數據量,如何給每一份數據都打上一個等級標籤?

數據資產等級落地的方法 / 步驟:

數據流轉過程

數據從業務系統到數據倉庫再到數據產品,都是以表的形式體現的,流轉過程如下圖:

同步到數據倉庫(對應到阿里就是 MaxCompute 平臺)中的都是業務數據庫的原始表,主要用於承載業務需求,往往不能直接用於數據產品;(一般是 ODS 層的全量數據)

在數據產品中使用的都是經過數據倉庫加工後的產出表;(根據需求 / 報表進行加工)

  1. 劃分數據資產等級
  2. 根據數據流轉過程,建立元數據,記錄數據表與數據產品或者應用的對應關係;
  3. 根據影響程度,給數據產品和應用劃分數據資產等級;
  4. 打標:依託元數據的上下游血緣,將整個消費鏈路打上某一類數據資產標籤(也就是對消費鏈路數據打標);
    鏈路:指數據從業務系統到數據產品的流轉過程;

總結:

通過上述步驟,就完成了數據資產等級的確認,給不同的數據定義了不同的重要程度,需要用到元數據的支撐;

4.2.2 數據加工過程卡點校驗

目的:保障數據準確性、保障與離線數據的一致性;

  1. 在線業務系統卡點校驗(數據產出環節)
  1. 工具

發佈平臺:發送重大變更的通知;
通知內容:變更原因、變更邏輯、變更測試報告、變更時間等;
數據庫平臺:發送庫表變更通知;
通知內容:變更原因、變更邏輯、變更測試報告、變更時間等;

  1. 發佈平臺

功能:在業務進行重大變更時,訂閱發佈過程,然後給到離線開發人員,使其知曉此次變更的內容;
注:業務系統繁忙,日常發佈變更數不勝數,並不是每一次業務變更都要只會離線業務,那樣會造成不必要的浪費,而且影響在線業務迭代的效率;

訂閱內容:針對全集團重要的高等級數據資產,整理出哪些變化會影響數據的加工,則訂閱這些內容;
如,財報,這個自然是 A1 等級的資產,如果業務系統的改造會影響財報的計算,如約定好的計算口徑被業務系統發佈變更修改了,那麼務必要告知離線業務,作爲離線開發人員也必須主動關注這類發佈變更信息;

卡點:發佈平臺集成了通知功能,針對重要的場景發佈會進行卡點,確認通知後才能完成發佈;

  1. 數據庫表的變化感知

無論是隨着業務發展而做的數據庫擴容還是表的 DDL 變化,都需要通知到離線開發人員;

DDL((Data Definition Language):數據庫模式定義語言;用於描述數據庫中要存儲的現實世界實體的語言。

DDL 數據庫模式定義語言是 SQL 語言(結構化查詢語言)的組成部分;

例:CREATE DATABASE(創建數據庫)、CREATE TABLE(創建表);

DML(Data Manipulation Language):數據操縱語言命令;使用戶能夠查詢數據庫以及操作已有數據庫中的數據。

例:insert、delete、update、select 等都是 DML ;

背景 / 問題:數據倉庫在進行數據抽取時,採用的是 DataX 工具,可能限制了某個數據庫表,如果發生數據庫擴容或者遷移,DataX 工具是感知不到的,結果可能會導致數據抽取錯漏,影響一系列的下游應用;

解決方法:通過數據庫平臺發送庫表變更通知;

  1. 開發人員

數據資產等級的上下游打通,同樣也要將這個過程給到在線開發人員,使其知曉哪些是重要的核心數據資產,哪些暫時還只是作爲內部分析數據使用;

要提高在線開發人員的意識,通過培訓,將離線數據的訴求、離線數據的加工過程、數據產品的應用方式,告訴在線業務開發人員,使其意識到數據的重要性,瞭解數據的價值,同時也告知出錯後果,使在線開發人員在完成業務目標時,也要注重數據的目標,做到業務端和數據端一致;

  1. 離線系統卡點校驗(數據離線加工環節)

背景 / 問題:數據從在線業務系統到數據倉庫再到數據產品的過程中,需要在數據倉庫這一層完成數據的清洗、加工;正是有了數據的加工,纔有了數據倉庫模型和數據倉庫代碼的建設;如何保障數據加工過程中的質量,是離線數據倉庫保障數據質量的一個重要環節;

目的:保障數據加工過程中的質量(主要指數據的準確性);

在兩個環節進行卡點校驗:

  1. 代碼提交時的卡點校驗

背景 / 原因:數據研發人員素質不同,代碼能力也有差異,代碼質量難以得到高效保障;

解決方法:開發代碼掃描工具 SQLSCAN,針對每一次提交上線的代碼進行掃描,將風險點提取出來;

卡點方式:使用代碼掃描工具 SQLSCAN,掃描代碼提取風險點;

  1. 任務發佈上線時的卡點校驗

爲了保障線上數據的準確性,每一次變更都需要線下完成測試後在發佈到線上環境中,線上測試通過後纔算發佈成功;

卡點方式:分別對任務(指變更的業務)發佈上線前和上線後進行測試;

  1. 發佈上線前的測試:主要包括 Code Review 和迴歸測試;

迴歸測試的目的:
保障新邏輯的正確;
保證不影響非此次變更的邏輯;

注:對於資產等級較高的任務變更發佈,採用強阻塞的形式,必須通過在彼岸完成迴歸測試之後才允許發佈;

  1. 發佈上線後的測試:在線上做 Dry Run 測試或者真是環境運行測試;

不執行代碼,僅運行執行計劃,避免線上和線下環境不一致導致語法錯誤;

使用真實數據進行測試;

通知內容:變更原因、變更邏輯、變更測試報告、變更時間等;
過程:
使用通知中心,將變更原因、變更邏輯、變更測試報告、變更時間等自動通知下游,下游對此次變更沒有異議後,再按照約定時間執行發佈變更,將變更對下游的影響降低至最低;

4.2.3 風險點監控

風險點監控:主要指針對數據在日常運行過程中容易出現的風險進行監控,並設置報警機制;
主要包括在線數據和離線數據運行風險點監控;

目的:保障數據的準確性;

1、 在線數據風險點監控

配置告警:針對不同的規則配置不同的告警形式;

注:由於 BCP 的配置和運行成本較高,主要根據數據資產等級進行監控;

離線數據風險點監控主要包括對數據準確性和數據產出的及時性進行監控;

數據準確性是數據質量的關鍵,因此數據準確成爲數據質量的重中之重,是所有離線系統加工時的第一保障要素;

方法:通過 DQC 進行數據準確性監控;

DQC(Data Quality Center,數據質量中心):主要關注數據質量,通過配置數據質量校驗規則,自動在數據處理任務過程中進行數據質量方面的監控;

注:監控數據質量並報警,其本身不對數據產出進行處理,需要報警接收人判斷並決定如何處理;

監控方式:通過配置數據質量檢驗規則,自動在數據處理任務過程中進行監控;

監控規則:

強規則:會阻斷任務的執行;

將任務置爲失敗狀態,其下游任務將不會被執行;

弱規則:只告警而不會阻斷任務的執行;

常見的 DQC 監控規則:主鍵監控、表數據量及波動監控、重要字段的非空監控、重要枚舉字段的離散值監控、指標值波動監控、業務規則監控等;

規則配置:依賴數據資產等級確定監控規則;

DQC 檢查其實也是運行 SQL 任務,只是這個任務是嵌套在主任務中的,一旦檢查點太多自然就會影響整體的性能;因此還是依賴數據資產等級來確定規則的配置情況;

注:不同的業務會有業務規則的約束,這些規則來源於數據產品或者說消費的業務需求,有消費節點進行配置,然後上推到離線系統的起點進行監控,做到規則影響最小化;

在確保數據準確性的基礎上,需要進一步讓數據能夠及時的提供服務;否則數據的價值將大幅度降低,甚至沒有價值;

阿里的大部分離線任務:

一般以天爲時間間隔,稱爲 “天任務”,對於天任務,數據產品或者數據決策報表一般都要求在每天 9:00 甚至更早的時間產出;

爲了確保前一天的數據完整,天任務是從零點開始運行的,由於計算加工的任務都是在夜裏運行的,而要確保每天的數據能夠按時產出,需要進行一系列的報警和優先級設置,使得重要的任務優先且正確的產出;

重要的任務:資產等級較高的業務;

對於 Map 任務和 Reduce 任務,調度是一個樹形結構(RelNode 樹),當配置了葉子節點(RelNode 節點)的優先級後,這個優先級會傳遞到所有上游節點,所以優先級的設置都是給到葉子節點,而葉子節點往往就是服務業務的消費節點;

設置優先級:首先確定業務的資產等級,等級高的業務所對應的消費節點自然配置高優先級,一般業務則對應低優先級,確保高等級業務準時產出;

任務報警和優先級類似,也是通過葉子節點傳遞;

任務在運行過程中難免會出錯,因此要確保任務能夠高效、平穩的執行,需要有一個監控報警系統,對於高優先級的任務,一旦發現任務出錯或者可能出現產出延遲,就要報警給到任務和業務 Owner;

摩薩德:阿里自主開發的監控報警系統;

摩薩德:離線任務的監控報警系統;是數據運維不可或缺的保障工具;

根據離線任務的運行情況實時決策是否告警、何時告警、告警方式、告警給誰等;

兩個主要功能:強保障監控、自定義告警;

強保障監控

強保障監控是摩薩德的核心功能,是僅僅圍繞運維目標即業務保障而設計的,只要在業務的預警時間受到威脅,摩薩德就一定會告警出來給到相關人員;

強保障監控主要包括:

監控範圍:設置強保障業務的任務及其上游所有的任務都會被監控;

監控的異常:任務出錯、任務變慢、預警業務延遲;

告警對象:默認是任務 Owner,也可以設置值班表到某一個人;

何時告警:根據業務設置的預警時間判斷何時告警;

業務延遲預警和出錯報警,都是根據 “產出預警時間 “ 來判斷的;

產出預警時間:摩薩德根據當前業務上所有任務最近 7 天運行的平均時間來推算當前業務所用的大概時間,來作爲產出預警時間;

告警方式:根據業務的重要緊急程度,支持電話、短信、旺旺、郵件告警;

例:生意參謀業務(預警業務延遲)

資產等級及需求:定義的資產等級是 A2,要求早上 9:00 產出數據給到上架;

設置:給生意參謀業務定義一個強保障監控,業務產出時間是 9:00,業務預警時間是 7:00;

這裏的預警時間是指,一旦摩薩德監控到當前業務的產出時間超出預警時間時,就會打電話給值班人員進行預警;

如,摩薩德推測生意參謀的產出時間要到 7:30,那麼電話告警就出來了,由值班人員來判斷如何加速產出;產出時間推算(預警判斷,也就是產出延遲判斷):摩薩德是根據當前業務上所有任務最近 7 天運行的平均時間來推算的;雖然有誤判的可能性,但是總體還是非常準確的,可以接受;

自定義監控是摩薩德比較輕量級的監控功能,用戶可以根據自己的需求進行配置,主要包括:

  1. 出錯告警:可根據應用、業務、任務三個監控對象進行出錯告警配置,監控對象出錯即告警給到人 / Owner / 值班表;

  2. 完成告警:可根據應用、業務、任務三個監控對象進行完成情況告警配置,監控對象完成即告警給到人 / Owner / 值班表;

  3. 未完成告警:可根據應用、業務、任務三個監控對象進行未完成情況告警配置,監控對象未完成即告警給到人 / Owner / 值班表;

  4. 週期性告警:針對某個週期的小時任務,如果在某個時間未完成,即告警給到人 / Owner / 值班表;

  5. 超時告警:根據任務運行時長進行超時告警配置,任務運行超過指定時間即告警給到人 / Owner / 值班表;

針對業務的運行情況,摩薩德會提供一天關鍵路徑,即完成業務的最慢任務鏈路圖;因爲每個業務上游可能有成千上萬個任務,所以這條關鍵路徑對於業務鏈路優化來說非常重要;

4.2.4 質量衡量

保障數據倉庫的數據質量,有很多方案,評價這些方案的優劣,需要一套度量指標:

一般數據倉庫的作業任務都是在夜晚進行,一旦出現問題就需要值班人員起夜進行處理;

起夜率:用每個月的起夜次數,作爲衡量數據質量建設完善度的一個指標;

數據質量事件:記錄每一次數據質量的問題;

針對每一個數據質量問題,都記錄一個數據質量事件:

功能:既用來衡量數據本身的質量,也用來衡量數據鏈路上下游的質量,是數據質量的一個重要度量指標;

  1. 用來跟進數據質量問題的處理過程;

  2. 用來歸納分析數據質量原因;

  3. 根據數據質量原因來查缺補漏,既要找到數據出現問題的原因,也要針對類似問題給出後續預防方案;

對於嚴重的數據質量事件,將升級爲故障;

故障:指問題造成的影響比較嚴重,已經給公司帶來資產損失或者公關風險;

背景:數據從採集到最後的消費,整個鏈路要經過幾十個系統,任何一個環節出現問題,都會影響數據的產出,因此需要一種機制,能夠將各團隊綁在一起,目標一致,形成合力,故障體系在這個背景下應運而生;

故障體系中,一旦出現故障,就會通過故障體系,要求相關團隊在第一時間跟進解決問題,消除影響;

  1. 故障定義

首先識別出重要的業務數據,並註冊到系統中,填寫相關的業務情況,如技術負責人、業務負責人、數據應用場景、延遲或錯誤帶來的影響、是否會發生資產損失等,完成後,會將這部分數據的任務掛到平臺基線上,一旦延遲或錯誤,即自動生成故障單,形成故障;

  1. 故障等級

故障發生後,會根據一定的標準判斷故障等級,如故障時長、客戶投訴量、資金損失等,將故障按 P1~ P4 定級,各團隊會有故障分的概念,到年底會根據故障分情況來判斷本年度的運維效果;

  1. 故障處理

故障發生後,需要快速的識別故障原因,並迅速解決,消除影響;

在處理故障的過程中,會盡量將故障的處理進度通知到相關方,儘可能減少對業務的影響;

  1. 故障 Review

故障 Review:即分析故障的原因、處理過程的覆盤、形成後續解決的 Action,並且都會以文字的形式詳細記錄,對故障的責任進行歸屬,一般會責任到人;

注:對故障責任的判定,不是爲了懲罰個人,而是通過對故障的覆盤形成解決方案,避免問題再次發生;

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/XbLewTlzY7k709QP2Z2neg