1. 程式人生 > >通俗語言解釋資料倉庫、資料湖、資料中臺

通俗語言解釋資料倉庫、資料湖、資料中臺

資料倉庫

  如何理解資料倉庫?舉個簡單的例子。 我現在打算學習大資料的內容,所以我看了CSDN,部落格園,微信的大資料公眾號,一些實體書等等,並且我在看某些這些東西的時候,有些不錯的文章我都收藏了,儲存在這些論壇的賬號中,實體書我也做了很多標記,來標出那些對我有用的部分。   看了好幾個月之後,我打算來一次整體的複習,結果這個時候遇到了困難:我收藏的文章太多了,我完全記不得到底哪些文章在哪裡了,如果我要找某一篇文章,我可能要從頭開始一個一個的翻找這些論壇的收藏夾,看看我要找的東西到底在哪裡,況且還要實體書呢!也要翻一遍!   這工作量也太大了,而且我每找一次東西都要幾乎從頭開始找一次,太麻煩了,此時我想到,我為什麼不把我收藏夾的那些東西都放到一個地方呢?這樣我也不用登入很多賬號找了,此時我就想到,我是不是可以用Word軟體呢?把收藏夾裡面的文章都複製到Word裡不就可以了嗎?而且Word軟體還有查詢功能,比這樣翻找的快太多了!立馬行動,我開始把一篇文章從標題到內容全都複製到Word文件裡,實體書上的我也打字打進來,花了好幾天時間,我終於把所有的東西都搬到Word文件上了,真是累死了!     這個時候我又有了新的麻煩:雖然我按照一篇文件一個檔案來分開,但是這些檔案非常多,而且標題都不明確,單從檔名字上來看根本就不知道內容是什麼,如果要知道是什麼內容,還是需要一個一個開啟來看。     這樣並不比之前的操作要輕鬆啊?我花了這麼多的時間,結果也就省了一個開啟網頁的操作,反而又增加了一個開啟Word文件的操作,這樣似乎比之前更麻煩了,畢竟我的電腦開啟網頁還好,開啟Word可慢多了,這要怎麼辦呢? 這時候我又想到了一個辦法:把這些文件全部開啟看看,然後把檔名字改好,改成我一眼就能看得懂的名字,這樣就很便於查找了吧,畢竟看一眼名字就知道這個檔案是不是我想要的,於是我又花了好幾天的時間,把這些文件按照文章的內容,概括出來一個主題,把它當作文件的名字,當我完成之後我覺得目前就可以很輕鬆的通過Wrod自帶的查詢功能來找到我想要的文件來看了,我覺得我的整理工作以及結束了     可是當我開始複習這些資料的時候,又發現了一個問題:這些文件讀起來很冗餘,很多的地方都是重複的,而且有的幾乎都全部重複了僅僅有一小部分才是不同的,比如什麼Hadoop的定義啥的,這些很多文件都寫了,而且都是一模一樣的,每次開啟文件都要看一遍,而且還很佔用我的磁碟空間,而另外一些,比如Hadoop的版本解讀,我搜集的這些文件,從1.0.x到3.0.x的版本解讀都有,但是我想要從1.0到3.0的版本變化,這樣的話的得把這些文件全部都開啟,然後一個文件一個文件的看,每次這樣翻我也很煩躁,我只想更懶一點,為什麼沒有一個文件整理了從1.0到3.0所有的版本變化呢?我在網上也沒找到,哎,靠人不如靠自己,我還是自己來吧!     這個時候我經過了前兩次的整理經歷之後我學聰明瞭,我沒有一開始就著手整理,我想了一下,我現在到底需要整理成什麼樣子? 1.不變的東西整理到一個文件裡面去,上面寫上xxxx定義  2.會變的東西,比如版本解讀啥的,每個版本都會有一個文件,這些我也整理到一個文件裡面去,這樣我就不用到處翻來翻去了 3.但是之前的這些東西我不能刪掉,我自己合併的東西可能有的不全,或者是合併的有問題,我需要找原來的文件對比一下,如果我把之前的刪掉,一旦我打錯了字,我可能就會一直學了錯的知識了     好吧,我目前就想到這麼多,那我就開始整理吧!於是我又花了好幾天的時間,把原來的文件中的東西提取出來,重複的定義都合併到一起並且只留一份,不同的版本解讀我放到一個文件裡面去,然後我要儲存之前的那些原始的文件,這倆東西不能都在一個都放在一個資料夾裡面吧,這樣也太亂了,於是我又打算吧這兩個放在兩個資料夾裡面,我建立了兩個資料夾,一個存放原始的文件,一個存放我整理好的文件,然後把這倆資料夾都放到 一個叫知識庫的資料夾裡面,這樣我的整理工作貌似真的已經完成了。 現在,我想看Hadoop相關的版本解讀的話,我就開啟版本解讀文件就可以了,如果我想看Hadoop的定義和版本解讀呢?我就開啟這兩個文件,一個放在螢幕左邊,一個放在右邊,這樣看起來也很舒服,至此,我的整理工作真的算完成了。     然後我突然想到,我X,我不就是在搭建資料倉庫嗎???     是的,大家看到這裡,如果對資料倉庫有了一些瞭解的話已經知道了資料倉庫的一般流程了,把上文的一些名詞換成資料倉庫的名詞:     各個論壇和實體書的文章 ->搭建數倉之前各個系統的資料來源,比如MySQL,Oracle等傳統關係型資料,還要一些業務日誌和埋點日誌(比如說你在某寶點選某個商品啊,瀏覽了某些商品啊,這些都是有記錄的,也叫做埋點資料,前端已經在你點選進入這個商品的詳情頁的時候做了埋點,你點進去就會產生了一條資料,會記錄你點選的商品記錄和你這個使用者的一般資訊,這就叫做埋點日誌)       把這些不在同一個論壇,甚至在實體書上的文章,都統一放到Word文件上,並且稍微改個檔名 --->利用一些資料匯入工具,比如Sqoop,Flume,DataX(阿里雲的產品,但已開源),把這些不同系統上面的資料,都匯入到同一個框架裡,這裡大部分都是匯入到Hive裡,它利用HDFS儲存,具有天然的容災性,查詢的引擎是MR(也可以使用Spark),對於這麼大的資料量是再適合不過了。這種遷移資料的行為已經是搭建數倉的一部分了,這些遷移過來的資料作為資料倉庫的ODS層(資料準備層),這一層是為加下來的資料層提供原始資料,我們儘量不做什麼變動,只做一些資料按日期分表儲存,把這些資料按照主題和邏輯劃分好。       把文章去重,把版本解讀放到一起 --->對應資料倉庫的DW層,這一層的主要任務就是把原始資料進行ETL,把原始資料分為維度表和事實表(這種方法稱為維度建模),把細粒度的資料聚合成粗粒的表,把一些維度退化,形成業務寬表等等       使用文件  --->對應資料倉庫的ADS層(也叫ST層),ST層面向用戶應用和分析需求,包括前端報表、分析圖表、KPI、儀表盤、OLAP、專題等分析,面向最終結果使用者       這樣,我們就完成了一個簡單的資料倉庫(三層),其中DW層還可以細分為DWD,DM等,這個就看實際情況了,靈活分層    

