1. 常用的存儲架構有
順序存儲方法它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程序設計語言中的數組來實現。
鏈接存儲方法它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。
順序存儲和鏈接存儲的基本原理
順序存儲和鏈接存儲是數據的兩種最基本的存儲結構。
在順序存儲中,每個存儲空間含有所存元素本身的信息,元素之間的邏輯關系是通過數組下標位置簡單計算出來的線性表的順序存儲,若一個元素存儲在對應數組中的下標位置為i,則它的前驅元素在對應數組中的下標位置為i-1,它的後繼元素在對應數組中的下標位置為i+1。在鏈式存儲結構中,存儲結點不僅含有所存元素本身的信息,而且含有元素之間邏輯關系的信息。
數據的鏈式存儲結構可用鏈接表來表示。
其中data表示值域,用來存儲節點的數值部分。Pl,p2,…,Pill(1n≥1)均為指針域,每個指針域為其對應的後繼元素或前驅元素所在結點(以後簡稱為後繼結點或前驅結點)的存儲位置。通過結點的指針域(又稱為鏈域)可以訪問到對應的後繼結點或前驅結點,若一個結點中的某個指針域不需要指向其他結點,則令它的值為空(NULL)。
在數據的順序存儲中,由於每個元素的存儲位置都可以通過簡單計算得到,所以訪問元素的時間都相同;而在數據的鏈接存儲中,由於每個元素的存儲位置保存在它的前驅或後繼結點中,所以只有當訪問到其前驅結點或後繼結點後才能夠按指針訪問到,訪問任一元素的時間與該元素結點在鏈式存儲結構中的位置有關。
儲存器方面的儲存結構
儲存系統的層次結構為了解決存儲器速度與價格之間的矛盾,出現了存儲器的層次結構。
程序的局部性原理
在某一段時間內,CPU頻繁訪問某一局部的存儲器區域,而對此范圍外的地址則較少訪問的現象就是
程序的局部性原理。層次結構是基於程序的局部性原理的。對大量典型程序運行情況的統計分析得出的結論是:CPU對某些地址的訪問在短時間間隔內出現集中分布的傾向。這有利於對存儲器實現層次結構。
多級存儲體系的組成
目前,大多採用三級存儲結構。
即:Cache-主存-輔存,如下圖:
3、多級存儲系統的性能
考慮由Cache和主存構成的兩級存儲系統,其性能主要取決於Cache和貯存的存取周期以及訪問它們的
次數。(存取周期為: Tc,Tm ;訪問次數為: Nc,Nm)
(1)Cache的命中率 H= Nc / (Nc+Nm)
(2)CPU訪存的平均時間 Ta= H * Tc+ (1-H) Tm
Cache-主存系統的效率
e= Tc / Ta
=1/H+(1-H)Tm/Tc
根據統計分析:Cache的命中率可以達到90%~98%
當Cache的容量為:32KB時,命中率為86%
64KB時,命中率為92%
128KB時,命中率為95%
256KB時,命中率為98%
2. 大數據平台架構有哪些
一、事務使用:其實指的是數據收集,你經過什麼樣的方法收集到數據。互聯網收集數據相對簡略,經過網頁、App就能夠收集到數據,比方許多銀行現在都有自己的App。
更深層次的還能收集到用戶的行為數據,能夠切分出來許多維度,做很細的剖析。但是對於涉及到線下的行業,數據收集就需要藉助各類的事務體系去完成。
二、數據集成:指的其實是ETL,指的是用戶從數據源抽取出所需的數據,經過數據清洗,終究依照預先定義好的數據倉庫模型,將數據載入到數據倉庫中去。而這兒的Kettle僅僅ETL的其中一種。
三、數據存儲:指的便是數據倉庫的建設了,簡略來說能夠分為事務數據層(DW)、指標層、維度層、匯總層(DWA)。
四、數據同享層:表明在數據倉庫與事務體系間提供數據同享服務。Web Service和Web API,代表的是一種數據間的銜接方法,還有一些其他銜接方法,能夠依照自己的情況來確定。
五、數據剖析層:剖析函數就相對比較容易理解了,便是各種數學函數,比方K均值剖析、聚類、RMF模型等等。
六、數據展現:結果以什麼樣的方式呈現,其實便是數據可視化。這兒建議用敏捷BI,和傳統BI不同的是,它能經過簡略的拖拽就生成報表,學習成本較低。
七、數據訪問:這個就比較簡略了,看你是經過什麼樣的方法去查看這些數據,圖中示例的是因為B/S架構,終究的可視化結果是經過瀏覽器訪問的。
關於大數據平台架構有哪些,青藤小編就和您分享到這里了。如果您對大數據工程有濃厚的興趣,希望這篇文章能夠對你有所幫助。如果您還想了解更多關於數據分析師、大數據工程師的技巧及素材等內容,可以點擊本站的其他文章進行學習。
3. 存儲的架構有哪些
目前市場上的存儲架構如下:
(1)基於嵌入式架構的存儲系統
節點NVR架構主要面向小型高清監控系統,高清前端數量一般在幾十路以內。系統建設中沒有大型的存儲監控中心機房,存儲容量相對較小,用戶體驗度、系統功能集成度要求較高。在市場應用層面,超市、店鋪、小型企業、政法行業中基本管理單元等應用較為廣泛。
(2)基於X86架構的存儲系統
平台SAN架構主要面向中大型高清監控系統,前端路數成百上千甚至上萬。一般多採用IPSAN或FCSAN搭建高清視頻存儲系統。作為監控平台的重要組成部分,前端監控數據通過錄像存儲管理模塊存儲到SAN中。
此種架構接入高清前端路數相對節點NVR有了較高提升,具備快捷便利的可擴展性,技術成熟。對於IPSAN而言,雖然在ISCSI環節數據並發讀寫傳輸速率有所消耗,但其憑借擴展性良好、硬體平台通用、海量數據可充分共享等優點,仍然得到很多客戶的青睞。FCSAN在行業用戶、封閉存儲系統中應用較多,比如縣級或地級市高清監控項目,大數據量的並發讀寫對千兆網路交換提出了較大的挑戰,但應用FCSAN構建相對獨立的存儲子系統,可以有效解決上述問題。
(3)基於雲技術的存儲方案
當前,安防行業可謂「雲」山「物」罩。隨著視頻監控的高清化和網路化,存儲和管理的視頻數據量已有海量之勢,雲存儲技術是突破IP高清監控存儲瓶頸的重要手段。雲存儲作為一種服務,在未來安防監控行業有著客觀的應用前景。
與傳統存儲設備不同,雲存儲不僅是一個硬體,而是一個由網路設備、存儲設備、伺服器、軟體、接入網路、用戶訪問介面以及客戶端程序等多個部分構成的復雜系統。該系統以存儲設備為核心,通過應用層軟體對外提供數據存儲和業務服務。
4. 大數據系統架構包含內容涉及哪些
【導語】大數據的應用開發過於偏向底層,具有學習難度大,涉及技術面廣的問題,這制約了大數據的普及。大數據架構是大數據技術應用的一個非常常見的形式,那麼大數據系統架構包含內容涉及哪些?下面我們就來具體了解一下。
1、數據源
所有大數據架構都從源代碼開始。這可以包含來源於資料庫的數據、來自實時源(如物聯網設備)的數據,及其從應用程序(如Windows日誌)生成的靜態文件。
2、實時消息接收
假如有實時源,則需要在架構中構建一種機制來攝入數據。
3、數據存儲
公司需要存儲將通過大數據架構處理的數據。一般而言,數據將存儲在數據湖中,這是一個可以輕松擴展的大型非結構化資料庫。
4、批處理和實時處理的組合
公司需要同時處理實時數據和靜態數據,因而應在大數據架構中內置批量和實時處理的組合。這是由於能夠應用批處理有效地處理大批量數據,而實時數據需要立刻處理才能夠帶來價值。批處理涉及到長期運轉的作業,用於篩選、聚合和准備數據開展分析。
5、分析數據存儲
准備好要分析的數據後,需要將它們放到一個位置,便於對整個數據集開展分析。分析數據儲存的必要性在於,公司的全部數據都聚集在一個位置,因而其分析將是全面的,而且針對分析而非事務進行了優化。這可能採用基於雲計算的數據倉庫或關系資料庫的形式,具體取決於公司的需求。
6、分析或報告工具
在攝入和處理各類數據源之後,公司需要包含一個分析數據的工具。一般而言,公司將使用BI(商業智能)工具來完成這項工作,而且或者需要數據科學家來探索數據。
關於大數據系統架構包含內容涉及哪些,就給大家分享到這里了,希望對大家能有所幫助,作為新時代大學生,我們只有不算提升自我技能,充實自我,才是最為正確的選擇。
5. 大數據平台架構如何進行 包括哪些方面
【導語】大數據平台將互聯網使用和大數據產品整合起來,將實時數據和離線數據打通,使數據能夠實現更大規模的相關核算,挖掘出數據更大的價值,然後實現數據驅動事務,那麼大數據平台架構如何進行?包括哪些方面呢?
1、事務使用:
其實指的是數據收集,你經過什麼樣的方法收集到數據。互聯網收集數據相對簡略,經過網頁、App就能夠收集到數據,比方許多銀行現在都有自己的App。
更深層次的還能收集到用戶的行為數據,能夠切分出來許多維度,做很細的剖析。但是對於涉及到線下的行業,數據收集就需要藉助各類的事務體系去完成。
2、數據集成:
指的其實是ETL,指的是用戶從數據源抽取出所需的數據,經過數據清洗,終究依照預先定義好的數據倉庫模型,將數據載入到數據倉庫中去。而這兒的Kettle僅僅ETL的其中一種。
3、數據存儲:
指的便是數據倉庫的建設了,簡略來說能夠分為事務數據層(DW)、指標層、維度層、匯總層(DWA)。
4、數據同享層:
表明在數據倉庫與事務體系間提供數據同享服務。Web Service和Web
API,代表的是一種數據間的銜接方法,還有一些其他銜接方法,能夠依照自己的情況來確定。
5、數據剖析層:
剖析函數就相對比較容易理解了,便是各種數學函數,比方K均值剖析、聚類、RMF模型等等。
6、數據展現:
結果以什麼樣的方式呈現,其實便是數據可視化。這兒建議用敏捷BI,和傳統BI不同的是,它能經過簡略的拖拽就生成報表,學習成本較低。
7、數據訪問:
這個就比較簡略了,看你是經過什麼樣的方法去查看這些數據,圖中示例的是因為B/S架構,終究的可視化結果是經過瀏覽器訪問的。
關於大數據平台架構內容,就給大家介紹到這里了,不知道大家是不是有所了解呢,未來,大數據對社會發展的重大影響必將會決定未來的發展趨勢,所以有想法考生要抓緊時間學起來了。
6. 雲存儲架構分哪些層次,各自實現了什麼功能
(1)存儲層
雲存儲系統對外提供多種不同的存儲服務,各種服務的數據統一存放在雲存儲系統中,形成一個海量數據池。從大多數網路服務後台數據組織方式來看,傳統基於單伺服器的數據組織難以滿足廣域網多用戶條件下的吞吐性能和存儲容量需求;基於P2P架構的數據組織需要龐大的節點數量和復雜編碼演算法保證數據可靠性。相比而言,基於多存儲伺服器的數據組織方法能夠更好滿足在線存儲服務的應用需求,在用戶規模較大時,構建分布式數據中心能夠為不同地理區域的用戶提供更好的服務質量。
雲存儲的存儲層將不同類型的存儲設備互連起來,實現海量數據的統一管理,同時實現對存儲設備的集中管理、狀態監控以及容量的動態擴展,實質是一種面向服務的分布式存儲系統。
(2)基礎管理層
雲存儲系統架構中的基礎管理層為上層提供不同服務間公共管理的統一視圖。通過設計統一的用戶管理、安全管理、副本管理及策略管理等公共數據管理功能,將底層存儲與上層應用無縫銜接起來,實現多存儲設備之間的協同工作,以更好的性能對外提供多種服務。
(3)應用介面層
應用介面層是雲存儲平台中可以靈活擴展的、直接面向用戶的部分。根據用戶需求,可以開發出不同的應用介面,提供相應的服務。比如數據存儲服務、空間租賃服務、公共資源服務、多用戶數據共享服務、數據備份服務等。
(4)訪問層
通過訪問層,任何一個授權用戶都可以在任何地方,使用一台聯網的終端設備,按照標準的公用應用介面來登錄雲存儲平台,享受雲存儲服務。
2雲存儲技術的優勢
作為新興的存儲技術,與傳統的購買存儲設備和部署存儲軟體相比,雲存儲方式存在以下優點:
(1)成本低、見效快
傳統的購買存儲設備或軟體定製方式下,企業根據信息化管理的需求,一次性投入大量資金購置硬體設備、搭建平台。軟體開發則經過漫長的可行性分析、需求調研、軟體設計、編碼、測試這一過程。往往在軟體開發完成以後,業務需求發生變化,不得不對軟體進行返工,不僅影響質量,提高成本,更是延誤了企業信息化進程,同時造成了企業之間的低水平重復投資以及企業內部周期性、高成本的技術升級。在雲存儲方式下,企業除了配置必要的終端設備接收存儲服務外,不需要投入額外的資金來搭建平台。企業只需按用戶數分期租用服務,規避了一次性投資的風險,降低了使用成本,而且對於選定的服務,可以立即投入使用,既方便又快捷。
(2)易於管理
傳統方式下,企業需要配備專業的IT人員進行系統的維護,由此帶來技術和資金成本。雲存儲模式下,維護工作以及系統的更新升級都由雲存儲服務提供商完成,企業能夠以最低的成本享受到最新最專業的服務。
(3)方式靈活
傳統的購買和定製模式下,一旦完成資金的一次性投入,系統無法在後續使用中動態調整。隨著設備的更新換代,落後的硬體平台難以處置;隨著業務需求的不斷變化,軟體需要不斷地更新升級甚至重構來與之相適應,導致維護成本高昂,很容易發展到不可控的程度。而雲存儲方式一般按照客戶數、使用時間、服務項目進行收費。企業可以根據業務需求變化、人員增減、資金承受能力,隨時調整其租用服務方式,真正做到「按需使用」。
3雲存儲技術趨勢
隨著寬頻網路的發展,集群技術、網格技術和分布式文件系統的拓展,CDN內容分發、P2P、數據壓縮技術的廣泛運用,以及存儲虛擬化技術的完善,雲存儲在技術上已經趨於成熟,以「用戶創造內容」和「分享」為精神的Web2.0推動了全網域用戶對在線服務的認知
7. 怎樣的架構設計才是真正的數據倉庫架構
一直想整理一下這塊內容,既然是漫談,就想起什麼說什麼吧。我一直是在互聯網行業,就以互聯網行業來說。
先大概列一下互聯網行業數據倉庫、數據平台的用途:
整合公司所有業務數據,建立統一的數據中心;
提供各種報表,有給高層的,有給各個業務的;
為網站運營提供運營上的數據支持,就是通過數據,讓運營及時了解網站和產品的運營效果;
為各個業務提供線上或線下的數據支持,成為公司統一的數據交換與提供平台;
分析用戶行為數據,通過數據挖掘來降低投入成本,提高投入效果;比如廣告定向精準投放、用戶個性化推薦等;
開發數據產品,直接或間接為公司盈利;
建設開放數據平台,開放公司數據;
。。。。。。
- 上面列出的內容看上去和傳統行業數據倉庫用途差不多,並且都要求數據倉庫/數據平台有很好的穩定性、可靠性;但在互聯網行業,除了數據量大之外,越來越多的業務要求時效性,甚至很多是要求實時的 ,另外,互聯網行業的業務變化非常快,不可能像傳統行業一樣,可以使用自頂向下的方法建立數據倉庫,一勞永逸,它要求新的業務很快能融入數據倉庫中來,老的下線的業務,能很方便的從現有的數據倉庫中下線;
- 其實,互聯網行業的數據倉庫就是所謂的敏捷數據倉庫,不但要求能快速的響應數據,也要求能快速的響應業務;
- 建設敏捷數據倉庫,除了對架構技術上的要求之外,還有一個很重要的方面,就是數據建模,如果一上來就想著建立一套能兼容所有數據和業務的數據模型,那就又回到傳統數據倉庫的建設上了,很難滿足對業務變化的快速響應。應對這種情況,一般是先將核心的持久化的業務進行深度建模(比如:基於網站日誌建立的網站統計分析模型和用戶瀏覽軌跡模型;基於公司核心用戶數據建立的用戶模型),其它的業務一般都採用維度+寬表的方式來建立數據模型。這塊是後話。
- 整體架構下面的圖是我們目前使用的數據平台架構圖,其實大多公司應該都差不多:
- 邏輯上,一般都有數據採集層、數據存儲與分析層、數據共享層、數據應用層。可能叫法有所不同,本質上的角色都大同小異。
- 我們從下往上看:
- 數據採集數據採集層的任務就是把數據從各種數據源中採集和存儲到數據存儲上,期間有可能會做一些簡單的清洗。
- 數據源的種類比較多:
網站日誌:
- 作為互聯網行業,網站日誌占的份額最大,網站日誌存儲在多台網站日誌伺服器上,
- 一般是在每台網站日誌伺服器上部署flume agent,實時的收集網站日誌並存儲到HDFS上;
業務資料庫:
- 業務資料庫的種類也是多種多樣,有Mysql、Oracle、SqlServer等,這時候,我們迫切的需要一種能從各種資料庫中將數據同步到HDFS上的工具,Sqoop是一種,但是Sqoop太過繁重,而且不管數據量大小,都需要啟動MapRece來執行,而且需要Hadoop集群的每台機器都能訪問業務資料庫;應對此場景,淘寶開源的DataX,是一個很好的解決方案(可參考文章 《異構數據源海量數據交換工具-Taobao DataX 下載和使用》),有資源的話,可以基於DataX之上做二次開發,就能非常好的解決,我們目前使用的DataHub也是。
- 當然,Flume通過配置與開發,也可以實時的從資料庫中同步數據到HDFS。
來自於Ftp/Http的數據源:
- 有可能一些合作夥伴提供的數據,需要通過Ftp/Http等定時獲取,DataX也可以滿足該需求;
其他數據源:
- 比如一些手工錄入的數據,只需要提供一個介面或小程序,即可完成;
- 數據存儲與分析毋庸置疑,HDFS是大數據環境下數據倉庫/數據平台最完美的數據存儲解決方案。
- 離線數據分析與計算,也就是對實時性要求不高的部分,在我看來,Hive還是首當其沖的選擇,豐富的數據類型、內置函數;壓縮比非常高的ORC文件存儲格式;非常方便的SQL支持,使得Hive在基於結構化數據上的統計分析遠遠比MapRece要高效的多,一句SQL可以完成的需求,開發MR可能需要上百行代碼;
- 當然,使用Hadoop框架自然而然也提供了MapRece介面,如果真的很樂意開發Java,或者對SQL不熟,那麼也可以使用MapRece來做分析與計算;Spark是這兩年非常火的,經過實踐,它的性能的確比MapRece要好很多,而且和Hive、Yarn結合的越來越好,因此,必須支持使用Spark和SparkSQL來做分析和計算。因為已經有Hadoop Yarn,使用Spark其實是非常容易的,不用單獨部署Spark集群,關於Spark On Yarn的相關文章,可參考:《Spark On Yarn系列文章》
- 實時計算部分,後面單獨說。
- 數據共享這里的數據共享,其實指的是前面數據分析與計算後的結果存放的地方,其實就是關系型資料庫和NOSQL資料庫;
- 前面使用Hive、MR、Spark、SparkSQL分析和計算的結果,還是在HDFS上,但大多業務和應用不可能直接從HDFS上獲取數據,那麼就需要一個數據共享的地方,使得各業務和產品能方便的獲取數據;和數據採集層到HDFS剛好相反,這里需要一個從HDFS將數據同步至其他目標數據源的工具,同樣,DataX也可以滿足。
- 另外,一些實時計算的結果數據可能由實時計算模塊直接寫入數據共享。
- 數據應用
業務產品
- 業務產品所使用的數據,已經存在於數據共享層,他們直接從數據共享層訪問即可;
報表
- 同業務產品,報表所使用的數據,一般也是已經統計匯總好的,存放於數據共享層;
即席查詢
- 即席查詢的用戶有很多,有可能是數據開發人員、網站和產品運營人員、數據分析人員、甚至是部門老大,他們都有即席查詢數據的需求;
- 這種即席查詢通常是現有的報表和數據共享層的數據並不能滿足他們的需求,需要從數據存儲層直接查詢。
- 即席查詢一般是通過SQL完成,最大的難度在於響應速度上,使用Hive有點慢,目前我的解決方案是SparkSQL,它的響應速度較Hive快很多,而且能很好的與Hive兼容。
- 當然,你也可以使用Impala,如果不在乎平台中再多一個框架的話。
OLAP
- 目前,很多的OLAP工具不能很好的支持從HDFS上直接獲取數據,都是通過將需要的數據同步到關系型資料庫中做OLAP,但如果數據量巨大的話,關系型資料庫顯然不行;
- 這時候,需要做相應的開發,從HDFS或者HBase中獲取數據,完成OLAP的功能;
- 比如:根據用戶在界面上選擇的不定的維度和指標,通過開發介面,從HBase中獲取數據來展示。
其它數據介面
- 這種介面有通用的,有定製的。比如:一個從Redis中獲取用戶屬性的介面是通用的,所有的業務都可以調用這個介面來獲取用戶屬性。
- 實時計算現在業務對數據倉庫實時性的需求越來越多,比如:實時的了解網站的整體流量;實時的獲取一個廣告的曝光和點擊;在海量數據下,依靠傳統資料庫和傳統實現方法基本完成不了,需要的是一種分布式的、高吞吐量的、延時低的、高可靠的實時計算框架;Storm在這塊是比較成熟了,但我選擇Spark Streaming,原因很簡單,不想多引入一個框架到平台中,另外,Spark Streaming比Storm延時性高那麼一點點,那對於我們的需要可以忽略。
- 我們目前使用Spark Streaming實現了實時的網站流量統計、實時的廣告效果統計兩塊功能。
- 做法也很簡單,由Flume在前端日誌伺服器上收集網站日誌和廣告日誌,實時的發送給Spark Streaming,由Spark Streaming完成統計,將數據存儲至Redis,業務通過訪問Redis實時獲取。
- 任務調度與監控在數據倉庫/數據平台中,有各種各樣非常多的程序和任務,比如:數據採集任務、數據同步任務、數據分析任務等;
- 這些任務除了定時調度,還存在非常復雜的任務依賴關系,比如:數據分析任務必須等相應的數據採集任務完成後才能開始;數據同步任務需要等數據分析任務完成後才能開始;這就需要一個非常完善的任務調度與監控系統,它作為數據倉庫/數據平台的中樞,負責調度和監控所有任務的分配與運行。
- 前面有寫過文章,《大數據平台中的任務調度與監控》,這里不再累贅。
- 總結在我看來架構並不是技術越多越新越好,而是在可以滿足需求的情況下,越簡單越穩定越好。目前在我們的數據平台中,開發更多的是關注業務,而不是技術,他們把業務和需求搞清楚了,基本上只需要做簡單的SQL開發,然後配置到調度系統就可以了,如果任務異常,會收到告警。這樣,可以使更多的資源專注於業務之上。
8. 選擇什麼樣的數據倉庫架構比較好如何選擇呢
一直想整理一下這塊內容,既然是漫談,就想起什麼說什麼吧。我一直是在互聯網行業,就以互聯網行業來說。
先大概列一下互聯網行業數據倉庫、數據平台的用途:
整合公司所有業務數據,建立統一的數據中心;
提供各種報表,有給高層的,有給各個業務的;
為網站運營提供運營上的數據支持,就是通過數據,讓運營及時了解網站和產品的運營效果;
為各個業務提供線上或線下的數據支持,成為公司統一的數據交換與提供平台;
分析用戶行為數據,通過數據挖掘來降低投入成本,提高投入效果;比如廣告定向精準投放、用戶個性化推薦等;
開發數據產品,直接或間接為公司盈利;
建設開放數據平台,開放公司數據;
。。。。。。
上面列出的內容看上去和傳統行業數據倉庫用途差不多,並且都要求數據倉庫/數據平台有很好的穩定性、可靠性;但在互聯網行業,除了數據量大之外,越來越多的業務要求時效性,甚至很多是要求實時的 ,另外,互聯網行業的業務變化非常快,不可能像傳統行業一樣,可以使用自頂向下的方法建立數據倉庫,一勞永逸,它要求新的業務很快能融入數據倉庫中來,老的下線的業務,能很方便的從現有的數據倉庫中下線;
其實,互聯網行業的數據倉庫就是所謂的敏捷數據倉庫,不但要求能快速的響應數據,也要求能快速的響應業務;
建設敏捷數據倉庫,除了對架構技術上的要求之外,還有一個很重要的方面,就是數據建模,如果一上來就想著建立一套能兼容所有數據和業務的數據模型,那就又回到傳統數據倉庫的建設上了,很難滿足對業務變化的快速響應。應對這種情況,一般是先將核心的持久化的業務進行深度建模(比如:基於網站日誌建立的網站統計分析模型和用戶瀏覽軌跡模型;基於公司核心用戶數據建立的用戶模型),其它的業務一般都採用維度+寬表的方式來建立數據模型。這塊是後話。
整體架構下面的圖是我們目前使用的數據平台架構圖,其實大多公司應該都差不多:
邏輯上,一般都有數據採集層、數據存儲與分析層、數據共享層、數據應用層。可能叫法有所不同,本質上的角色都大同小異。
我們從下往上看:
數據採集數據採集層的任務就是把數據從各種數據源中採集和存儲到數據存儲上,期間有可能會做一些簡單的清洗。
數據源的種類比較多:
網站日誌:
作為互聯網行業,網站日誌占的份額最大,網站日誌存儲在多台網站日誌伺服器上,
一般是在每台網站日誌伺服器上部署flume agent,實時的收集網站日誌並存儲到HDFS上;
業務資料庫:
業務資料庫的種類也是多種多樣,有Mysql、Oracle、SqlServer等,這時候,我們迫切的需要一種能從各種資料庫中將數據同步到HDFS上的工具,Sqoop是一種,但是Sqoop太過繁重,而且不管數據量大小,都需要啟動MapRece來執行,而且需要Hadoop集群的每台機器都能訪問業務資料庫;應對此場景,淘寶開源的DataX,是一個很好的解決方案(可參考文章 《異構數據源海量數據交換工具-Taobao DataX 下載和使用》),有資源的話,可以基於DataX之上做二次開發,就能非常好的解決,我們目前使用的DataHub也是。
當然,Flume通過配置與開發,也可以實時的從資料庫中同步數據到HDFS。
來自於Ftp/Http的數據源:
有可能一些合作夥伴提供的數據,需要通過Ftp/Http等定時獲取,DataX也可以滿足該需求;
其他數據源:
比如一些手工錄入的數據,只需要提供一個介面或小程序,即可完成;
數據存儲與分析毋庸置疑,HDFS是大數據環境下數據倉庫/數據平台最完美的數據存儲解決方案。
離線數據分析與計算,也就是對實時性要求不高的部分,在我看來,Hive還是首當其沖的選擇,豐富的數據類型、內置函數;壓縮比非常高的ORC文件存儲格式;非常方便的SQL支持,使得Hive在基於結構化數據上的統計分析遠遠比MapRece要高效的多,一句SQL可以完成的需求,開發MR可能需要上百行代碼;
當然,使用Hadoop框架自然而然也提供了MapRece介面,如果真的很樂意開發Java,或者對SQL不熟,那麼也可以使用MapRece來做分析與計算;Spark是這兩年非常火的,經過實踐,它的性能的確比MapRece要好很多,而且和Hive、Yarn結合的越來越好,因此,必須支持使用Spark和SparkSQL來做分析和計算。因為已經有Hadoop Yarn,使用Spark其實是非常容易的,不用單獨部署Spark集群,關於Spark On Yarn的相關文章,可參考:《Spark On Yarn系列文章》
實時計算部分,後面單獨說。
數據共享這里的數據共享,其實指的是前面數據分析與計算後的結果存放的地方,其實就是關系型資料庫和NOSQL資料庫;
前面使用Hive、MR、Spark、SparkSQL分析和計算的結果,還是在HDFS上,但大多業務和應用不可能直接從HDFS上獲取數據,那麼就需要一個數據共享的地方,使得各業務和產品能方便的獲取數據;和數據採集層到HDFS剛好相反,這里需要一個從HDFS將數據同步至其他目標數據源的工具,同樣,DataX也可以滿足。
另外,一些實時計算的結果數據可能由實時計算模塊直接寫入數據共享。
數據應用
業務產品
業務產品所使用的數據,已經存在於數據共享層,他們直接從數據共享層訪問即可;
報表
同業務產品,報表所使用的數據,一般也是已經統計匯總好的,存放於數據共享層;
即席查詢
即席查詢的用戶有很多,有可能是數據開發人員、網站和產品運營人員、數據分析人員、甚至是部門老大,他們都有即席查詢數據的需求;
這種即席查詢通常是現有的報表和數據共享層的數據並不能滿足他們的需求,需要從數據存儲層直接查詢。
即席查詢一般是通過SQL完成,最大的難度在於響應速度上,使用Hive有點慢,目前我的解決方案是SparkSQL,它的響應速度較Hive快很多,而且能很好的與Hive兼容。
當然,你也可以使用Impala,如果不在乎平台中再多一個框架的話。
OLAP
目前,很多的OLAP工具不能很好的支持從HDFS上直接獲取數據,都是通過將需要的數據同步到關系型資料庫中做OLAP,但如果數據量巨大的話,關系型資料庫顯然不行;
這時候,需要做相應的開發,從HDFS或者HBase中獲取數據,完成OLAP的功能;
比如:根據用戶在界面上選擇的不定的維度和指標,通過開發介面,從HBase中獲取數據來展示。
其它數據介面
這種介面有通用的,有定製的。比如:一個從Redis中獲取用戶屬性的介面是通用的,所有的業務都可以調用這個介面來獲取用戶屬性。
實時計算現在業務對數據倉庫實時性的需求越來越多,比如:實時的了解網站的整體流量;實時的獲取一個廣告的曝光和點擊;在海量數據下,依靠傳統資料庫和傳統實現方法基本完成不了,需要的是一種分布式的、高吞吐量的、延時低的、高可靠的實時計算框架;Storm在這塊是比較成熟了,但我選擇Spark Streaming,原因很簡單,不想多引入一個框架到平台中,另外,Spark Streaming比Storm延時性高那麼一點點,那對於我們的需要可以忽略。
我們目前使用Spark Streaming實現了實時的網站流量統計、實時的廣告效果統計兩塊功能。
做法也很簡單,由Flume在前端日誌伺服器上收集網站日誌和廣告日誌,實時的發送給Spark Streaming,由Spark Streaming完成統計,將數據存儲至Redis,業務通過訪問Redis實時獲取。
任務調度與監控在數據倉庫/數據平台中,有各種各樣非常多的程序和任務,比如:數據採集任務、數據同步任務、數據分析任務等;
這些任務除了定時調度,還存在非常復雜的任務依賴關系,比如:數據分析任務必須等相應的數據採集任務完成後才能開始;數據同步任務需要等數據分析任務完成後才能開始;這就需要一個非常完善的任務調度與監控系統,它作為數據倉庫/數據平台的中樞,負責調度和監控所有任務的分配與運行。
前面有寫過文章,《大數據平台中的任務調度與監控》,這里不再累贅。
總結在我看來架構並不是技術越多越新越好,而是在可以滿足需求的情況下,越簡單越穩定越好。目前在我們的數據平台中,開發更多的是關注業務,而不是技術,他們把業務和需求搞清楚了,基本上只需要做簡單的SQL開發,然後配置到調度系統就可以了,如果任務異常,會收到告警。這樣,可以使更多的資源專注於業務之上。
9. 傳統大數據存儲的架構有哪些各有什麼特點
數據源:所有大數據架構都從源代碼開始。這可以包含來源於資料庫的數據、來自實時源(如物聯網設備)的數據,及其從應用程序(如Windows日誌)生成的靜態文件。
實時消息接收:假如有實時源,則需要在架構中構建一種機制來攝入數據。
數據存儲:公司需要存儲將通過大數據架構處理的數據。一般而言,數據將存儲在數據湖中,這是一個可以輕松擴展的大型非結構化資料庫。
批處理和實時處理的組合:公司需要同時處理實時數據和靜態數據,因而應在大數據架構中內置批量和實時處理的組合。這是由於能夠應用批處理有效地處理大批量數據,而實時數據需要立刻處理才能夠帶來價值。批處理涉及到長期運轉的作業,用於篩選、聚合和准備數據開展分析。
分析數據存儲:准備好要分析的數據後,需要將它們放到一個位置,便於對整個數據集開展分析。分析數據儲存的必要性在於,公司的全部數據都聚集在一個位置,因而其分析將是全面的,而且針對分析而非事務進行了優化。
這可能採用基於雲計算的數據倉庫或關系資料庫的形式,具體取決於公司的需求。
分析或報告工具:在攝入和處理各類數據源之後,公司需要包含一個分析數據的工具。一般而言,公司將使用BI(商業智能)工具來完成這項工作,而且或者需要數據科學家來探索數據。
「大數據」 通常指的是那些數量巨大、難於收集、處理、分析的數據集,亦指那些在傳統基礎設施中長期保存的數據。大數據存儲是將這些數據集持久化到計算機中。