在TDH大數(shù)據平臺上進行數(shù)據倉庫ETL功能設計(一)

? 今年利用一個新的項目機會,對過往在TDH(星環(huán)的大數(shù)據平臺產品)上做etl實現(xiàn)的功能做一些總結和重新優(yōu)化設計并在這個項目中進行應用,因為過往的經驗或者習慣的問題,以前在TDH上除了調度這塊依賴于類似control-M這種調度平臺之外,像數(shù)據采集、卸載分發(fā)、數(shù)據加工等處理過程都時采用自己開發(fā)的腳本或者存儲過程實現(xiàn)的,在新的設計中依然是這樣的思路。主要是因為目前在大數(shù)據平臺上做ETL的開發(fā),需實現(xiàn)采集、處理的作業(yè)都是成千上萬的,使用各類ETL工具及調度工具會使得作業(yè)開發(fā)工作量特別的大,而且容易出錯。
? 這個設計雖然是基于TDH設計的,但其思路在CDH、華為以及開源平臺上也同樣可以,無法是一些具體的細節(jié)功能實現(xiàn)起來有些區(qū)別。
? 這份材料是設計初期思路確定后對項目組內的人員進行的培訓,因為項目組內第一次接觸TDH或者HADOOP平臺的人是大多數(shù),甚至很多連數(shù)據倉庫是什么都處于懵懂狀態(tài)的人,所以在培訓時也比較注重講細節(jié)簡化說明,便于理解。
講解分三個部分:

  • 數(shù)倉定位與TDH
  • 數(shù)倉組成結構分析
  • 分模塊標準化實施

?第一部分先簡單介紹下數(shù)據倉庫的定位及主要功能,同時說明下TDH的架構和對應數(shù)倉所需要使用的組件。
?第二部分就是以獨特的視角對數(shù)據倉庫內所包含的內容進行拆解分析。
?第三部分就是對數(shù)據倉庫所需要實現(xiàn)的ETL功能進行分模塊標準化的開發(fā)實施進行設計上的講解。


數(shù)倉定位與TDH

數(shù)據倉庫定位與職能

? 數(shù)據倉庫在企業(yè)中核心的定位就是實現(xiàn)統(tǒng)一的數(shù)據采集、加工、安全管理以及提供數(shù)據服務的中心平臺,為各類基于數(shù)據的應用體系建設的基礎設施工程。
? 其中最基礎的核心職能就是基于一個統(tǒng)一平臺實現(xiàn)數(shù)據匯集、數(shù)據整合加工以及數(shù)據服務三部分功能。
? 數(shù)據匯集實現(xiàn)將行內有需求價值的IT系統(tǒng)數(shù)據、手工業(yè)務數(shù)據等采集匯總到一個數(shù)據庫系統(tǒng)內;
? 數(shù)據整合加工實現(xiàn)將匯集的數(shù)據從時間、業(yè)務分類、功能等多個角度進行合理的加工處理,實現(xiàn)合理高效的數(shù)據存儲,降低對數(shù)據進行理解、檢索查詢的難度。
? 數(shù)據服務即實現(xiàn)相關系統(tǒng)、業(yè)務人員對整合數(shù)據基于多種方式的查詢服務需求。


數(shù)據倉庫邏輯架構

