開放 介面 餓了麼 餓了麼元資料管理實踐之路

2021-10-16 10:14:26 字數 3199 閱讀 5966

多種執行、儲存引擎,分鐘、小時、天級的任務排程,怎樣梳理資料的時間線變化?

任務、表、列、指標等資料,如何進行檢索、復用、清理、熱度top計算?

怎樣對錶、列、指標等進行許可權控制,任務治理以及上下游依賴影響分析?

元資料打通資料來源、資料倉儲、資料應用,記錄了資料從產生到消費的完整鏈路。元資料報含靜態的表、列、分割槽資訊(也就是metastore);動態的任務、表依賴對映關係;資料倉儲的模型定義、資料生命週期;以及etl任務排程資訊、輸入輸出等

元資料是資料管理、資料內容、資料應用的基礎。例如可以利用元資料構建任務、表、列、使用者之間的資料圖譜;構建任務dag依賴關係,編排任務執行序列;構建任務畫像,進行任務質量治理;資料分析時,使用資料圖譜進行字典檢索;根據表名檢視表詳情,以及每張表的**、去向,每個欄位的加工邏輯;提供個人或bu的資產管理、計算資源消耗概覽等

wherehows是linkedin開源的元資料治理方案。azkaban排程器抓取job執行日誌,也就是hadoop的jobhistory,log parser後儲存db,並提供rest查詢。wherehows太重,需要部署azkaban等排程器,以及只支援表血緣,功能侷限

atlas是apache開源的元資料治理方案。hook執行中採集資料(比如hivehook),傳送kafka,消費kafka資料,生成relation關係儲存圖資料庫titan,並提供rest介面查詢功能,支援表血緣,列級支援不完善

餓了麼的sql資料,以執行中採集為主+儲存前submit為輔。因為任務的sql可能包含一些時間變數,比如dt、hour,以及任務可能是天排程、小時排程。執行中採集sql實時性更高,也更容易處理

計算引擎實現相關的監聽介面,比如hive實現executewithhookcontext介面;spark實現sparklistener介面;presto實現eventlistener介面。將計算引擎相關的上下文context、元資料metadata、統計statistics等資訊存入db

解析sql的方案,以hive為例。先定義詞法規則和語法規則檔案,然後使用antlr實現sql的詞法和語法解析,生成ast語法樹,遍歷ast語法樹完成後續操作

但對於select *、ctas等操作,直接遍歷ast,不去獲取schema資訊來檢查表名、列名,就無法判定sql的正確性,導致資料汙染

綜上所述,餓了麼的sql解析方案,直接參考hive的底層原始碼實現。上面的是個簡單示例,先經過semanticanalyze***ctory類進行語法分析,再根據schema生成執行計畫queryplan。關於表、列的血緣,可以從lineageinfo、lineagelogger類中獲得解決方案

當然,你需要針對部分型別sql設定hiveconf,比如「開啟動態分割槽非嚴格模式」。對於ctas型別,需要設定context。udf函式需要修改部分hive原始碼,避免udf registry檢查

餓了麼解析血緣的sql支援的操作有:query(包含selectinsert intoinsert overwrite)、createtable、createtableasselect、droptable、createview、alterview。基本覆蓋餓了麼生產環境99%+的sql語法

create table temp.lineage_test as select coalesce(name, count(id)) lineage_name from default.dual group by id, name
舉個栗子,根據上面的sql,分別產生表、列血緣結構。input是表、列輸入值,output是表、列輸出值,operation代表操作型別。比如表a+b通過insert,生成表c,則延展成a insert c; b insert c

列式也一樣

input: name, operation: coalesce(name, count(id)), output: lineage_name;

input: id, operation: coalesce(name, count(id)), output: lineage_name

表血緣結構

列血緣結構

有了input、operation、output關係,將input、output儲存為圖節點,operation儲存為圖邊。圖資料庫選用gremlin+neo4j。gremlin是圖語言,儲存實現方案比較多,cypher查詢不太直觀,且只能neo4j使用。社群版neo4j只能單機跑,我們正在測試orientdb

下面是餓了麼在元資料應用上的部分場景:

靜態的hive metastore表,比如dbs、tbls、sds、columns_v2、table_params、partitions,儲存表、字段、分割槽、owner等基礎資訊,便於表、欄位的資訊檢索功能

提供動態的表依賴血緣關係查詢。節點是表基礎資訊,節點之間的邊是operation資訊,同時附加任務執行id、執行時間等屬性。列血緣結構展示等同表血緣結構

根據sql的input、output構建表的依賴關係,進一步構建任務的dag依賴結構。可以對任務進行dag排程,重新編排任務執行序列

開發餓了麼介面

餓了麼商家開放平台 呼叫介面事例 include mysqlidb.php require vendor autoload.php 引入餓了麼sdk use elemeopenapi config config use elemeopenapi api productservice 例項化乙個配置類...

餓了麼註冊餓了團 餓了麼拼團商標

程式設計yi vgdbz客棧 www.cppcns.com 6月16日 訊息 企查查app顯示,餓了麼運營主體公司拉扎斯網路科技 上海 有程式設計客棧限公司於6月8日申請註冊餓了團商標。餓了麼申請的餓了團商程式設計客棧標國際分類包含35類 www.cppcns.com廣告銷售 43類 餐飲住宿等,目...

開放 介面 餓了麼 餓了麼讓騎手更便捷安全地送餐

外賣給現代人帶來了生活的便利,客戶的滿意度與奔波的騎手們能否準時到達息息相關。這是乙個需要與時間賽跑的工作,騎手在途中會面臨各種問題,而騎手們普遍反饋,外賣職業有7件頭疼事 商戶出餐慢 聯絡不上使用者 使用者調整位址 道路封路 社群不讓進 電梯擁堵 雪天路面結冰等異常配送場景。餓了麼提出將通過調整規...