1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        數(shù)據(jù)倉庫系統(tǒng)建設中的工作流及優(yōu)化

        共 6852字,需瀏覽 14分鐘

         ·

        2021-05-18 21:29


        文章作者:翟東波、邢汝峰 搜狐

        編輯整理:Hoh

        內(nèi)容來源:作者授權

        出品平臺:DataFunTalk

        注:歡迎轉(zhuǎn)載,轉(zhuǎn)載請留言。


        導讀:隨著 IT 時代步入到 DT 時代,從數(shù)據(jù)中挖掘價值已經(jīng)變得越來越重要。數(shù)據(jù)倉庫系統(tǒng)長期以來一直是企業(yè) IT 架構(gòu)的重要組成部分,并且逐步與大數(shù)據(jù)等技術相融合,已然成為建設數(shù)據(jù)文化的智慧型企業(yè)的必然措施。
        本文主要針對數(shù)據(jù)倉庫建設中存在的 workflow 應用場景進行分析,結(jié)合數(shù)據(jù)倉庫自身的特性,對現(xiàn)有 workflow 方式進行優(yōu)化,提出了一套適用于數(shù)據(jù)倉庫建設的 workflow 優(yōu)化方案。


        01

        數(shù)據(jù)倉庫建設

        1. 數(shù)據(jù)倉庫基本概念 

        數(shù)據(jù)倉庫的概念在 1991 年被美國著名的信息工程專家 William Inmon 博士首次提出,它是數(shù)據(jù)庫技術發(fā)展到一定階段的產(chǎn)物。數(shù)據(jù)倉庫是面向主題的、集成的、穩(wěn)定的和隨時間變化的數(shù)據(jù)集合,是一個數(shù)據(jù)分析處理過程,而不僅僅是一個數(shù)據(jù)存儲軟件或產(chǎn)品。

        OLAP ( On-line Analytical Processing,聯(lián)機分析處理 ) 是數(shù)據(jù)倉庫中最經(jīng)常使用的數(shù)據(jù)處理和分析技術,最早由關系數(shù)據(jù)庫之父 E.F.Codd 于 1993 年提出。OLAP 委員會對聯(lián)機分析處理的定義為:使分析人員、管理人員或執(zhí)行人員能夠從多種角度對從原始數(shù)據(jù)中轉(zhuǎn)化出來的、能夠真正為用戶所理解的、并真實反映企業(yè)特性的信息進行快速、一致、交互的存取,從而獲得對數(shù)據(jù)更深入了解的一類軟件技術。簡單來說,OLAP 就是幫助用戶更好的從多個角度去理解現(xiàn)有的數(shù)據(jù)。

        多維模型 ( Multidimensional Model ) 是 OLAP 的數(shù)據(jù)存儲和組織范型,是 OLAP 操作的核心技術。OLAP 基于多維模型定義了一些常見的數(shù)據(jù)操作,包括下鉆 ( Drill-down )、 上卷 ( Roll-up )、切片 ( Slice )、切塊 ( Dice ) 以及旋轉(zhuǎn) ( Pivot ) 使決策者、分析者對數(shù)據(jù)進行各種分析操作。

        維度建模 ( Dimensional Modeling ) 是數(shù)據(jù)倉庫建設中的一種數(shù)據(jù)建模方法,將數(shù)據(jù)結(jié)構(gòu)化的邏輯設計方法,它將客觀世界劃分為度量和上下文,由 Kimball 最先提出這一概念。維度建模屬于一種關系建模方法,即將多維模型映射到關系模型,將關系模型中的表分為維度表 ( dimension table ) 和事實表 ( fact table ) 兩種,其中維度表表示對分析主題所屬類型的描述,而事實表表示對分析主題的度量。

        2. 數(shù)據(jù)倉庫建設主要工作

        數(shù)據(jù)倉庫體系架構(gòu)的核心組件有三個:原始數(shù)據(jù)層,數(shù)據(jù)倉庫,前端應用。如下圖所示:

        整體來看,數(shù)據(jù)倉庫系統(tǒng)對業(yè)務數(shù)據(jù)和 server 日志等原始數(shù)據(jù)進行匯聚,數(shù)據(jù)分析處理后,提供給前端應用系統(tǒng)進行使用,包括 BI ( Business Intelligence )、搜索、推薦等各類應用場景。

        在數(shù)據(jù)倉庫系統(tǒng)內(nèi)部,需要對數(shù)據(jù)進行分層,主要有如下好處:

        • 防止煙囪式開發(fā),減少重復開發(fā),開發(fā)通用中間層數(shù)據(jù),減少重復計算;

        • 將復雜問題簡單化,將復雜任務的多個步驟分解到各個層次中,每一層只處理較少的步驟,使單個任務更容易理解;

        • 可進行數(shù)據(jù)血緣追蹤,便于快速定位問題;

        • 整個數(shù)據(jù)層次清晰,每個層次的數(shù)據(jù)都有職責定位,便于使用和理解。 

        數(shù)據(jù)倉庫主要分為 STG、ODS、DWD、DWS、ADS 和 DIM 共 6 個層次,數(shù)據(jù)從底層開始,向上層進行傳遞、轉(zhuǎn)換、重組等操作,可以理解為,根據(jù)數(shù)據(jù)分析業(yè)務的需要,對原有的 OLAP 多維數(shù)據(jù),進行維度和指標的重新組合。層次的具體描述如下: 

        • STG原始數(shù)據(jù)層:用來表示原始數(shù)據(jù)在數(shù)據(jù)倉庫的落地,數(shù)據(jù)結(jié)構(gòu)和原始系統(tǒng)發(fā)送上來的保持一致。

        • ODS數(shù)據(jù)操作層:用于原始數(shù)據(jù)在數(shù)據(jù)平臺的落地。數(shù)據(jù)從數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)之間的邏輯關系上都與原始數(shù)據(jù)層基本保持一致。在源數(shù)據(jù)裝入這一層時,要進行諸如業(yè)務字段提取或去掉不用字段、臟數(shù)據(jù)處理等等。 

        • DWD數(shù)據(jù)明細層:用于源系統(tǒng)數(shù)據(jù)在數(shù)據(jù)平臺中的永久存儲。它用以支撐 DWS 層和 ADS 層無法覆蓋的需求,比如像用戶購買詳單類業(yè)務需求。這一層主要解決一些數(shù)據(jù)質(zhì)量問題和數(shù)據(jù)的完整度問題。

        • DWS數(shù)據(jù)服務層:數(shù)據(jù)匯總層,該層會在 DWD 層的數(shù)據(jù)基礎上。對數(shù)據(jù)做輕度的聚合操作,生成一系列的中間表,提升公共指標的復用性,減少重復加工。按照業(yè)務劃分,如流量、產(chǎn)品、用戶等,生成字段比較多的寬表,用于提供后續(xù)的業(yè)務查詢,OLAP 分析,數(shù)據(jù)分發(fā)等。 

        • ADS應用數(shù)據(jù)層:該層存放數(shù)據(jù)產(chǎn)品個性化的統(tǒng)計指標數(shù)據(jù),一般以某個業(yè)務應用為出發(fā)點進行建設, ADS 層只關心自己需要的數(shù)據(jù),不會全盤考慮企業(yè)整體的數(shù)據(jù)架構(gòu)和應用。面向?qū)嶋H的業(yè)務數(shù)據(jù)需求,以 DWD 或者 DWS 層的數(shù)據(jù)為基礎,組成各種統(tǒng)計報表。

        • DIM維度層:主要存儲公共的屬性數(shù)據(jù),比如產(chǎn)品類別、地理位置、時間詳情等信息。綜上所述,數(shù)據(jù)倉庫建設的主要工作,就是對原始業(yè)務數(shù)據(jù)進行匯聚,進行分層次的數(shù)據(jù)處理,生成業(yè)務需要的數(shù)據(jù),提供給前端業(yè)務使用。


        02
        Workflow 在數(shù)據(jù)倉庫建設中的應用場景
        1. Workflow 概述
        工作流概念起源于生產(chǎn)組織和辦公自動化領域,是針對日常工作中具有固定程序活動而提出的一個概念,目的是通過將工作分解成定義良好的任務或角色,按照一定的規(guī)則和過程來執(zhí)行這些任務并對其進行監(jiān)控,達到提高工作效率、更好的控制過程、增強對客戶的服務、有效管理業(yè)務流程等目的。
        工作流技術的標準化組織工作流管理聯(lián)盟 ( Workflow Management Coalition,WfMC ) 于 1993 年成立,它的成立標志著工作流技術在計算機應用研究領域之中被明確地劃分出了自己的一席之地。
        WfMC 對工作流給出定義為:工作流是指一類能夠完全自動執(zhí)行的經(jīng)營過程,根據(jù)一系列過程規(guī)則,將文檔、信息或任務在不同的執(zhí)行者之間進行傳遞與執(zhí)行。
        簡單來說,工作流是通過計算機軟件進行定義、執(zhí)行并監(jiān)控的經(jīng)營過程,而這種計 算機軟件就是工作流管理系統(tǒng)。
        工作流模型是對工作流的抽象表示,也就是對經(jīng)營過程的抽象表示,由于工作流需要在計算機環(huán)境下運行,因此建立相應的工作流模型就是必不可少的。由于工作流必須首先描述清楚一個經(jīng)營過程是怎樣進行的,因此許多工作流模型都是從過程定義入手,比如流程圖、狀態(tài)圖、活動網(wǎng)絡圖等等,當然也有一些如形式化語言等手段進行工作流建模,本文在此不做闡述。
        下面通過數(shù)據(jù)倉庫建設過程的主要工作流程圖,來描述下 Workflow 在數(shù)據(jù)倉庫建設中的應用場景。
        2. 應用場景
        下面的有向無環(huán)圖反應了數(shù)據(jù)倉庫建設中的主要工作,圖中的節(jié)點表示數(shù)據(jù)處理任務,帶箭頭的線表示了數(shù)據(jù)在任務之間的傳遞方向,圖例正好契合工作流的定義,可以根據(jù)任務依賴,自動執(zhí)行任務,在任務之間傳遞數(shù)據(jù)。
        數(shù)據(jù)倉庫建設中工作流的主要特點:


        • 根據(jù)數(shù)據(jù)層次和數(shù)據(jù)分析維度,工作流節(jié)點通過數(shù)據(jù)流向依賴在一起;

        • 對于規(guī)模稍大的數(shù)據(jù)倉庫,可涉及到多位數(shù)開發(fā)人員的工作協(xié)調(diào);

        • 可以根據(jù)數(shù)據(jù)處理或數(shù)據(jù)分析工作需要,隨時增加工作流節(jié)點。


        3. 當前應用狀況
        目前市面上,也存在一些用于數(shù)據(jù)倉庫建設場景的工作流管理系統(tǒng),典型的代表 Azkaban、Oozie 和 Airflow。下面主要從 Workflow 構(gòu)建和運行等角度對三個系統(tǒng)進行介紹。




        綜合來看,目前應用于數(shù)據(jù)倉庫建設場景的工作流管理系統(tǒng),主要存在以下幾個問 題:

        • 都是以工作流為單位進行編輯、管理和發(fā)布部署,但是在實際的數(shù)據(jù)倉庫建設過程中,經(jīng)常是多個數(shù)據(jù)開發(fā)工程師協(xié)同完成整個工作流的開發(fā)部署工作,每個人只負責部分工作流任務節(jié)點,不同開發(fā)者的任務相互依賴,現(xiàn)有的工作流管理系統(tǒng)不能很好滿足多人的開發(fā)協(xié)同工作。

        • 針對一些復雜的任務依賴,比如兩個任務都是小時調(diào)度,小時調(diào)度之間存在某種對應關系,現(xiàn)有工作流管理系統(tǒng)都是按任務進行依賴配置,不能做到每個任務不同調(diào)度時間之間的依賴配置,或者要寫大量的輔助代碼實現(xiàn),給用戶帶來極大的使用不便。

        • 對于新增或修改 ( 如發(fā)現(xiàn)某個統(tǒng)計指標計算有錯 ) 的任務節(jié)點,經(jīng)常需要針對這樣的任務節(jié)點及其子任務節(jié)點進行歷史數(shù)據(jù)修補,以工作流為單位進行調(diào)度的系統(tǒng),不太適合這種場景的處理。


        03
        Workflow 在數(shù)據(jù)倉庫建設中應用優(yōu)化


        計算機系統(tǒng)中軟件體系結(jié)構(gòu)采用一種分層的結(jié)構(gòu),有句名言:"計算機科學領域的 任何問題都可以通過增加一個間接的中間層來解決"。結(jié)合數(shù)據(jù)倉庫建設工作的特點,本文所優(yōu)化的工作流管理系統(tǒng),將數(shù)據(jù)倉庫建設工作流中的節(jié)點,抽象成任務和實例兩個層次:數(shù)據(jù)開發(fā)人員專注于單個任務的設計,配置任務的依賴和周期等調(diào)度屬性,構(gòu)建任務的工作流;根據(jù)任務的依賴和周期屬性,工作流管理系統(tǒng)自動生成任務對應的實例,構(gòu)建實例的工作流。這樣可以解決上節(jié)中提到的現(xiàn)有開源工作流管理系統(tǒng)的問題,提升開發(fā)協(xié)同、減少重復性工作。

        1. 工作流層次

        工作流管理系統(tǒng)將數(shù)據(jù)倉庫建設中的數(shù)據(jù)處理工作流分成任務和實例兩個層次,任務是對實例的抽象,實例是對任務的具化,任務是數(shù)據(jù)處理的本體,負責創(chuàng)建實例,而實例是具體的執(zhí)行單元。這樣系統(tǒng)就包含兩個相互獨立又相互關聯(lián)的工作流,即任務工作流和實例工作流。 

        ① 任務工作流

        任務工作流層面,用戶根據(jù)數(shù)據(jù)分析的需要,手動增加或修改單個任務。任務除了包括數(shù)據(jù)處理內(nèi)容 ( 如 Shell、HIVE SQL、Spark 等代碼 ),還要包括依賴和周期等任務屬性。通過依賴屬性,所有任務可以形成任務工作流 DAG,用戶只需定義本任務依賴的父任務 ( 也可依賴自身 ),工作流管理系統(tǒng)會進行相關校驗,保證 DAG 屬性 ( 如無環(huán)等 ) 不被破壞等;通過周期屬性,確定任務一天中被調(diào)度的次數(shù)和時間。

        只需要配置依賴和周期屬性,便能滿足任務依賴自身上一次運行結(jié)果或一天中多個時間點要被調(diào)度等復雜配置場景,極大簡化了任務配置難度。

        ② 實例工作流

        實例工作流層面,工作流管理系統(tǒng)根據(jù)任務工作流的任務屬性等信息,按照預定的生成規(guī)則 ( 規(guī)則具體說明參見后面章節(jié) ),創(chuàng)建出任務對應的實例,形成實例工作流。

        工作流管理系統(tǒng)根據(jù)實例工作流,按照 DAG 方式進行調(diào)度,當實例滿足如下兩個條件時,才能被調(diào)度執(zhí)行:

        • 該實例所有的父實例節(jié)點都已完成調(diào)度執(zhí)行;

        • 到達本實例的調(diào)度時間。

        ③ 兩者關聯(lián)

        任務工作流是一個靜態(tài)的工作流,不會被系統(tǒng)調(diào)度;實例工作流是任務工作流在某 一時刻的鏡像,會被系統(tǒng)調(diào)度執(zhí)行,完成數(shù)據(jù)處理工作。

        工作流管理系統(tǒng)一般按天為單位,在固定時間點生成所有任務一天的所有實例信息, 即依據(jù)任務工作流構(gòu)建實例工作流;也可以按照其他時間間隔單位生成實例,比如以小時為單位,在每個小時的某個時間點,生成所有任務在對應小時時間段的實例信息。

        下面兩張圖為具體的任務工作流和實例工作流,其中左圖為任務工作流,右圖為實例工作流。

        圖中 parent 的任務節(jié)點,周期屬性為天,每天 8 點被調(diào)度;依賴屬性為自身依賴,即依賴上一天的執(zhí)行結(jié)果。

        圖中 child 的任務節(jié)點,周期屬性為小時,從 0 點開始,每隔 4 小時調(diào)度一次;依賴屬性,parent 為其依賴的父任務節(jié)點,即父任務 parent 執(zhí)行完后,child 任務節(jié)點才可以被調(diào)度執(zhí)行。

        2. 任務屬性

        任務屬性,主要包括周期屬性和依賴屬性,工作流管理系統(tǒng)根據(jù)這兩個屬性,將任務工作流轉(zhuǎn)換成實例工作流。

        ① 周期屬性

        周期屬性用于指定任務的調(diào)度周期及具體的調(diào)度時間。

        • 調(diào)度周期,可以設置為月、周、日、小時等 ( 一般不考慮分鐘級別,分鐘級別的數(shù)據(jù)處理任務可以使用 Storm、Flink 或 Spark Streaming 等實時數(shù)據(jù)處理系統(tǒng) )。一般設置為日級別周期,即每天都被調(diào)度一次;對于月、周級別,需要制定每個月或周的哪幾天進行調(diào)度,即不是每天都被調(diào)度;對于小時級別,需要設定一天當中哪幾個小時進行調(diào)度,即每天被調(diào)度多次。

        • 調(diào)度時間,設置任務具體的執(zhí)行時間。對于月、周、日級別任務,設置一個調(diào)度時間即可;對于小時級別任務,需要設置對應的多個調(diào)度時間。

        ② 依賴屬性

        依賴屬性分為任務間依賴和任務自身依賴:

        • 任務間依賴,用于指定任務的父任務,即上游任務。例如 DWD 層的任務 A,需要用到 ODS 層的任務 B 和 C 產(chǎn)出的數(shù)據(jù),在配置任務 A 的任務間依賴屬性時,就要設置依賴任務 B 和 C。針對天級別任務依賴小時級別任務的場景,還可以設置就近依賴屬性,則子任務調(diào)度執(zhí)行依賴父任務中第一個不小于子任務調(diào)度執(zhí)行時間的調(diào)度執(zhí)行。 

        • 任務自身依賴,用于指定任務各周期之間的依賴,當前的調(diào)度執(zhí)行,依賴上一次的調(diào)度執(zhí)行結(jié)果。例如某個天級別任務,當天的調(diào)度執(zhí)行就依賴昨天的調(diào)度執(zhí)行結(jié)果;某個小時級別任務,每天 8 點和 16 點執(zhí)行,當天 8 點的調(diào)度執(zhí)行就依賴昨天 16 點的調(diào)度執(zhí)行,當天 16 點的調(diào)度執(zhí)行就依賴當天 8 點的調(diào)度執(zhí)行。

        3. 實例生成

        工作流管理系統(tǒng),在設定的時間,根據(jù)各個任務的周期和依賴屬性,結(jié)合預定義的生成規(guī)則,生成任務對應的實例,形成實例工作流,用于實際的數(shù)據(jù)處理任務執(zhí)行。

        ① 生成規(guī)則

        生成規(guī)則受到任務的周期和依賴屬性影響:

        • 首先根據(jù)周期屬性生成實例,比如天級任務,根據(jù)調(diào)度時間每天生成一個實例;小時級任務,根據(jù)調(diào)度時間,每天生成一個或多個實例;月和周任務,根據(jù)調(diào)度時間,在對應日期生成一個實例。

        • 然后就是根據(jù)依賴屬性,構(gòu)建實例間的依賴關系,具體如下圖所示。


        依賴屬性規(guī)則圖
        通過以上的生成規(guī)則,已經(jīng)可以覆蓋絕大部分的數(shù)據(jù)倉庫建設使用場景,也可以設計其他的依賴屬性來覆蓋更多場景,本文在此不再過多闡述。
        ② 生成實例
        下面結(jié)合具體的生成規(guī)則,給出各類依賴場景的生成示例。
        小時任務依賴小時任務:
        小時任務小時任務可分為兩種情況,一是當自生任務節(jié)點與依賴的父任務節(jié)點在一天內(nèi)生成的實例相同,二是當自生任務節(jié)點與依賴的父任務節(jié)點在一天內(nèi)生成的實例不同這兩種依賴情況。


        • 實例數(shù)相同:基于調(diào)度時間分別排序當前任務和父任務實例,當前任務實例依賴父任務中與之排序序號相同的實例。例如下圖,節(jié)點 A 中實例 A1 是第一個實例節(jié)點,則節(jié)點 B 中第一個實例節(jié)點實例 B1 就依賴于實例 A1。

        • 實例數(shù)不同:當前任務實例只依賴父任務實例中第一個不大于本任務實例調(diào)度時間的實例。例如下圖中,在自身實例數(shù)大于父節(jié)點實例數(shù)時,節(jié)點 B 中的實例 B1 和實例 B2 都依賴于節(jié)點 A 中的 A1,在自身實例數(shù)小于父節(jié)點實例數(shù)時,節(jié)點 B 中的實例 B1 會依賴于節(jié)點 A 中的實例 A1。

        小時任務依賴天任務:

        小時任務依賴于天任務即所有小時實例的都依賴于當天執(zhí)行的天實例。

        天任務依賴小時任務:

        天任務依賴小時任務也可以分為兩種,一是天實例依賴父任務生成的全部小時實例,二是天實例就近依賴其自執(zhí)行時間節(jié)點前父任務執(zhí)行的最近的一個小時實例。

        • 依賴全部小時實例:

        天實例依賴全部小時實例的依賴情況

        • 就近依賴小時實例

        任務自身依賴:

        任務自身依賴可以與任務間依賴一起作用構(gòu)建實例間依賴關系,任務實例依賴本任務上一次調(diào)度執(zhí)行的實例。例如下圖節(jié)點 A 為小時任務,且配置自身依賴屬性,則 2019-11-21 的實例 1 依賴于 2019-11-20 的實例 24,21 號的實例 2 依賴于 21 號的實例 1。

        4. 優(yōu)化效果

        通過上述的方案,將數(shù)據(jù)倉庫建設中的工作流節(jié)點,抽象成任務和實例兩個層次,可達到以下的優(yōu)化效果:

        • 配置工作流任務節(jié)點時,無需變更整個工作流配置信息,只需配置當前任務節(jié)點的周期和依賴屬性等內(nèi)容,提升工作流配置靈活性;

        • 通過任務的周期和依賴屬性,可以生成復雜的實例依賴關系,降低工作流節(jié)點依賴配置的復雜度;

        • 能夠以某個任務節(jié)點為根節(jié)點,構(gòu)造子工作流 ( 包含此任務節(jié)點,及其子任務節(jié)點、孫子任務節(jié)點等 ),覆蓋歷史數(shù)據(jù)修復等場景。


        04
        總 結(jié)


        本文主要根據(jù)數(shù)據(jù)倉庫建設過程中的 workflow 相關特點,將 workflow 中的節(jié)點抽象成任務和實例兩個層次,用戶只需要定義任務的周期屬性和依賴屬性,workflow 管理系統(tǒng)根據(jù)任務的這些屬性自動轉(zhuǎn)換成實例間的依賴,提升數(shù)據(jù)倉庫工作流管理系統(tǒng)的易用性。當然,數(shù)據(jù)倉庫工作流管理系統(tǒng)不僅僅包含本文描述的任務依賴和調(diào)度管理,還包括數(shù)據(jù)質(zhì)量監(jiān)控、數(shù)據(jù)處理任務追蹤、數(shù)據(jù)處理流程優(yōu)化等等,需要深入融合 workflow 和數(shù)據(jù)倉庫兩個技術領域,提升數(shù)據(jù)倉庫建設工作的效率。

        瀏覽 85
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            大香蕉网视频在线 | 亚洲精品成人影院 | 厨房呻吟嗯用力呀嗯啊视频 | 免费A片视频 | 精品视频免费在线观看 | 末世淫辱校花h系列小说 | 日韩免费黄色片 | 无码十区 | 嗯~抱在餐桌下啊~h视频 | 日本护士裸体服务 |