大數據平臺核心架構圖鑒,建議收藏!
點擊關注公眾號,Java干貨及時送達
我們先來看看這張圖,這是某公司使用的大數據平臺架構圖,大部分公司應該都差不多:

從這張大數據的整體架構圖上看來,大數據的核心層應該是:數據采集層、數據存儲與分析層、數據共享層、數據應用層,可能叫法有所不同,本質上的角色都大同小異。
所以我下面就按這張架構圖上的線索,慢慢來剖析一下,大數據的核心技術都包括什么。
一、數據采集
數據采集的任務就是把數據從各種數據源中采集和存儲到數據存儲上,期間有可能會做一些簡單的清洗。
作為互聯(lián)網行業(yè),網站日志占的份額最大,網站日志存儲在多臺網站日志服務器上,一般是在每臺網站日志服務器上部署flume agent,實時的收集網站日志并存儲到HDFS上;

當然,Flume通過配置與開發(fā),也可以實時的從數據庫中同步數據到HDFS。
有可能一些合作伙伴提供的數據,需要通過Ftp/Http等定時獲取,DataX也可以滿足該需求;
比如一些手工錄入的數據,只需要提供一個接口或小程序,即可完成;
二、數據存儲與分析
毋庸置疑,HDFS是大數據環(huán)境下數據倉庫/數據平臺最完美的數據存儲解決方案。
離線數據分析與計算,也就是對實時性要求不高的部分,在筆者看來,Hive還是首當其沖的選擇,豐富的數據類型、內置函數;壓縮比非常高的ORC文件存儲格式;非常方便的SQL支持,使得Hive在基于結構化數據上的統(tǒng)計分析遠遠比MapReduce要高效的多,一句SQL可以完成的需求,開發(fā)MR可能需要上百行代碼;
另外,MySQL 系列面試題和答案全部整理好了,微信搜索Java技術棧,在后臺發(fā)送:面試,可以在線閱讀。

當然,使用Hadoop框架自然而然也提供了MapReduce接口,如果真的很樂意開發(fā)Java,或者對SQL不熟,那么也可以使用MapReduce來做分析與計算;最新面試題整理好了,點擊Java面試庫小程序在線刷題。
Spark是這兩年非常火的,經過實踐,它的性能的確比MapReduce要好很多,而且和Hive、Yarn結合的越來越好,因此,必須支持使用Spark和SparkSQL來做分析和計算。因為已經有Hadoop Yarn,使用Spark其實是非常容易的,不用單獨部署Spark集群。
三、數據共享
這里的數據共享,其實指的是前面數據分析與計算后的結果存放的地方,其實就是關系型數據庫和NOSQL數據庫;
前面使用Hive、MR、Spark、SparkSQL分析和計算的結果,還是在HDFS上,但大多業(yè)務和應用不可能直接從HDFS上獲取數據,那么就需要一個數據共享的地方,使得各業(yè)務和產品能方便的獲取數據;和數據采集層到HDFS剛好相反,這里需要一個從HDFS將數據同步至其他目標數據源的工具,同樣,DataX也可以滿足。
另外,一些實時計算的結果數據可能由實時計算模塊直接寫入數據共享。
點擊關注公眾號,Java干貨及時送達
四、數據應用
業(yè)務產品所使用的數據,已經存在于數據共享層,直接從數據共享層訪問即可;
同業(yè)務產品,報表所使用的數據,一般也是已經統(tǒng)計匯總好的,存放于數據共享層;
即席查詢的用戶有很多,有可能是數據開發(fā)人員、網站和產品運營人員、數據分析人員、甚至是部門老大,他們都有即席查詢數據的需求;
這種即席查詢通常是現有的報表和數據共享層的數據并不能滿足他們的需求,需要從數據存儲層直接查詢。
即席查詢一般是通過SQL完成,最大的難度在于響應速度上,使用Hive有點慢,可以用SparkSQL,它的響應速度較Hive快很多,而且能很好的與Hive兼容。
當然,你也可以使用Impala,如果不在乎平臺中再多一個框架的話。推薦一個 Spring Boot 基礎教程及實戰(zhàn)示例:https://github.com/javastacks/spring-boot-best-practice
目前,很多的OLAP工具不能很好的支持從HDFS上直接獲取數據,都是通過將需要的數據同步到關系型數據庫中做OLAP,但如果數據量巨大的話,關系型數據庫顯然不行;
這時候,需要做相應的開發(fā),從HDFS或者HBase中獲取數據,完成OLAP的功能;比如:根據用戶在界面上選擇的不定的維度和指標,通過開發(fā)接口,從HBase中獲取數據來展示。
這種接口有通用的,有定制的。比如:一個從Redis中獲取用戶屬性的接口是通用的,所有的業(yè)務都可以調用這個接口來獲取用戶屬性。
五、實時計算
我們目前使用Spark Streaming實現了實時的網站流量統(tǒng)計、實時的廣告效果統(tǒng)計兩塊功能。
六、任務調度與監(jiān)控
在數據倉庫/數據平臺中,有各種各樣非常多的程序和任務,比如:數據采集任務、數據同步任務、數據分析任務等;
這些任務除了定時調度,還存在非常復雜的任務依賴關系,比如:數據分析任務必須等相應的數據采集任務完成后才能開始;數據同步任務需要等數據分析任務完成后才能開始;
這就需要一個非常完善的任務調度與監(jiān)控系統(tǒng),它作為數據倉庫/數據平臺的中樞,負責調度和監(jiān)控所有任務的分配與運行。
來源:http://lxw1234.com/archives/2015/08/471.htm

關注Java技術棧看更多干貨


