關鍵字:互聯網、大數據分析軟體、數據倉庫、數據平台、架構
前言
互聯網行業為什麼需要資料倉儲、數據平台呢?這裡大致列一些潛在的用途:
- 整合公司所有業務資料,建立統一的數據中心;
- 提供各種報表制作,有給高層的,有給各個業務的;
- 為網站運營提供運營上的支援,就是通過資料,讓運營及時了解網站和產品的運營效果;
- 為各個業務提供線上或線下的資料支援,成為公司統一的資料交換與提供平台;
- 分析用戶行為資料,通過資料勘探來降低投入成本,提高投入效果;比如廣告定向精準投放、用戶個性化推薦等;
- 開發數據產品,直接或間接為公司盈利;
- 建設開放資料平台,開放公司資料;
上面列出的內容看上去和傳統行業資料倉儲用途差不多,並且都要求資料倉儲/數據平台有很好的穩定性、可靠性。但在互聯網行業,除了數據量大之外,越來越多的業務要求時效性,甚至很多是要求實時的 。
另外,互聯網行業的業務變化非常快,不可能像傳統行業一樣,可以使用自頂向下的方法建立資料倉儲,一勞永逸,它要求新的業務很快能融入資料倉儲中來,老的業務,能很方便的從現有的資料倉儲中下線。
其實,互聯網行業的資料倉儲就是所謂的敏捷資料倉儲,不但要求能快速的響應資料,也要求能快速的響應業務。
建設敏捷資料倉儲,除了對架構技術上的要求之外,還有一個很重要的方面,就是資料倉儲,如果一上來就想著建立一套能兼容所有資料和業務的資料倉儲,那就又回到傳統資料倉儲的建設上了,很難滿足對業務變化的快速響應。應對這種情況,一般是先將核心的持久化的業務進行深度建模(比如:基於網站日誌建立的網站統計分析模型和用戶瀏覽軌跡模型;基於公司核心用戶資料建立的用戶模型),其它的業務一般都採用維度+寬表的方式來建立數據模型,這塊是後話。
整體架構
下面的圖是某公司使用的數據平台架構圖,其實大多公司應該都差不多:
邏輯上,一般都有資料獲取層、資料存儲與分析層、資料共享層、資料應用層,可能叫法有所不同,本質上的角色都大同小異。
我們從下往上看:
資料獲取
資料獲取層的任務就是把數據從各種資料源中採集和存儲到資料存儲上,期間有可能會做一些簡單的清理。
資料源的種類比較多:
網站日誌:
作為互聯網行業,網站日誌占的份額最大,網站日誌存儲在多台網站日誌伺服器上,一般是在每台網站日誌伺服器上部署flume agent,實時的收集網站日誌並存儲到HDFS上;
業務資料庫:
業務資料庫的種類也是多種多樣,有Mysql、Oracle、SqlServer等,這時候,我們迫切的需要一種能從各種資料庫中將數據同步到HDFS上的工具,Sqoop是一種,但是Sqoop太過繁重,而且不管數據量大小,都需要啟動MapReduce來執行,而且需要Hadoop集群的每台機器都能訪問業務資料庫;應對此場景,淘寶開源的DataX,是一個很好的解決方案,有資源的話,可以基於DataX之上做二次開發,就能非常好的解決。
當然,Flume通過配置與開發,也可以實時的從資料庫中同步資料到HDFS。
來自於Ftp/Http的資料源:
有可能一些合作夥伴提供的資料,需要通過Ftp/Http等定時獲取,DataX也可以滿足該需求;
其他資料源:
比如一些資料登錄需要人工完成,只需要提供一個介面或小程序,即可完成;
資料存儲與分析
毋庸置疑,HDFS是大數據環境下資料倉儲/數據平台最完美的資料存儲解決方案。
離線資料分析與計算,也就是對實時性要求不高的部分,在筆者看來,Hive還是首當其衝的選擇,豐富的資料類型、內置函數;壓縮比非常高的ORC文件存儲格式;非常方便的SQL支援,使得Hive在基於結構化資料上的統計分析遠遠比MapReduce要高效的多,一句SQL可以完成的需求,開發MR可能需要上百行代碼;
當然,使用Hadoop框架自然而然也提供了MapReduce介面,如果真的很樂意開發Java,或者對SQL不熟,那麼也可以使用MapReduce來做分析與計算;
Spark是這兩年非常火的,經過實踐,它的性能的確比MapReduce要好很多,而且和Hive、Yarn結合的越來越好,因此,必須支援使用Spark和SparkSQL來做分析和計算。因為已經有Hadoop Yarn,使用Spark其實是非常容易的,不用單獨部署Spark集群,關於Spark On Yarn的相關文章,可參考:《Spark On Yarn系列文章》
資料共享
這裡的資料共享,其實指的是前面資料分析與計算後的結果存放的地方,其實就是關係型資料庫和NOSQL資料庫;
前面使用Hive、MR、Spark、SparkSQL分析和計算的結果,還是在HDFS上,但大多業務和應用不可能直接從HDFS上獲取資料,那麼就需要一個資料共享的地方,使得各業務和產品能方便的獲取資料;和資料獲取層到HDFS剛好相反,這裡需要一個從HDFS將資料同步至其他目標資料源的工具,同樣,DataX也可以滿足。另外,一些實時計算的結果可能由實時計算模塊直接寫入資料共享。
資料應用
業務產品(CRM、ERP等)
業務產品所使用的數據,已經存在於數據共享層,直接從數據共享層訪問即可;
報表(FineReport、業務報表)
同業務產品,報表所使用的數據,一般也是已經統計匯總好的,存放於數據共享層;
即席查詢
即席查詢的用戶有很多,有可能是數據開發人員、網站和產品運營人員、數據分析人員、甚至是部門老大,他們都有即席查詢數據的需求;
這種即席查詢通常是現有的報表和數據共享層的數據並不能滿足他們的需求,需要從數據存儲層直接查詢。
即席查詢一般是通過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開發,然後配置到調度系統就可以了,如果任務異常,會收到告警。這樣,可以使更多的資源專註於業務之上。
感謝閲讀!FineReport提供最全免費功能版本,不用等待,直接點擊以下按鈕激活&下載!
免費試用FineReport10.0>
獲得帆軟最新動態:數據分析,報表實例,專業的人都在這裡!加入FineReport臉書粉絲團!
相關文章:
如何快速成為數據分析師?
喜歡這篇文章嗎?歡迎分享按讚,給予我們支持和鼓勵!