通俗語言解釋數據倉庫、數據湖、數據中台
數據倉庫
如何理解數據倉庫?舉個簡單的例子。
我現在打算學習大數據的內容,所以我看了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,為企業和客戶提供高效各種數據服務。(這個概念最早由阿里提出,實際上阿里雲的一些雲產品就是一個大的數據中台)
又回到之前說的礦泉水加工廠的例子,如果我們只有一個加工廠,那肯定是僅僅不夠的,因為我們不僅要喝水,還要喝的是安全健康的水,這個檢測如果工廠內自己做,大家還是不太相信的,那麼還是需要別人來檢測,監管加工廠的品質和水質等安全問題,這些的監管檢測機制,而且還有一個問題就是,加工廠缺少一個管賬的,內部的財務狀況很混亂, 因此,加工廠又請了另一家公司來為他們做財務管理,如此,再加上加工廠內部的更新換代,又增加了新技術來加工礦泉水(機器學習,數據挖掘等),加工廠是越來越大了,而包含兼管人員,財務管理和整個加工廠在內的,就是大家常說的數據中台了。
以上就是我自己理解的數據倉庫、數據湖和數據中台的概念了,如果有錯誤,歡迎在評論區指正!