您好,登錄后才能下訂單哦!
本文首發于 vivo互聯網技術 微信公眾號?
鏈接:https://mp.weixin.qq.com/s/npRRRDqNUHNjbybliFxOxA
作者:劉延江
近年來,隨著IT技術與大數據、機器學習、算法方向的不斷發展,越來越多的企業都意識到了數據存在的價值,將數據作為自身寶貴的資產進行管理,利用大數據和機器學習能力去挖掘、識別、利用數據資產。如果缺乏有效的數據整體架構設計或者部分能力缺失,會導致業務層難以直接利用大數據大數據,大數據和業務產生了巨大的鴻溝,這道鴻溝的出現導致企業在使用大數據的過程中出現數據不可知、需求難實現、數據難共享等一系列問題,本文介紹了一些數據平臺設計思路來幫助業務減少數據開發中的痛點和難點。
本文主要包括以下幾個章節:
本文第一部分介紹一下大數據基礎組件和相關知識。
第二部分會介紹lambda架構和kappa架構。
第三部分會介紹lambda和kappa架構模式下的一般大數據架構
第四部分介紹裸露的數據架構體系下數據端到端難點以及痛點。
第五部分介紹優秀的大數據架構整體設計
大數據整體流程涉及很多模塊,每一個模塊都比較復雜,下圖列出這些模塊和組件以及他們的功能特性,后續會有專題去詳細介紹相關模塊領域知識,例如數據采集、數據傳輸、實時計算、離線計算、大數據儲存等相關模塊。
目前基本上所有的大數據架構都是基于lambda和kappa架構,不同公司在這兩個架構模式上設計出符合該公司的數據體系架構。lambda 架構使開發人員能夠構建大規模分布式數據處理系統。它具有很好的靈活性和可擴展性,也對硬件故障和人為失誤有很好的容錯性,關于lambda架構可以在網上搜到很多相關文章。而kappa架構解決了lambda架構存在的兩套數據加工體系,從而帶來的各種成本問題,這也是目前流批一體化研究方向,很多企業已經開始使用這種更為先進的架構。
Lambda架構
Kappa架構
目前各大公司基本上都是使用kappa架構或者lambda架構模式,這兩種模式下大數據整體架構在早期發展階段可能是下面這樣的:
雖然上述架構看起來將多種大數據組件串聯起來實行了一體化管理,但是接觸過數據開發的人會感受比較強烈,這樣的裸露架構業務數據開發需要關注很多基礎工具的使用,實際數據開發中存在很多痛點與難點,具體表現在下面一些方面。
缺乏一套數據開發IDE來管理整個數據開發環節,長遠的流程無法管理起來。
沒有產生標準數據建模體系,導致不同數據工程師對指標理解不同計算口徑有誤。
大數據組件開發要求高,普通業務去直接使用Hbase、ES等技術組件會產生各種問題。
基本上每個公司大數據團隊都會很復雜,涉及到很多環節,遇到問題難以定位難以找到對應負責人。
難以打破數據孤島,跨團隊跨部門數據難以共享,互相不清楚對方有什么數據。
需要維護兩套計算模型批計算和流計算,難以上手開發,需要提供一套流批統一的SQL。
基本上大多數公司在數據平臺治理上和提供開放能力上都存在上述問題和痛點。在復雜的數據架構下,對于數據適用方來說,每一個環節的不清晰或者一個功能的不友好,都會讓復雜鏈路變更更加復雜起來。想要解決這些痛點,就需要精心打磨每一個環節,將上面技術組件無縫銜接起來,讓業務從端到端使用數據就像寫SQL查詢數據庫一樣簡單。
提供多種平臺以及工具來助力數據平臺:多種數據源的數據采集平臺、一鍵數據同步平臺、數據質量和建模平臺、元數據體系、數據統一訪問平臺、實時和離線計算平臺、資源調度平臺、一站式開發IDE。
元數據是打通數據源、數據倉庫、數據應用,記錄了數據從產生到消費的完整鏈路。元數據包含靜態的表、列、分區信息(也就是MetaStore)。動態的任務、表依賴映射關系;數據倉庫的模型定義、數據生命周期;以及ETL任務調度信息、輸入輸出等元數據是數據管理、數據內容、數據應用的基礎。例如可以利用元數據構建任務、表、列、用戶之間的數據圖譜;構建任務DAG依賴關系,編排任務執行序列;構建任務畫像,進行任務質量治理;提供個人或BU的資產管理、計算資源消耗概覽等。
可以認為整個大數據數據流動都是依靠元數據來管理的,沒有一套完整的元數據設計,就會出現上面的數據難以追蹤、權限難以把控、資源難以管理、數據難以共享等等問題。
很多公司都是依靠hive來管理元數據,但是個人認為在發展一定階段還是需要自己去建設元數據平臺來匹配相關的架構。
關于元數據可以參考餓了么一些實戰:https://www.jianshu.com/p/f60b2111e414
如果維護兩套計算引擎例如離線計算Spark和實時計算Flink,那么會對使用者造成極大困擾,既需要學習流計算知識也需要批計算領域知識。如果實時用Flink離線用Spark或者Hadoop,可以開發一套自定義的DSL描述語言去匹配不同計算引擎語法,上層使用者無需關注底層具體的執行細節,只需要掌握一門DSL語言,就可以完成Spark和Hadoop以及Flink等等計算引擎的接入。
ETL 即 Extract-Transform-Load,用來描述將數據從來源端經過抽取(extract)、轉換(transform)、加載(load)至目的端的過程。ETL 一詞較常用在數據倉庫,但其對象并不限于數據倉庫。一般而言ETL平臺在數據清洗、數據格式轉換、數據補全、數據質量管理等方面有很重要作用。作為重要的數據清洗中間層,一般而言ETL最起碼要具備下面幾個功能:
支持多種數據源,例如消息系統、文件系統等
支持多種算子,過濾、分割、轉換、輸出、查詢數據源補全等算子能力
大多數數據查詢都是由需求驅動,一個需求開發一個或者幾個接口,編寫接口文檔,開放給業務方調用,這種模式在大數據體系下存在很多問題:
這種架構簡單,但接口粒度很粗,靈活性不高,擴展性差,復用率低.隨著業務需求的增加,接口的數量大幅增加,維護成本高企。
同時,開發效率不高,這對于海量的數據體系顯然會造成大量重復開發,難以做到數據和邏輯復用,嚴重降低業務適用方體驗。
通過一套智能查詢解決上述大數據查詢痛點問題
隨著業務復雜度和數據規模上升,混亂的數據調用和拷貝,重復建設帶來的資源浪費,數據指標定義不同而帶來的歧義、數據使用門檻越來越高。以筆者見證實際業務埋點和數倉使用為例,同一個商品名稱有些表字段是good_id,有些叫spu_id,還有很多其他命名,對于想利用這些數據人會造成極大困擾。因此沒有一套完整的大數據建模體系,會給數據治理帶來極大困難,具體表現在下面幾個方面:
數據標準不一致,即使是同樣的命名,但定義口徑卻不一致。例如,僅uv這樣一個指標,就有十幾種定義。帶來的問題是:都是uv,我要用哪個?都是uv,為什么數據卻不一樣?
造成巨大研發成本,每個工程師都需要從頭到尾了解研發流程的每個細節,對同樣的“坑”每個人都會重新踩一遍,對研發人員的時間和精力成本造成浪費。這也是目標筆者遇到的困擾,想去實際開發提取數據太難。
因此大數據開發和數倉表設計必須要堅持設計原則,數據平臺可以開發平臺來約束不合理的設計,例如阿里巴巴的OneData體。一般而言,數據開發要經過按照下面的指導方針進行:
有興趣的可以參考阿里巴巴的OneData設計體系。
很簡單的就能將各種各式數據一鍵采集到數據平臺,通過數據傳輸平臺將數據無縫銜接到ETL平臺。ETL通過和元數據平臺打通,規范Schema定義,然后將數據轉換、分流流入到實時與離線計算平臺,后續任何針對該數據離線和實時處理,只需要申請元數據表權限就可以開發任務完成計算。數據采集支持多種各式數據來源,例如binlog、日志采集、前端埋點、kafka消息隊列等
高效的數據開發一站式解決工具,通過IDE可以完成實時計算與離線計算任務開發,將上述平臺全部打通提供一站式解決方案。數據開發IDE提供數據集成、數據開發、數據管理、數據質量和數據服務等全方位的產品服務,一站式開發管理的界面,通過數據IDE完成對數據進行傳輸、轉換和集成等操作。從不同的數據存儲引入數據,并進行轉化和開發,最后將處理好的數據同步至其他數據系統。通過高效率的大數據開發IDE,基本上讓大數據工程師可以屏蔽掉各種痛點,將上述多種平臺能力結合起來,讓大數據開發可以向寫SQL一樣簡單。
關于數據開發工具可以參考阿里云的DataWorks。
解決端到端難點還需要其他若干能力輔助,這里就不再敘述,有興趣的同學可以自行研究。
完整的數據體系研發還包括告警與監控中心、資源調度中心、資源計算隔離、數據質量檢測、一站式數據加工體系,這里就不再繼續討論了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。