數倉基礎

ods dw dm  的區別

ODS應用場景 

A. 在業務系統和數據倉庫之間形成一個隔離層,ODS直接存放從各個業務系統抽取過來的數據,這些數據從結構和數據邏輯關係上和業務系統保持一致,降低了數據抽取的複雜性。它的存在可以避免數據倉庫直接調用業務系統的數據。 
B. 轉移一部分業務系統細節查詢的功能。因ODS存放的數據與業務系統相同,原來由業務系統
產生的報表,現在可以從ODS中產生了。 
C. 完成數據倉庫中不能完成的一些功能。ODS存放的是明細數據,數據倉庫或DM存放的是匯聚
數據,ODS可提供查詢明細的功能。 

數據源源不斷寫入到ODS, 一經寫入的數據就不能被更改,鑑於這些特性,ODS一般會考慮使用分佈式文件存儲系統。 ODS數據只能增加不能修改,數據是業務系統的原樣拷貝,可能存在數據衝突的可能,解決方式是爲每一條數據增加一個時間版本來區分相同的數據。 

OLTP DB保留的是數據信息的最新狀態,只有一個狀態。ODS支持OLTP類型的數據更新,數據更新時間短,數據可實現準實時更新,性能與及時性都高於EDW 。ODS層的數據粒度是最細的,它的歷史數據一般保存3-6個月,以節省空間。如果量不大,有些可以保存更長時間。

客戶等關鍵實體數據。ODS長久保存當前數據,EDW長久保存當前與歷史數據。
詳單數據。ODS保存1個月到3個月;EDW保存2年。
彙總數據。ODS保存3年;EDW保存5年。
其他數據。ODS保存13個月;EDW保存3年。

ODS主要面向營業、渠道等一線生產人員和一線管理人員,爲了實現準實時、跨系統的運營細節數據的查詢,以獲得細粒度的運營數據展現,例如渠道人員查詢客戶的全視圖信息由ODS提供數據支撐。ODS中也存在部分粗粒度彙總數據,但彙總的維度少且簡單。

DW  

數據倉庫(Data Warehouse):是一個面向主題的(Subject Oriented)、集成的(Integrated)、相對穩定的(Non-Volatile)、反映歷史變化(Time Variant)的數據集合,用於支持管理決策(Decision Making Support)。

 


時效:T+1


A.  主要提供查詢服務,並要求查詢能夠及時響應. 
B.  數據質量,DW提供很多決策系統的支撐數據,數據準確非常重要。DW的數據應該是唯一的具有
權威性的數據,企業所有決策系統只能使用從DW提供的被認可的數據。
C.  擴展性,業務擴展和降低企業建設數據倉庫的成本考慮 。
D.  面向主題,DW中的數據是按照一定的主題域進行組織的,每一個主題對應一個宏觀的分析領域。
數據倉庫排除對決策無用的數據,提供特定主題的簡明視圖。 


