數(shù)據(jù)中臺(tái)
數(shù)據(jù)匯聚
數(shù)據(jù)匯聚是數(shù)據(jù)中臺(tái)必須提供的核心工具,把各種異構(gòu)網(wǎng)絡(luò)、異構(gòu)數(shù)據(jù)源的數(shù)據(jù)方便地采集到數(shù)據(jù)中臺(tái)中進(jìn)行集中存儲(chǔ),為后續(xù)的加工建模做準(zhǔn)備。數(shù)據(jù)匯聚方式一般有數(shù)據(jù)庫同步、埋點(diǎn)、網(wǎng)絡(luò)爬蟲、消息隊(duì)列等;從匯聚的時(shí)效性來分,有離線批量匯聚和實(shí)時(shí)采集。
- 數(shù)據(jù)采集工具
Canal、DataX、Sqoop
數(shù)據(jù)開發(fā)
數(shù)據(jù)開發(fā)模塊主要面向開發(fā)人員、分析人員,提供離線、實(shí)時(shí)、算法開發(fā)工具。
離線開發(fā)
1. 作業(yè)調(diào)度
?依賴調(diào)度:所有父作業(yè)運(yùn)行完成后,當(dāng)前作業(yè)才能開始運(yùn)行。圖64中的作業(yè)B,只有父作業(yè)A和C運(yùn)行完成后,才能開始被調(diào)度。?時(shí)間調(diào)度:可指定作業(yè)的調(diào)度開始時(shí)間。圖64中的作業(yè)B,只有到達(dá)05:00后才能開始被調(diào)度。
2. 基線控制
在大數(shù)據(jù)離線作業(yè)中,作業(yè)執(zhí)行時(shí)間較長(zhǎng),經(jīng)常遇到急著用數(shù)據(jù)發(fā)現(xiàn)數(shù)據(jù)還沒出來的情況。采用算法對(duì)作業(yè)完成時(shí)間進(jìn)行智能預(yù)測(cè),根據(jù)預(yù)測(cè),當(dāng)作業(yè)無法正常產(chǎn)出且動(dòng)態(tài)調(diào)整無法完成時(shí),調(diào)度中心會(huì)及時(shí)通過監(jiān)控告警通知運(yùn)維值班人員提前介入處理,為大數(shù)據(jù)作業(yè)執(zhí)行留出充裕的時(shí)間。
3. 異構(gòu)存儲(chǔ)
企業(yè)內(nèi)部的存儲(chǔ)計(jì)算引擎呈多元化趨勢(shì)。離線開發(fā)中心針對(duì)每種類型的計(jì)算引擎會(huì)開發(fā)不同的組件,例如,針對(duì)Oracle開發(fā)Oracle插件,針對(duì)Hadoop體系分別開發(fā)出Hive、Spark、MR等插件。用戶在界面新建各種作業(yè)類型,在執(zhí)行時(shí)自動(dòng)根據(jù)作業(yè)的類型尋找相應(yīng)的插件來運(yùn)行作業(yè)。
4. 代碼校驗(yàn)
對(duì)于常見的SQL任務(wù)類型,SQL檢查器會(huì)做好嚴(yán)格的管控,做到事前發(fā)現(xiàn)問題。
5. 多環(huán)境級(jí)聯(lián)
通過環(huán)境級(jí)聯(lián)的方式靈活支持企業(yè)的各類環(huán)境需求,方便對(duì)資源、權(quán)限進(jìn)行控制和隔離。每個(gè)環(huán)境有獨(dú)立的Hive數(shù)據(jù)庫、Yarn調(diào)度隊(duì)列,甚至不同的Hadoop集群。常見的環(huán)境如下:
?單一環(huán)境:只有一個(gè)生產(chǎn)環(huán)境,內(nèi)部管理簡(jiǎn)單。?經(jīng)典環(huán)境:開發(fā)環(huán)境中存放脫敏數(shù)據(jù)、供開發(fā)測(cè)試使用,上生產(chǎn)環(huán)境走發(fā)布流程,用于真實(shí)數(shù)據(jù)生產(chǎn)。?任務(wù)、資源和函數(shù)必須在開發(fā)環(huán)境下進(jìn)行新建、修改或刪除,再經(jīng)過提交、創(chuàng)建發(fā)布包、同意發(fā)布三個(gè)操作后,才能同步到生產(chǎn)環(huán)境。?復(fù)雜環(huán)境:企業(yè)有外部人員和內(nèi)部人員,會(huì)給外部人員提供一個(gè)脫敏管控的環(huán)境,外部人員開發(fā)完的數(shù)據(jù)模型經(jīng)過測(cè)試后發(fā)布到內(nèi)部開發(fā)環(huán)境。
6. 推薦依賴
隨著業(yè)務(wù)的不斷深入,數(shù)據(jù)開發(fā)人員需要開發(fā)的作業(yè)會(huì)不斷累加。既能保證準(zhǔn)確找到需要定位的上游作業(yè),又能保證不會(huì)形成環(huán)路。
?獲取推薦依賴的核心原理在于上下游作業(yè)輸入和輸出的表級(jí)血緣依賴圖;?通過血緣分析當(dāng)前作業(yè)的輸入和輸出,找到合適的上游作業(yè);?對(duì)合適的作業(yè)進(jìn)行環(huán)路檢測(cè),剔除存在閉環(huán)的作業(yè);?返回合適的節(jié)點(diǎn)列表。
7. 數(shù)據(jù)權(quán)限
企業(yè)內(nèi)部計(jì)算引擎多樣化,數(shù)據(jù)權(quán)限管理面臨如下問題:
?部分引擎擁有獨(dú)立的權(quán)限管理系統(tǒng)(例如Oracle、HANA、LibrA),導(dǎo)致權(quán)限申請(qǐng)需要到每一種引擎上單獨(dú)操作,讓使用變得復(fù)雜。?同一種計(jì)算引擎,不同廠商的權(quán)限系統(tǒng)有多種,例如Hadoop自身無數(shù)據(jù)權(quán)限系統(tǒng),由不同廠商各自去實(shí)現(xiàn),目前主要有兩種策略:?RBAC(Role-Based Access Control):如Cloudera用的是Sentry,華為的FI也是類似的機(jī)制?PBAC(Policy-Based Access Control):如Hortonworks用的Ranger?數(shù)據(jù)權(quán)限是由大數(shù)據(jù)集群或數(shù)據(jù)庫運(yùn)維人員管理的,開發(fā)人員無法直接操作或者接觸,所有的權(quán)限申請(qǐng)都需要運(yùn)維人員開通,造成運(yùn)維人員負(fù)擔(dān)過重。在實(shí)際開發(fā)中,一般需要運(yùn)維人員把整個(gè)庫的權(quán)限授權(quán)給某個(gè)開發(fā)負(fù)責(zé)人,然后庫里面的表、字段、函數(shù)的權(quán)限管理由開發(fā)負(fù)責(zé)人負(fù)責(zé)就行。?數(shù)據(jù)權(quán)限管理中心提供界面化操作,數(shù)據(jù)申請(qǐng)方直接在頁面上進(jìn)行各種權(quán)限的申請(qǐng),數(shù)據(jù)管理方在界面上審核權(quán)限,執(zhí)行同意或拒絕操作。同時(shí),所有權(quán)限的申請(qǐng)、審批都會(huì)有記錄,便于進(jìn)行權(quán)限審計(jì)。在統(tǒng)一數(shù)據(jù)權(quán)限服務(wù)中,會(huì)對(duì)接底層的各種權(quán)限管理系統(tǒng),例如Sentry、Ranger、Oracle,同時(shí)對(duì)數(shù)據(jù)權(quán)限管理中心提供服務(wù),執(zhí)行權(quán)限的申請(qǐng)、授權(quán)、撤銷等操作。
實(shí)時(shí)開發(fā)
?元數(shù)據(jù)管理?SQL驅(qū)動(dòng)?組件化開發(fā)
智能運(yùn)維
任務(wù)的管理、代碼發(fā)布、運(yùn)維、監(jiān)控、告警等一系列集成工具,方便使用,提升效率。重跑、重跑下游、補(bǔ)數(shù)據(jù)。
數(shù)據(jù)體系
有了數(shù)據(jù)匯聚、數(shù)據(jù)開發(fā)模塊,中臺(tái)已經(jīng)具備傳統(tǒng)數(shù)據(jù)倉庫(后面簡(jiǎn)稱:數(shù)倉)平臺(tái)的基本能力,可以做數(shù)據(jù)的匯聚以及各種數(shù)據(jù)開發(fā),就可以建立企業(yè)的數(shù)據(jù)體系。之前說數(shù)據(jù)體系是中臺(tái)的血肉,開發(fā)、管理、使用的都是數(shù)據(jù)。
中臺(tái)數(shù)據(jù)體系應(yīng)具備以下特征:
?覆蓋全域數(shù)據(jù):數(shù)據(jù)集中建設(shè)、覆蓋所有業(yè)務(wù)過程數(shù)據(jù),業(yè)務(wù)中臺(tái)在數(shù)據(jù)體系中總能找到需要的數(shù)據(jù)。?結(jié)構(gòu)層次清晰:縱向的數(shù)據(jù)分層、橫向主題域、業(yè)務(wù)過程劃分,讓整個(gè)層次結(jié)構(gòu)清晰易理解。?數(shù)據(jù)準(zhǔn)確一致:定義一致性指標(biāo),統(tǒng)一命名、統(tǒng)一業(yè)務(wù)含義、統(tǒng)一計(jì)算口徑,并有專業(yè)團(tuán)隊(duì)負(fù)責(zé)建模,保證數(shù)據(jù)的準(zhǔn)確一致。?性能提升:統(tǒng)一的規(guī)劃設(shè)計(jì),選用合理的數(shù)據(jù)模型,清晰的定義并統(tǒng)一規(guī)范,并且考慮使用場(chǎng)景,使整體性能更好。?降低成本:數(shù)據(jù)體系的建設(shè)使得數(shù)據(jù)能被業(yè)務(wù)共享,這避免了大量煙囪式的重復(fù)建設(shè),節(jié)約了計(jì)算、存儲(chǔ)和人力成本。?方便易用:易用的總體原則是越往后越能方便地直接使用數(shù)據(jù),把一些復(fù)雜的處理盡可能前置,必要時(shí)做適當(dāng)?shù)娜哂嗵幚怼?/p>
不同行業(yè)的數(shù)據(jù)體系建設(shè):
- 地產(chǎn)行業(yè)
- 證券行業(yè)
- 零售行業(yè)
- 制造行業(yè)
- 傳媒行業(yè)
- 檢務(wù)行業(yè)
1. 貼源數(shù)據(jù)層ODS
對(duì)各業(yè)務(wù)系統(tǒng)數(shù)據(jù)進(jìn)行采集、匯聚,盡可能保留原始業(yè)務(wù)流程數(shù)據(jù),與業(yè)務(wù)系統(tǒng)基本保持一致,僅做簡(jiǎn)單整合、非結(jié)構(gòu)化數(shù)據(jù)結(jié)構(gòu)化處理或者增加標(biāo)識(shí)數(shù)據(jù)日期描述信息,不做深度清洗加工。
?表名:ODS_系統(tǒng)簡(jiǎn)稱_業(yè)務(wù)系統(tǒng)表名?字段名:與業(yè)務(wù)系統(tǒng)字段名保持一致,字段類型也盡可能保持一致?對(duì)于數(shù)據(jù)量比較大的業(yè)務(wù)表,采用增量同步的方式,則要同時(shí)建立增量表和全量表,增量表命名加后綴:ODS_系統(tǒng)簡(jiǎn)稱_業(yè)務(wù)系統(tǒng)表名_delta。?對(duì)于日志、文件等半結(jié)構(gòu)數(shù)據(jù),不僅要存儲(chǔ)原始數(shù)據(jù),還要存儲(chǔ)結(jié)構(gòu)化之后的數(shù)據(jù)。
使用DataX同步數(shù)據(jù)步驟:
1)確定業(yè)務(wù)系統(tǒng)源表與貼源數(shù)據(jù)層目標(biāo)表
2)配置數(shù)據(jù)字段映射關(guān)系,目標(biāo)表可能會(huì)增加采集日期、分區(qū)、原系統(tǒng)標(biāo)識(shí)等必要信息,業(yè)務(wù)相關(guān)內(nèi)容不做轉(zhuǎn)換
3)如果是增量同步或著有條件的同步部分?jǐn)?shù)據(jù),則配置數(shù)據(jù)同步條件
4)清理目標(biāo)表對(duì)應(yīng)數(shù)據(jù)
5)啟動(dòng)同步任務(wù),往貼源數(shù)據(jù)層目標(biāo)表導(dǎo)入數(shù)據(jù)
6)驗(yàn)證任務(wù)是否可以正確運(yùn)行,并且采集到準(zhǔn)確數(shù)據(jù)
7)發(fā)布采集任務(wù),加入生產(chǎn)調(diào)度,并配置相關(guān)限速、容錯(cuò)、質(zhì)量監(jiān)控、告警機(jī)制
2. 統(tǒng)一數(shù)倉層DW
?明細(xì)數(shù)據(jù)層DWD?匯總數(shù)據(jù)層DWS
與傳統(tǒng)數(shù)據(jù)倉庫功能基本一致,對(duì)全歷史業(yè)務(wù)過程數(shù)據(jù)進(jìn)行建模存儲(chǔ)。對(duì)來源于業(yè)務(wù)系統(tǒng)的數(shù)據(jù)進(jìn)行重新組織。業(yè)務(wù)系統(tǒng)是按照業(yè)務(wù)流程方便操作的方式來組織數(shù)據(jù)的,而統(tǒng)一數(shù)倉層從業(yè)務(wù)易理解的視角來重新組織,定義一致的指標(biāo)、維度,各業(yè)務(wù)板塊、業(yè)務(wù)域按照統(tǒng)一規(guī)范獨(dú)立建設(shè),從而形成統(tǒng)一規(guī)范的標(biāo)準(zhǔn)業(yè)務(wù)數(shù)據(jù)體系。
3. 標(biāo)簽數(shù)據(jù)層TDM
面向?qū)ο蠼?,?duì)跨業(yè)務(wù)板塊、跨數(shù)據(jù)域的特定對(duì)象數(shù)據(jù)進(jìn)行整合,通過IDMapping把各個(gè)業(yè)務(wù)板塊、各個(gè)業(yè)務(wù)過程中的同一對(duì)象的數(shù)據(jù)打通,形成對(duì)象的全域標(biāo)簽體系,方便深度分析、挖掘、應(yīng)用。
4. 應(yīng)用數(shù)據(jù)層ADS
按照業(yè)務(wù)的需要從統(tǒng)一數(shù)倉層、標(biāo)簽數(shù)據(jù)層抽取數(shù)據(jù),并面向業(yè)務(wù)的特殊需要加工業(yè)務(wù)特定數(shù)據(jù),以滿足業(yè)務(wù)及性能需求,向特定應(yīng)用組裝應(yīng)用數(shù)據(jù)。
數(shù)據(jù)資產(chǎn)管理
數(shù)據(jù)資產(chǎn)管理包括對(duì)數(shù)據(jù)資產(chǎn)目錄、元數(shù)據(jù)、數(shù)據(jù)質(zhì)量、數(shù)據(jù)血緣、數(shù)據(jù)生命周期等進(jìn)行管理和展示,以一種更直觀的方式展現(xiàn)企業(yè)的數(shù)據(jù)資產(chǎn),提升企業(yè)的數(shù)據(jù)意識(shí)。
數(shù)據(jù)資產(chǎn)對(duì)上支持以價(jià)值挖掘和業(yè)務(wù)賦能為導(dǎo)向的數(shù)據(jù)應(yīng)用開發(fā),對(duì)下依托大數(shù)據(jù)平臺(tái)實(shí)現(xiàn)數(shù)據(jù)全生命周期的管理,并對(duì)企業(yè)數(shù)據(jù)資產(chǎn)的價(jià)值、質(zhì)量進(jìn)行評(píng)估,促進(jìn)企業(yè)數(shù)據(jù)資產(chǎn)不斷自我完善,持續(xù)向業(yè)務(wù)輸出動(dòng)力。
數(shù)據(jù)治理
傳統(tǒng)的數(shù)據(jù)治理通常包含數(shù)據(jù)標(biāo)準(zhǔn)管理、元數(shù)據(jù)管理、數(shù)據(jù)質(zhì)量管理、數(shù)據(jù)安全管理、數(shù)據(jù)生命周期管理等內(nèi)容。
數(shù)據(jù)服務(wù)體系
前面利用數(shù)據(jù)匯聚、數(shù)據(jù)開發(fā)建設(shè)企業(yè)的數(shù)據(jù)資產(chǎn),利用數(shù)據(jù)管理展現(xiàn)企業(yè)的數(shù)據(jù)資產(chǎn),但是并沒有發(fā)揮數(shù)據(jù)的價(jià)值。數(shù)據(jù)服務(wù)體系就是把數(shù)據(jù)變?yōu)橐环N服務(wù)能力,通過數(shù)據(jù)服務(wù)讓數(shù)據(jù)參與到業(yè)務(wù), 快速開發(fā)企業(yè)的業(yè)務(wù)中臺(tái)等。
查詢服務(wù)
輸入特定的查詢條件,返回該條件下的數(shù)據(jù),以API形式供上層應(yīng)用調(diào)用。
1)支持配置查詢標(biāo)識(shí),底層數(shù)據(jù)組織一般會(huì)對(duì)該標(biāo)識(shí)建立索引,以加快查詢速度
2)支持配置過濾項(xiàng)
3)支持查詢結(jié)果配置,包括數(shù)據(jù)排序規(guī)則和分頁規(guī)則。
分析服務(wù)
借助分析組件高效的大數(shù)據(jù)分析能力,對(duì)數(shù)據(jù)進(jìn)行關(guān)聯(lián)分析,分析結(jié)果通過API形式供上層應(yīng)用調(diào)用。
1)支持多源數(shù)據(jù)接入:企業(yè)的數(shù)據(jù)經(jīng)過清洗加工轉(zhuǎn)換成數(shù)據(jù)資產(chǎn)后,最終通過服務(wù)作用于業(yè)務(wù)系統(tǒng),基于企業(yè)異構(gòu)存儲(chǔ)的現(xiàn)狀,要求分析服務(wù)能夠支持與Hive、ES、Greenplum、MySQL、Oracle、本地文件等多種數(shù)據(jù)源進(jìn)行連接。
2)高性能即席查詢:隨著企業(yè)數(shù)據(jù)爆發(fā)式增長(zhǎng),傳統(tǒng)的數(shù)據(jù)分析工具遇到分析能力的瓶頸,也就是對(duì)大數(shù)據(jù)量的分析越來越乏力。因此,這就要求分析服務(wù)內(nèi)置高速計(jì)算引擎,以對(duì)數(shù)據(jù)進(jìn)行高性能的即席計(jì)算,實(shí)現(xiàn)億級(jí)數(shù)據(jù)毫秒級(jí)(至多秒級(jí))分析和計(jì)算,減少用戶等待時(shí)間。
3)多維數(shù)據(jù)分析
分析服務(wù)除了支持常規(guī)的數(shù)據(jù)分析、上卷下鉆、切片切塊之外,還應(yīng)該支持多維的數(shù)據(jù)分析以及深層次的數(shù)據(jù)挖掘,發(fā)現(xiàn)數(shù)據(jù)背后的關(guān)聯(lián)關(guān)系。
4)靈活對(duì)接業(yè)務(wù)系統(tǒng)
推薦服務(wù)
按約定的格式提供歷史日志行為數(shù)據(jù)和實(shí)時(shí)訪問數(shù)據(jù),推薦模型就會(huì)生成相應(yīng)的推薦API,從而為上層應(yīng)用提供推薦服務(wù)。
推薦服務(wù)即所謂的千人千面,對(duì)不同的人對(duì)物的行為進(jìn)行數(shù)據(jù)挖掘,構(gòu)建每個(gè)人與物之間的關(guān)系程度,來推薦人、物以滿足用戶的興趣愛好,以提升用戶對(duì)業(yè)務(wù)的粘性。每個(gè)人打開手機(jī)淘寶看到的內(nèi)容都不一樣,這就是一種基于人的興趣愛好的推薦服務(wù)能力。
1)支持不同行業(yè)的推薦:不同行業(yè)背后的推薦邏輯是有區(qū)別的
2)支持不同場(chǎng)景的推薦:以內(nèi)容資訊為例,在用戶冷啟動(dòng)場(chǎng)景下,應(yīng)該推薦哪些資訊?在用戶已有瀏覽行為的場(chǎng)景下,又該為其推薦哪些資訊?
3)支持推薦效果優(yōu)化:從導(dǎo)入的原始數(shù)據(jù)開始,經(jīng)過推薦組件生成推薦數(shù)據(jù),再根據(jù)用戶的瀏覽數(shù)據(jù)不斷修正推薦模型,從而使推薦效果不斷優(yōu)化
圈人服務(wù)
從全量用戶數(shù)據(jù)中,基于標(biāo)簽組合篩選符合指定特征條件的人群,并通過API形式供上層應(yīng)用調(diào)用。
1)支持人群圈選:通過SQL代碼或標(biāo)簽取值組合等多種方式,實(shí)現(xiàn)人員查找,幫用戶找到對(duì)的人群
2)支持人群計(jì)量:營銷部門或者廣告公司使用圈人服務(wù)圈選出目標(biāo)人群后,往往還要考慮人群量是否符合預(yù)期,因?yàn)轭A(yù)算有限,不可能不計(jì)成本的對(duì)人群進(jìn)行營銷。
3)支持多渠道對(duì)接:將人群名單導(dǎo)出到相應(yīng)的下游系統(tǒng)。最簡(jiǎn)單的名單導(dǎo)出方式是先下載文件,再由業(yè)務(wù)人員導(dǎo)入相應(yīng)的業(yè)務(wù)系統(tǒng)中?;蛘咧苯訉?duì)接到短信系統(tǒng)、微信投放接口、營銷活動(dòng)系統(tǒng)等。
離線平臺(tái)
蘇寧離線平臺(tái)產(chǎn)品功能圖:
蘇寧調(diào)度模塊功能圖:
蘇寧離線平臺(tái)整體架構(gòu)圖:
跨任務(wù)流依賴的實(shí)現(xiàn):
FTP事件機(jī)制,即在 FTP 服務(wù)器上建立標(biāo)識(shí)文件,一個(gè)事件對(duì)應(yīng)一個(gè)標(biāo)識(shí)文件地址,當(dāng) FTP 服務(wù)器上的標(biāo)識(shí)文件生成的時(shí)候,我們認(rèn)為業(yè)務(wù)系統(tǒng)已經(jīng)完成作業(yè),需要觸發(fā)平臺(tái)任務(wù)執(zhí)行。
“華佗”平臺(tái),實(shí)施任務(wù)診斷:
立即觸發(fā)的任務(wù),放入DelayQueue的隊(duì)列頭部,周期調(diào)度的任務(wù),使用Quartz,依賴觸發(fā)的任務(wù),使用zk,各個(gè)子節(jié)點(diǎn)監(jiān)聽自己的父節(jié)點(diǎn),所有父節(jié)點(diǎn)執(zhí)行完畢則可觸發(fā)執(zhí)行
實(shí)時(shí)平臺(tái)
美團(tuán)點(diǎn)評(píng)
使用了Grafana,可以內(nèi)嵌到自己的平臺(tái)。
bilibili
?SQL化編程?DAG拖拽編程?一體化托管運(yùn)維
實(shí)時(shí)平臺(tái)由實(shí)時(shí)傳輸和實(shí)時(shí)計(jì)算兩部分組成,平臺(tái)底層統(tǒng)一管理元數(shù)據(jù)、血緣、權(quán)限以及作業(yè)運(yùn)維等。實(shí)時(shí)傳輸主要負(fù)責(zé)將數(shù)據(jù)傳入到大數(shù)據(jù)體系中。實(shí)時(shí)計(jì)算基于 BSQL 提供各種應(yīng)用場(chǎng)景支持。
如下圖所示,實(shí)時(shí)傳輸有 APP 日志、數(shù)據(jù)庫 Binlog、服務(wù)端日志或系統(tǒng)日志。bilibili 內(nèi)部的 Lancer 系統(tǒng)解決數(shù)據(jù)落地到 Kafka 或 HDFS。計(jì)算體系主要圍繞 Saber 構(gòu)建一套 BSQL,底層基于 YARN 進(jìn)行調(diào)度管理。
上層核心基于 Flink 構(gòu)建運(yùn)行池。再向上一層滿足多種維表場(chǎng)景,包括 MySQL、Redis、HBase。狀態(tài)(State)部分在 RocksDB 基礎(chǔ)上,還擴(kuò)展了 MapDB、Redis。Flink 需要 IO 密集是很麻煩的問題,因?yàn)?Flink 的資源調(diào)度體系內(nèi)有內(nèi)存和 CPU,但 IO 單位未做統(tǒng)一管理。當(dāng)某一個(gè)作業(yè)對(duì) IO 有強(qiáng)烈的需求時(shí),需要分配很多以 CPU 或內(nèi)存為單位的資源,且未必能夠很好的滿足 IO 的擴(kuò)展。所以本質(zhì)上 bilibili 現(xiàn)階段是將 IO 密集的資源的 State 轉(zhuǎn)移到 Redis 上做緩解。數(shù)據(jù)經(jīng)過 BSQL 計(jì)算完成之后傳輸?shù)綄?shí)時(shí)數(shù)倉,如 Kafka、HBase、ES 或 MySQL、TiDB。最終到 AI 或 BI、報(bào)表以及日志中心。
場(chǎng)景
?AI工程方向,解決了廣告、搜索、推薦的流式Joiner和維表Joiner?實(shí)時(shí)計(jì)算的特征支持,支持 Player 以及 CDN 的質(zhì)量監(jiān)控。包括直播、PCU、卡頓率、CDN 質(zhì)量等;?用戶增長(zhǎng),即如何借助實(shí)時(shí)計(jì)算進(jìn)行渠道分析、調(diào)整渠道投放效果;?實(shí)時(shí) ETL,包括 Boss 實(shí)時(shí)播報(bào)、實(shí)時(shí)大屏、看板等。
網(wǎng)易
目前網(wǎng)易流計(jì)算覆蓋了絕大多數(shù)場(chǎng)景,包括廣告、電商大屏、ETL、數(shù)據(jù)分析、推薦、風(fēng)控、搜索、直播等。
事件管理
對(duì)于分布式平臺(tái)的任務(wù)操作而言,當(dāng)前任務(wù)啟動(dòng)過程中只允許一個(gè)人操作,而不允許兩個(gè)人同時(shí)操作,這就需要以下幾個(gè)模塊來共同配合:
?Server:事件執(zhí)行的發(fā)起者,接受事件的請(qǐng)求,進(jìn)行數(shù)據(jù)校驗(yàn),拼裝,將事件發(fā)送給 Kernel 執(zhí)行。?Kernel:事件具體邏輯的執(zhí)行者,根據(jù)請(qǐng)求向集群發(fā)送指令(Shell 腳本方式)。?Admin:事件執(zhí)行結(jié)果的確認(rèn)者,根據(jù)事件類型,獲取事件的最終結(jié)果,保證結(jié)果的正確性。
以啟動(dòng)場(chǎng)景為例:
首先,Server 會(huì)接收到來自用戶的啟動(dòng)請(qǐng)求,之后會(huì)創(chuàng)建一個(gè)分布式鎖,Admin 會(huì)監(jiān)控這個(gè)鎖。
然后, Server 向 Kernel 提交任務(wù),提交之后會(huì)立即返回,返回之后就會(huì)立即更新數(shù)據(jù)庫中的狀態(tài),將狀態(tài)更新為啟動(dòng)中,這樣在頁面上用戶就能夠看到任務(wù)是啟動(dòng)中的狀態(tài)了。
接下來,Server 就會(huì)等待內(nèi)核的 Shell 腳本的執(zhí)行結(jié)果,如果 Shell 腳本執(zhí)行成功了,就會(huì)去寫 Zookeeper,寫完 Zookeeper 之后 Admin 模塊就會(huì)馬上檢測(cè)到 Zookeeper 節(jié)點(diǎn)有狀態(tài)發(fā)生了修改,Admin 會(huì)立即去獲取 YARN 上的任務(wù)狀態(tài),如果獲取到任務(wù)狀態(tài)是運(yùn)行中,就將數(shù)據(jù)庫的任務(wù)狀態(tài)更新為運(yùn)行中,這會(huì)在前端看到任務(wù)就已經(jīng)是運(yùn)行狀態(tài)了。
最后一步是 Admin 更為完數(shù)據(jù)庫之后,會(huì)釋放掉 Zookeeper 上的鎖,其他人這時(shí)候就可以操作這個(gè)任務(wù)了。
Server、Kernel 和 Admin 這三個(gè)模塊都是不可靠的,那么如何保證其穩(wěn)定和高可用呢?Server 可以通過部署多個(gè),水平擴(kuò)展來實(shí)現(xiàn),Kernel 則會(huì)由 Server 來進(jìn)行監(jiān)聽,當(dāng)發(fā)現(xiàn) Kernel 掛了,可以由 Server 重新拉起或者重新創(chuàng)建。而 Admin 的高可用則是通過熱備來實(shí)現(xiàn)的,如果主 Admin 掛掉了,可以馬上遷移到備 Admin,備 Admin 可以迅速將元數(shù)據(jù)以及任務(wù)信息全部加載進(jìn)來接替工作,進(jìn)而實(shí)現(xiàn)高可用。
平臺(tái)任務(wù)狀態(tài)管理
平臺(tái)的任務(wù)狀態(tài)主要由 Server 和 Admin 來控制。Server 主要控制初始狀態(tài)的執(zhí)行,Admin 則主要負(fù)責(zé)控制所有與 YARN 相關(guān)的狀態(tài)交互。
任務(wù)調(diào)試
SQL 類型的任務(wù)支持調(diào)試功能,用戶可以根據(jù)不同的 source 表和 dim 表,上傳不同的 csv 文件作為輸入數(shù)據(jù),進(jìn)行調(diào)試。調(diào)試執(zhí)行由指定的 kernel 來完成,sloth-server 負(fù)責(zé)組裝請(qǐng)求,調(diào)用 kernel,返回結(jié)果,搜集日志。
日志檢索
在 YARN 集群的每個(gè)節(jié)點(diǎn)上面部署 Filebeat,通過 Filebeat 將節(jié)點(diǎn)上面的任務(wù)日志寫入到 Kafka 消息隊(duì)列中,然后通過 Logstash 進(jìn)行解析處理,之后寫入 ES 集群中。主要用于兩個(gè)用途,一個(gè)是通過界面 Kibana 來提供給開發(fā)和運(yùn)維人員使用,另外一個(gè)就是將運(yùn)行時(shí)狀態(tài)的任務(wù)日志直接在界面上展示供用戶進(jìn)行搜索和查看。
監(jiān)控
在監(jiān)控方面,使用的是 influxdb metric report 組件對(duì)于指標(biāo)進(jìn)行監(jiān)控。時(shí)序數(shù)據(jù)庫使用的是網(wǎng)易自研的 ntsdb 時(shí)序數(shù)據(jù)庫,其能夠支持動(dòng)態(tài)擴(kuò)展和高可用等功能。監(jiān)控指標(biāo)的使用方式有兩種:
?一種是通過 Grafana 的界面來查看指標(biāo);?另外一種是報(bào)警模塊會(huì)從Ntsdb中獲取相關(guān)指標(biāo)數(shù)據(jù)并進(jìn)行監(jiān)控報(bào)警。
報(bào)警
Sloth 流計(jì)算平臺(tái)支持常見的任務(wù)失敗,數(shù)據(jù)滯留延遲,failover 報(bào)警,也支持用戶自定義規(guī)則報(bào)警,包括對(duì)于輸入 QPS、輸出 QPS,戶自定義延遲的監(jiān)控等。以輸入 QPS 為例,可以設(shè)置當(dāng)連續(xù)幾個(gè)周期內(nèi) QPS 低于某一值時(shí)就觸發(fā)報(bào)警。此外,報(bào)警方式也支持多樣化的工具,比如各種網(wǎng)易內(nèi)部的聊天工具、郵件、電話以及短信等,對(duì)于任務(wù)調(diào)試階段,為了避免被騷擾,可以設(shè)置任務(wù)報(bào)警抑制時(shí)間間隔。
實(shí)時(shí)數(shù)倉
目前網(wǎng)易很多產(chǎn)品已經(jīng)開始實(shí)時(shí)數(shù)倉的建設(shè)了,但仍舊處于持續(xù)完善過程中。實(shí)時(shí)數(shù)倉的建設(shè)和離線數(shù)倉大致相同,只不過實(shí)時(shí)數(shù)倉是經(jīng)過實(shí)時(shí)計(jì)算平臺(tái)進(jìn)行處理的。大致的過程就是首先收集日志、埋點(diǎn)數(shù)據(jù)等,將其寫入到 Kafka 里面,經(jīng)過實(shí)時(shí)計(jì)算平臺(tái)進(jìn)行處理,將 ODS 層中的明細(xì)數(shù)據(jù)抽取出來,在進(jìn)行匯總以及維度關(guān)聯(lián)等操作,將結(jié)果寫入到 Redis,Kudu 等,再通過數(shù)據(jù)服務(wù)提供給前端的業(yè)務(wù)使用。
電商應(yīng)用-數(shù)據(jù)分析
實(shí)時(shí)活動(dòng)分析、首頁資源分析、流量漏斗以及實(shí)時(shí)毛利計(jì)算等。
電商應(yīng)用-搜索推薦
電商的搜索推薦場(chǎng)景則主要包括用戶實(shí)時(shí)足跡、用戶實(shí)時(shí)特征、商品實(shí)時(shí)特征、實(shí)時(shí) CTR CVR 樣本組建、首頁 A 區(qū)輪播、B 區(qū)活動(dòng)精選等 UV、PV 實(shí)時(shí)統(tǒng)計(jì)等。
網(wǎng)絡(luò)營銷中的常見名詞解釋:
?CPC (Cost Per Click): 按點(diǎn)擊計(jì)費(fèi)?CPA (Cost Per Action): 按成果數(shù)計(jì)費(fèi)?CPM (Cost Per Mille): 按千次展現(xiàn)計(jì)費(fèi)?CVR (Click Value Rate): 轉(zhuǎn)化率,衡量CPA廣告效果的指標(biāo)?CTR (Click Through Rate): 點(diǎn)擊率?PV (Page View): 流量?ADPV (Advertisement Page View): 載有廣告的pageview流量ADimp (ADimpression): 單個(gè)廣告的展示次數(shù)?PV單價(jià): 每PV的收入,衡量頁面流量變現(xiàn)能力的指標(biāo)
離線數(shù)倉與實(shí)時(shí)數(shù)倉
從0建設(shè)離線數(shù)倉
建設(shè)數(shù)倉
數(shù)據(jù)倉庫定義:在企業(yè)管理和決策中面向主題的、集成的、與時(shí)間相關(guān)的、不可修改的數(shù)據(jù)集合。
數(shù)據(jù)倉庫目標(biāo):數(shù)據(jù)資產(chǎn)、決策信息。
ETL過程:打通你的任督二脈(離線+實(shí)時(shí)),讓數(shù)據(jù)在整個(gè)環(huán)節(jié)中流通起來
數(shù)據(jù)分層:一套低耦合、高內(nèi)聚的層級(jí),是十分重要的,總不想業(yè)務(wù)、數(shù)據(jù)等一變化,數(shù)倉像又投胎了一次
數(shù)據(jù)集成:多業(yè)務(wù)場(chǎng)景下,打破數(shù)據(jù)信息壁壘,避免數(shù)據(jù)歧義,統(tǒng)一數(shù)據(jù)服務(wù)
規(guī)范化:良好的流程化、規(guī)范化設(shè)計(jì),易維護(hù)、高擴(kuò)展
監(jiān)控與輔助:質(zhì)量監(jiān)控、調(diào)度管理、元數(shù)據(jù)管理、信息安全管理
走向服務(wù):對(duì)外api服務(wù)/自助查詢平臺(tái)/OLAP分析平臺(tái)
ETL
業(yè)務(wù)數(shù)據(jù)往往涉及多種數(shù)據(jù)源,數(shù)據(jù)存儲(chǔ)也常常會(huì)有多種選擇。文本數(shù)據(jù)、日志數(shù)據(jù)、RMDB、Nosql等。則要求etl工具能夠覆蓋這些業(yè)務(wù)場(chǎng)景。
工具有datax/sqoop/kettle/informatica等等。
ETL一般為最開始的部分,凌晨之后的時(shí)間點(diǎn)。a:避免集中式的對(duì)某個(gè)jdbc海量同步,影響業(yè)務(wù)(部分從庫可能提供查詢服務(wù))、b:明確調(diào)度的時(shí)間,應(yīng)盡可能的在某個(gè)時(shí)間段內(nèi)完成(不能僅依靠調(diào)度,實(shí)現(xiàn)任務(wù)流的串行;為后期的大作業(yè)空間,占用等待的系統(tǒng)資源)
分層
1. Stage緩沖層
事務(wù)性數(shù)據(jù),每日增量方式進(jìn)行數(shù)據(jù)同步。需要注意數(shù)據(jù)同步時(shí)的邊界問題,避免臟數(shù)據(jù)。
對(duì)于非事務(wù)性數(shù)據(jù),一般通過快照/全量更新。不對(duì)外開放數(shù)據(jù)查詢。
2. ods層
一般場(chǎng)景下,我們認(rèn)為該層數(shù)據(jù)與線上保持一致。實(shí)際處理過程中,為了處理時(shí)間維度上的數(shù)據(jù)變化,會(huì)記錄數(shù)據(jù)的變化軌跡。對(duì)于該部分?jǐn)?shù)據(jù),應(yīng)該有選擇的實(shí)施,避免業(yè)務(wù)處理過程變得復(fù)雜和問題發(fā)生后難以回溯。
3. dim/dw層 (模型層)
dim:維度層
dw:主題事實(shí)及業(yè)務(wù)寬表
在ods基礎(chǔ)上,設(shè)計(jì)一個(gè)寬表/模型層,通過維度建模的方式,實(shí)現(xiàn)維度數(shù)據(jù)與事實(shí)數(shù)據(jù)的分離(星型模型)。
4. da層(應(yīng)用層)
面向不同的應(yīng)用,聚合類的數(shù)據(jù)層。該層對(duì)于dim/dw層的使用,是對(duì)模型層的一個(gè)檢視維度。
代碼規(guī)范
?腳本格式規(guī)范:腳本頭部注釋編碼規(guī)范、注釋規(guī)范、sql規(guī)范參考goole規(guī)范?文件/表命名規(guī)范:一個(gè)文件中,只應(yīng)該有一張表,其余只能是臨時(shí)表;表名稱應(yīng)與文件名相同?字段命名規(guī)范:去除多詞同義,和同詞多義的問題。尤其是在模型層(一般也叫做一致性維度)
區(qū)別
?離線數(shù)倉主要基于sqoop、datax、hive等技術(shù)來構(gòu)建 T+1 的離線數(shù)據(jù),通過定時(shí)任務(wù)每天垃取增量數(shù)據(jù)導(dǎo)入到hive表中,然后創(chuàng)建各個(gè)業(yè)務(wù)相關(guān)的主題,對(duì)外提供T+1的數(shù)據(jù)查詢接口。?實(shí)時(shí)數(shù)倉主要是基于數(shù)據(jù)采集工具,如canal等原始數(shù)據(jù)寫入到kafka這樣的數(shù)據(jù)通道中,最后一般都是寫入到類似于HBase這樣的OLAP存儲(chǔ)系統(tǒng)中。對(duì)外提供分鐘級(jí)別,甚至秒級(jí)別的查詢方案。
數(shù)倉類型 | 準(zhǔn)確性 | 實(shí)時(shí)性 | 穩(wěn)定性 |
離線數(shù)倉 | 準(zhǔn)確度高 | 時(shí)延一般在一天 | 穩(wěn)定性好,方便重算 |
實(shí)時(shí)數(shù)倉 | 準(zhǔn)確度低,數(shù)據(jù)延遲、數(shù)據(jù)亂序造成數(shù)據(jù)準(zhǔn)確度低 | 分鐘級(jí)延遲 | 穩(wěn)定性差,需要考慮數(shù)據(jù)回溯處理 |
數(shù)據(jù)倉庫的建設(shè)主要包括數(shù)據(jù)的采集、數(shù)據(jù)的處理、數(shù)據(jù)歸檔、數(shù)據(jù)應(yīng)用四個(gè)方面。
當(dāng)前主要的應(yīng)用場(chǎng)景包括報(bào)表展示、即席查詢、BI展示、數(shù)據(jù)分析、數(shù)據(jù)挖掘、模型訓(xùn)練等方面。
數(shù)據(jù)倉庫的建設(shè)是面向主題的、集成性的、不可更新的、時(shí)許變化的。
實(shí)時(shí)數(shù)倉的實(shí)施關(guān)鍵點(diǎn):
?端到端數(shù)據(jù)延遲、數(shù)據(jù)流量的監(jiān)控?故障的快速恢復(fù)能力?數(shù)據(jù)的回溯處理,系統(tǒng)支持消費(fèi)指定時(shí)間段內(nèi)的數(shù)據(jù)?實(shí)時(shí)數(shù)據(jù)從實(shí)時(shí)數(shù)倉中查詢,T+1數(shù)據(jù)借助離線通道修正?數(shù)據(jù)地圖、數(shù)據(jù)血緣關(guān)系的梳理?業(yè)務(wù)數(shù)據(jù)質(zhì)量的實(shí)時(shí)監(jiān)控,初期可以根據(jù)規(guī)則的方式來識(shí)別質(zhì)量狀況
其實(shí),你需要的不是實(shí)時(shí)數(shù)倉,需要的是一款合適且強(qiáng)大的OLAP數(shù)據(jù)庫。
在實(shí)時(shí)數(shù)倉的建設(shè)中,OLAP數(shù)據(jù)庫的選型直接制約實(shí)時(shí)數(shù)倉的可用性和功能性。
原始層 明細(xì)層 匯總層 應(yīng)用層
?ods:原始數(shù)據(jù)層,事實(shí)數(shù)據(jù),存儲(chǔ)在kafka中?dwd:數(shù)據(jù)明細(xì)層,可以做一些join等加寬處理,可以存儲(chǔ)在kafka和redis中?dim:維度數(shù)據(jù),如存儲(chǔ)在HBase中的數(shù)據(jù)?dm:MySQL -> 匯總指標(biāo)模型;Greenplum -> 明細(xì),多維分析關(guān)聯(lián);HBase -> 匯總指標(biāo)(大量并發(fā));Redis -> 匯總、大列表TopN
數(shù)據(jù)中臺(tái)解決方案
零售行業(yè)
RPS (Revenue Per Search): 每搜索產(chǎn)生的收入,衡量搜索結(jié)果變現(xiàn)能力指標(biāo)
ROI:投資回報(bào)率(ROI)是指通過投資而應(yīng)返回的價(jià)值,它涵蓋了企業(yè)的獲利目標(biāo)。利潤和投入的經(jīng)營所必備的財(cái)產(chǎn)相關(guān),因?yàn)楣芾砣藛T必須通過投資和現(xiàn)有財(cái)產(chǎn)獲得利潤。又稱會(huì)計(jì)收益率、投資利潤率。
本文經(jīng)授權(quán)發(fā)布,不代表增長(zhǎng)黑客立場(chǎng),如若轉(zhuǎn)載,請(qǐng)注明出處:http://gptmaths.com/quan/58064.html