? 為簡化對數(shù)據倉庫邏輯架構的理解,最簡單的數(shù)據倉庫邏輯架構如上圖所示。
? 一般我們所熟悉的數(shù)據倉庫架構都是描述分層架構,這是數(shù)據倉庫的數(shù)據架構。對ETL來說,其實不管有多少數(shù)據層級,都可以歸類為三個數(shù)據區(qū)域:臨時區(qū)、模型區(qū)、服務區(qū),三個區(qū)域劃分的依據是從其功能需求定位來區(qū)分的。臨時區(qū)是為了實現(xiàn)數(shù)據的落地接入、模型區(qū)是為了實現(xiàn)統(tǒng)一規(guī)范的數(shù)據整合加工、服務區(qū)是為了實現(xiàn)數(shù)據對外提供服務。因為功能定位不同,其數(shù)據結構特征會不同,因而也會影響到相應ETL功能的實現(xiàn)邏輯。
? 為實現(xiàn)數(shù)據倉庫的數(shù)據架構,就需要實現(xiàn)一些必要的ETL功能,包括:

  • 抽取采集,實現(xiàn)將數(shù)據源數(shù)據接入到數(shù)據倉庫的數(shù)據庫系統(tǒng)。
  • 轉換裝載,實現(xiàn)數(shù)據模型的加工處理以及服務接口的加工處理。
  • 數(shù)據接口,實現(xiàn)數(shù)據對外開放及數(shù)據卸載分發(fā)等服務功能。
  • 數(shù)據檢核,實現(xiàn)對數(shù)據加工結果進行準確性檢查、數(shù)據質量檢查的功能。
  • 作業(yè)調度與監(jiān)控,實現(xiàn)以事件驅動及依賴出發(fā)方式將ETL功能作業(yè)進行調度執(zhí)行和監(jiān)控的功能。
    ? 這部分是ETL功能體系在設計時,需要考慮的最基本的幾個大分類功能。


    TDH大數(shù)據平臺

    ? 上圖是目前TDH的產品架構圖,可看到TDH為了應對不同的數(shù)據處理、使用場景,基于spark技術核心完善或自研了眾多的產品組件,為企業(yè)進行大數(shù)據建設提供多種工具手段。
    ? 本次講解的數(shù)據倉庫我們重點還是關注實現(xiàn)常規(guī)的批數(shù)據處理流程,涉及相關的組件就比較基礎,包含TDH運行所依賴的基礎部分以及inceptor(對應HIVE、IMPALA等)、hyperbase(對應hbase)等計算組件,星環(huán)的STUDIO工具除了waterdrop用來實現(xiàn)類似oracle plsql developer的桌面工具功能需求,用處比較多。其他的工具基本都不太適用于企業(yè)去做大型數(shù)據倉庫的要求,面對大作業(yè)量的情況使用起來還是相對繁瑣。


    image.png

    ? 核心組件INCEPTOR,以對PL/SQL語法的高度支持,非常方便實現(xiàn)數(shù)據倉庫的數(shù)據處理邏輯。
    hyperbase數(shù)據庫使用于比較多的索引查詢場景以及ETL處理過程中所需要的配置數(shù)據存放和讀取。
    其他像hdfs和sqoop工具是為了方便數(shù)據的上傳下載,kerberos安全認證方便對數(shù)據進行一個權限的管理。

數(shù)倉組成分析

數(shù)據倉庫的組成

? 我們通常情況下接觸的數(shù)據倉庫,都是理解為ETL+模型,那么對于ETL就包括數(shù)據采集、清洗、標準化等內容,模型呢就包含了各種主題模型、維度模型等構成的數(shù)據表。因為我們要研究ETL怎么實現(xiàn),模型其實也是ETL中做數(shù)據轉換中的一部分,那么我們換一種思路,嘗試去理解分析下一個標準的數(shù)據倉庫,它的組成部分有什么。
? 就如上圖所示,我把一個通常意義上的數(shù)據倉庫分為以下幾部分:

  • 數(shù)據來源
    ? ETL中最基礎的采集部分,所涉及的就是數(shù)據來源部分,通常我們認為上游的數(shù)據提供方不是數(shù)據倉庫的組成部分,但實際上,上游系統(tǒng)的很多內容都是數(shù)據倉庫必須要有的內容,它們肯定是數(shù)據倉庫重要的組成部分,這部分內容至少要包含以下內容:
  1. 數(shù)據來源名稱
  2. 數(shù)據來源類型
  3. 數(shù)據獲取方式
  4. 數(shù)據獲取格式
  5. 數(shù)據獲取策略
  6. 元數(shù)據
    ? 只有獲取了這部分內容,才能去制定數(shù)據采集的功能設計、臨時區(qū)數(shù)據結構的設計、日終調度的設計。所以數(shù)據來源信息是數(shù)據倉庫的重要組成部分。
  • 數(shù)據結構
    ? 數(shù)據結構就是數(shù)據倉庫的數(shù)據庫設計,包括臨時區(qū)、模型區(qū)、服務區(qū)的業(yè)務數(shù)據表、字段、主鍵等元數(shù)據信息,同時也包括為了實現(xiàn)ETL而進行登記的配置表結構、日志表結構等等。
  • ETL程序
    ? 顧名思義,指的是實現(xiàn)數(shù)據倉庫具體的基本功能的程序代碼,在我們的設計中ETL程序是一整套的通用代碼,能夠實現(xiàn)包括數(shù)據采集、整合轉換、歷史處理、接口配置等功能?;谶@些ETL程序,實現(xiàn)一個個具體的ETL作業(yè)的開發(fā)部署運行。
  • 調度監(jiān)控
    ? 調度是指所有批處理作業(yè)按照一定的順序和規(guī)則跑批執(zhí)行的能力,通常是基于類似control-M這種調度工具,在我們的設計中通過shell寫一些服務化進程可實現(xiàn)一定的調度功能,能夠對并發(fā)量、優(yōu)先順序、依賴觸發(fā)、重復觸發(fā)、異常報警等需求進行支持,同時開發(fā)工作量相比工具使用更小。但相應的,需要開發(fā)單獨的web功能來實現(xiàn)對作業(yè)執(zhí)行情況的監(jiān)控。
  • 數(shù)據備份
    ? 數(shù)據備份是數(shù)據倉庫眾多組成部分中比較容易被忽視或者說輕視的部分,通常說到數(shù)據備份都知道一些簡單的數(shù)據備份手段,但實際上數(shù)據備份的概念還可能更多,至少要考慮如下幾個部分:
  1. 備份數(shù)據范圍,臨時區(qū)、模型區(qū),服務區(qū)是否備份呢?
  2. 備份周期,臨時區(qū)7D?模型區(qū)1Y?服務區(qū)30D?
  3. 備份方式,文件備份?災備平臺數(shù)據同步?