DW中的數據需要定期進行質量審覈,保證權威準確;DW中的數據只允許增加,不允許刪除和修改。EDW需要的運營數據,如果在ODS中已存在,EDW則直接從ODS獲取這部分數據。EDW需要的運營數據,如果在ODS中沒有,EDW則直接從生產系統獲取這部分數據。

 

  1. DW層的數據應該是一致的、準確的、乾淨的數據,即對源系統數據進行了清洗(去除了雜質)後的數據。這一層的數據一般是遵循數據庫第三範式的,其數據粒度通常和ODS的粒度相同。在DW層會保存BI系統中所有的歷史數據,例如保存10年的數據。


    EDW主要面向專業分析人員、輔助決策支持人員等,爲了實現基於歷史數據的統計分析和數據挖掘,以獲得客戶深層次的特徵和市場發展的規律,例如專業分析人員的經營狀況趨勢分析由EDW提 供支撐。

    DM  


    數據集市,以某個業務應用爲出發點而建設的局部DW。DM只關心自己需要的數據,不會全量考慮企業整體數據架構和應用,每個應用有自己的DM。 數據集市就是滿足特定的部門或者用戶的需求,按照多維的方式進行存儲,包括定義維度、需要計算的指標、維度的層次等,生成面向決策分析需求的數據立方體(data cube)。


    這層數據是面向主題來組織數據的,通常是星形或雪花結構的數據。從數據粒度來說,這層的數據是輕度彙總級的數據,已經不存在明細數據了。從數據的時間跨度來說,通常是 DW 層的一部分,主要的目的是爲了滿足用戶分析的需求,而從分析的角度來說,用戶通常只需要分析近幾年(如近三年的數據)的即可。從數據的廣度來說,仍然覆蓋了所有業務數據。一個星型結構包含兩個基本部分——一個事實表和各種支持維表。


    事實表  ---- 
    描述數據集市中最密集的數據。在電話公司中,用於呼叫的數據是典型的最密集數據;在銀行中,與賬目覈對和自動櫃員機有關的數據是典型的最密集數據。對於零售業而言,銷售和庫存數據是最密集的數據等。通常,事實表的數據不能更改,但可以輸入數據。 它包括:一個反映事實表建立目的的實體的主鍵,如一張訂單、一次銷售、一個電話等等,主鍵信息,連接事實表與維表的外鍵。 


    維度表 ---- 維表是圍繞着事實表建立的。維表包含非密集型數據,它通過外鍵與事實表相連。典型的維表建立在數據集市的基礎上,包括產品目錄、客戶名單、廠商列表等等。


    數據集市產品 --- 
    國外知名的Garnter關於數據集市產品報告中,位於第一象限的敏捷商業智能產品有QlikView, Tableau和SpotView



    2. hive 的幾種存儲格式

    Hive文件存儲格式
    1.textfile
    textfile爲默認格式
    存儲方式:行存儲
    磁盤開銷大 數據解析開銷大
    壓縮的text文件 hive無法進行合併和拆分

    2.sequencefile
    二進制文件,以<key,value>的形式序列化到文件中
    存儲方式:行存儲
    可分割 壓縮
    一般選擇block壓縮
    優勢是文件和Hadoop api中的mapfile是相互兼容的。


    3.rcfile
    存儲方式:數據按行分塊 每塊按照列存儲
    壓縮快 快速列存取
    讀記錄儘量涉及到的block最少
    讀取需要的列只需要讀取每個row group 的頭部定義。
    讀取全量數據的操作 性能可能比sequencefile沒有明顯的優勢



    4.orc

    存儲方式:數據按行分塊 每塊按照列存儲

    壓縮快 快速列存取

    效率比rcfile高,是rcfile的改良版本



    5.自定義格式
    用戶可以通過實現inputformat和 outputformat來自定義輸入輸出格式。

    總結:
    textfile 存儲空間消耗比較大,並且壓縮的text 無法分割和合並 查詢的效率最低,可以直接存儲,加載數據的速度最高
    sequencefile 存儲空間消耗最大,壓縮的文件可以分割和合並 查詢效率高,需要通過text文件轉化來加載
    rcfile 存儲空間最小,查詢的效率最高 ,需要通過text文件轉化來加載,加載的速度最低

    3.flume 各個組件的介紹
    1.   SourceNetCat Source:綁定的端口(tcp、udp),將流經端口的每一個文本行數據作爲Event輸入;type:source的類型,必須是netcat。
    bind:要監聽的(本機的)主機名或者ip。此監聽不是過濾發送方。一臺電腦不是說只有一個IP。有多網卡的電腦,對應多個IP。
    port:綁定的本地的端口。

    Avro Source:監聽一個avro服務端口,採集Avro數據序列化後的數據;type:avrosource的類型,必須是avro。
    bind:要監聽的(本機的)主機名或者ip。此監聽不是過濾發送方。一臺電腦不是說只有一個IP。有多網卡的電腦,對應多個IP。
    port:綁定的本地的端口。

    Exec Source:於Unix的command在標準輸出上採集數據;type:source的類型:必須是exec。
    command:要執行命令。

    Spooling Directory Source:監聽一個文件夾裏的文件的新增,如果有則採集作爲source。type:source 的類型:必須是spooldir
    spoolDir:監聽的文件夾 【提前創建目錄】
    fileSuffix:上傳完畢後文件的重命名後綴,默認爲.COMPLETED
    deletePolicy:上傳後的文件的刪除策略never和immediate,默認爲never。
    fileHeader:是否要加上該文件的絕對路徑在header裏,默認是false。
    basenameHeader:是否要加上該文件的名稱在header裏,默認是false。

    2. SinkHDFS Sink:將數據傳輸到hdfs集羣中。type:sink的類型 必須是hdfs。
    hdfs.path:hdfs的上傳路徑。
    hdfs.filePrefix:hdfs文件的前綴。默認是:FlumeData
    hdfs.rollInterval:間隔多久產生新文件,默認是:30(秒) 0表示不以時間間隔爲準。
    hdfs.rollSize:文件到達多大再產生一個新文件,默認是:1024(bytes)0表示不以文件大小爲準。
    hdfs.rollCount:event達到多大再產生一個新文件,默認是:10(個)0表示不以event數目爲準。
    hdfs.batchSize:每次往hdfs裏提交多少個event,默認爲100
    hdfs.fileType:hdfs文件的格式主要包括:SequenceFile, DataStream ,CompressedStream,如果使用了CompressedStream就要設置壓縮方式。
    hdfs.codeC:壓縮方式:gzip, bzip2, lzo, lzop, snappy
    注:%{host}可以使用header的key。以及%Y%m%d來表示時間,但關於時間的表示需要在header裏有timestamp這個key。

    Logger Sink將數據作爲日誌處理(根據flume中的設置的日誌方式來顯示)要在控制檯顯示在運行agent的時候加入:-Dflume.root.logger=INFO,console 。
    type:sink的類型:必須是 logger。
    maxBytesToLog:打印body的最長的字節數 默認爲16

    Avro Sink:數據被轉換成Avro Event,然後發送到指定的服務端口上。type:sink的類型:必須是 avro。
    hostname:指定發送數據的主機名或者ip
    port:指定發送數據的端口

    File Roll Sink:數據發送到本地文件。type:sink的類型:必須是 file_roll。
    sink.directory:存儲文件的目錄【提前創建目錄】
    batchSize:一次發送多少個event。默認爲100
    sink.rollInterval:多久產生一個新文件,默認爲30s。單位是s。0爲不產生新文件。【即使沒有數據也會產生文件】

    3.ChannelMemory Channel使用內存作爲數據的存儲。Type channel的類型:必須爲memory
    capacity:channel中的最大event數目
    transactionCapacity:channel中允許事務的最大event數目

    File Channel 使用文件作爲數據的存儲Type channel的類型:必須爲 file
    checkpointDir :檢查點的數據存儲目錄【提前創建目錄】
    dataDirs :數據的存儲目錄【提前創建目錄】
    transactionCapacity:channel中允許事務的最大event數目

    Spillable Memory Channel 使用內存作爲channel超過了閥值就存在文件中Type channel的類型:必須爲SPILLABLEMEMORY
    memoryCapacity:內存的容量event數
    overflowCapacity:數據存到文件的event閥值數
    checkpointDir:檢查點的數據存儲目錄
    dataDirs:數據的存儲目錄

    4. InterceptorTimestamp Interceptor 時間戳攔截器 在header里加入key爲timestamp,value爲當前時間。type:攔截器的類型,必須爲timestamp
    preserveExisting:如果此攔截器增加的key已經存在,如果這個值設置爲true則保持原來的值,否則覆蓋原來的值。默認爲false

    Host Interceptor 主機名或者ip攔截器,在header里加入ip或者主機名type:攔截器的類型,必須爲host
    preserveExisting:如果此攔截器增加的key已經存在,如果這個值設置爲true則保持原來的值,否則覆蓋原來的值。默認爲false
    useIP:如果設置爲true則使用ip地址,否則使用主機名,默認爲true
    hostHeader:使用的header的key名字,默認爲host

    Static Interceptor 靜態攔截器,是在header里加入固定的key和value。type:avrosource的類型,必須是static。
    preserveExisting:如果此攔截器增加的key已經存在,如果這個值設置爲true則保持原來的值,否則覆蓋原來的值。默認爲false
    key:靜態攔截器添加的key的名字
    value:靜態攔截器添加的key對應的value值

    5.  Channel SelectorMultiplexing Channel Selector 根據header的key的值分配channelselector.type 默認爲replicating
    selector.header:選擇作爲判斷的key
    selector.default:默認的channel配置
    selector.mapping.*:匹配到的channel的配置

    6. Sink Processor負載均衡
    a1.sinkgroups=g1
    a1.sinkgroups.g1.sinks=k1 k2
    a1.sinkgroups.g1.processor.type=load_balance
    a1.sinkgroups.g1.processor.backoff=true
    a1.sinkgroups.g1.processor.selector=round_robin
    a1.sinkgroups.g1.processor.selector.maxTimeOut=30000

    backoff:開啓後,故障的節點會列入黑名單,過一定時間再次發送,如果還失敗,則等待是指數增長;直到達到最大的時間。
    如果不開啓,故障的節點每次都會被重試。
    selector.maxTimeOut:最大的黑名單時間(單位爲毫秒)。

    故障轉移
    a1.sinkgroups=g1
    a1.sinkgroups.g1.sinks=k1 k2
    a1.sinkgroups.g1.processor.type=failover
    a1.sinkgroups.g1.processor.priority.k1=10
    a1.sinkgroups.g1.processor.priority.k2=5
    a1.sinkgroups.g1.processor.maxpenalty=10000
    #maxpenalty 對於故障的節點最大的黑名單時間 (in millis 毫秒)


     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章