資料湖與資料中臺

  至於資料湖和資料中臺呢?   我是這樣理解資料湖的,上面的例子裡,我們在把各種不同論壇的文章匯入到Word文件中的時候,其實已經丟失掉了一層資訊:來源 放到Word文件之後,你就無法知道某篇文章到底來自於哪個論壇的了 ,而資料湖呢?資料湖是盡力保持所有資料的原始面貌,不丟失任何資訊,同樣,也不會做任何的處理(因為你處理資料多多少少會丟失掉一部分資訊),盡力保持資料的原汁原味,因為誰也不知道以後某些資料又擁有多達的價值,所以我們需要保持資料的原封原貌,而這個時候我們可以把資料倉庫想象成一個在湖邊的礦泉水加工廠,一邊抽取湖中的水(資料),進行各種清洗消毒加工,最後生產出各種各樣包裝的礦泉水來,這就是這兩個概念我自己理解。     下面是維基百科上關於資料湖的定義:資料湖(Data Lake)是一個儲存企業的各種各樣原始資料的大型倉庫,其中的資料可供存取、處理、分析及傳輸。資料湖是以其自然格式儲存的資料的系統或儲存庫,通常是物件blob或檔案。資料湖通常是企業所有資料的單一儲存,包括源系統資料的原始副本,以及用於報告、視覺化、分析和機器學習等任務的轉換資料。資料湖可以包括來自關係資料庫(行和列)的結構化資料,半結構化資料(CSV,日誌,XML,JSON),非結構化資料(電子郵件,文件,PDF)和二進位制資料(影象,音訊,視訊)。   至於資料中臺呢?我們先來看下資料中臺的定義:   資料中臺是指通過企業內外部多源異構的資料採集、治理、建模、分析,應用,使資料對內優化管理提高業務,對外可以資料合作價值釋放,成為企業資料資產管理中樞。資料中臺建立後,會形成資料API,為企業和客戶提供高效各種資料服務。(這個概念最早由阿里提出,實際上阿里雲的一些雲產品就是一個大的資料中臺)   又回到之前說的礦泉水加工廠的例子,如果我們只有一個加工廠,那肯定是僅僅不夠的,因為我們不僅要喝水,還要喝的是安全健康的水,這個檢測如果工廠內自己做,大家還是不太相信的,那麼還是需要別人來檢測,監管加工廠的質量和水質等安全問題,這些的監管檢測機制,而且還有一個問題就是,加工廠缺少一個管賬的,內部的財務狀況很混亂, 因此,加工廠又請了另一家公司來為他們做財務管理,如此,再加上加工廠內部的更新換代,又增加了新技術來加工礦泉水(機器學習,資料探勘等),加工廠是越來越大了,而包含兼管人員,財務管理和整個加工廠在內的,就是大家常說的資料中臺了。  
      以上就是我自己理解的資料倉庫、資料湖和資料中臺的概念了,如果有錯誤,歡迎在評論區指正