? 以上這幾個是從完整的數(shù)據倉庫組成內容去思考的角度,從功能和內容上看,感覺一個數(shù)據倉庫的東西并不多,可是當所接入的數(shù)據表成千上萬,所設計建設的模型以及對外開放的數(shù)據服務接口成百上千時,如果沒有對這些內容進行一個合理的存放讀取設計、功能開發(fā)設計,那么在這個數(shù)據倉庫常年累月的新增需求開發(fā)過程中,其龐大而糟亂的組成會讓從一開始就參與并維持它運行的人在項目組成員中成為大神一樣的人物的同時,也讓新進入項目組的成員越來越難以駕馭掌控這個龐大的系統(tǒng)了。

數(shù)據來源、數(shù)據結構、ETL程序的細化講解
數(shù)據來源分類

? 數(shù)據來源根據來源和形式的不同可以有多種分類方式,每種分類方式其實意味著在做數(shù)據采集時所需要注意和解決的問題,比如對于數(shù)據庫直連采集這種情況,就要求在做ETL程序開發(fā)時,解決如何定位數(shù)據庫地址和登陸信息并按照靈活的查詢方式進行數(shù)據抽取的功能實現(xiàn)??偟膩碚f,數(shù)據來源的內容通常決定了數(shù)據采集功能所依循的原則、規(guī)范和流程。


數(shù)據結構信息

? 數(shù)據倉庫的數(shù)據結構信息非常的繁雜,如圖所示,從分類上就可以分成至少8種,細分類可能就更多,對于這部分數(shù)據,因為直接影響數(shù)據倉庫是否能正常運行,在生產環(huán)境對它們的維護從來都是小心小心再小心,但是往往仍不能避免出現(xiàn)問題。對其進行詳細的梳理分類,并設計工具實現(xiàn)有效的管理,避免在生產環(huán)境頻繁的變更以及直接的手工操作是改善的手段。


ETL程序通用化

? 數(shù)據倉庫的ETL功能一般都是類似的。比如數(shù)據采集,對于同是通過文件方式進行采集的方式來說,其流程都是類似的:對接入的數(shù)據文件檢查合法性-》通過put上傳到hdfs上-》構建外表實現(xiàn)數(shù)據訪問。所以,沒有必要針對具體的采集數(shù)據表進行單獨的作業(yè)程序開發(fā)(包括采用informatic這種ETL工具的方式),那樣是平白增加了開發(fā)的工作量和出錯的概率,以及排查問題時的復雜性??梢酝ㄟ^對每一類功能進行規(guī)范的、標準化的設計,進而通過配置表的方式實現(xiàn)通用化功能,后續(xù)開發(fā)人員只需要通過修改配置、執(zhí)行測試并完成部署投產的功能就可以極大的提高ETL作業(yè)開發(fā)的便捷度,降低出錯的概率。
作業(yè)調度

? 作業(yè)調度就是數(shù)據倉庫運行的大腦,對于作業(yè)調度工具來說,其實現(xiàn)的基本功能是根據依賴關系、優(yōu)先級、時間要求對不同類別的程序或者腳本能夠觸發(fā)執(zhí)行,并能得到具體作業(yè)的運行狀態(tài)結果,提供監(jiān)控報警通知的功能。

? 作業(yè)類別、作業(yè)依賴、作業(yè)執(zhí)行、作業(yè)監(jiān)控以及告警通知是作業(yè)調度的組成部分。


數(shù)據備份

? 數(shù)據備份包含對原系統(tǒng)文件的每日備份、配置數(shù)據的備份、程序備份、模型數(shù)據備份及部分。
? 現(xiàn)在在TDH這類大數(shù)據平臺上實現(xiàn)數(shù)據備份,都是充分利用HDFS分布式的特性,將文件基于一定的規(guī)則和策略存放到HDFS上,并通過專門的程序腳本實現(xiàn)定向的查詢獲取。
? 大數(shù)據平臺災備平臺要實現(xiàn)數(shù)據同步,也有專門的技術,distcp能實現(xiàn)不同HDFS集群之間的數(shù)據互傳,數(shù)據同步功能以此為核心,但還需要解決如何調度的問題。

第二部分,功能詳解

http://www.lxweimin.com/p/e5f888c2d873

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。