標籤:大資料平台架構設計 如何 color 作業系統 帶來 表達 存在 分享圖片 task
大資料的熱度在持續的升溫,繼雲端運算之後大資料成為又一福士所追捧的新星。我們暫不去討論大資料到底是否適用於您的公司或組織,至少在互連網上已經被吹噓成無所不能的超級戰艦。
大資料的熱度在持續的升溫,繼雲端運算之後大資料成為又一福士所追捧的新星。我們暫不去討論大資料到底是否適用於您的公司或組織,至少在互連網上已經被吹噓成無所不能的超級戰艦。好像一夜之間我們就從互連網時代跳躍進了大資料時代!關於到底什麼是大資料,說真的,到目前為止就和雲端運算一樣,讓我總覺得像是在看電影《雲圖》——雲裡霧裡的感覺。或許那些正在向你推銷巨量資料產品的公司會對您描繪一幅烏托邦似的美麗畫面,但是您至少要保持清醒的頭腦,認真仔細的慎問一下自己,我們公司真的需要大資料嗎?
做為一家第三方支付公司,資料的確是公司最最重要的核心資產。由於公司成立不久,隨著業務的迅速發展,交易資料呈幾何級增加,隨之而來的是系統的不堪重負。業務部門、領導、甚至是集團老總整天嚷嚷的要報表、要分析、要提升競爭力。而研發部門能做的唯一事情就是執行一條一條複雜到自己都難以想象的SQL語句,緊接著系統開始罷工,記憶體溢出,宕機........簡直就是噩夢。OMG!please release me!!!
其實資料部門的壓力可以說是常人難以想象的,為了把所有離散的資料匯總成有價值的報告,可能會需要幾個星期的時間或是更長。這顯然和業務部門要求的快速響應理念是格格不入的。俗話說,工欲善其事,必先利其器。我們也該鳥槍換炮了......。
網上有一大堆文章描述著大資料的種種好處,也有一大群人不厭其煩的說著自己對大資料的種種體驗,不過我想問一句,到底有多少人多少組織真的在做大資料?實際的效果又如何?真的給公司帶來價值了?是否可以將價值量化?關於這些問題,好像沒看到有多少評論會涉及,可能是大資料太新了(其實底層的概念並非新事物,老酒裝新瓶罷了),以至於人們還沉浸在各種美妙的YY中。
做為一名嚴謹的技術人員,在經過短暫盲目的崇拜之後,應該快速的進入落地應用的研究中,這也是踩著“雲彩”的架構師和騎著單車的架構師的本質區別。說了一些牢騷話,當做發泄也好,博眼球也好,總之,我想表達的其實很簡單:不要被新事物所迷惑,也不要盲目的崇拜任何一樣新事物,更不要人云亦云,這是我們做研究的人絕對要不得。
說了很多也是時候進入正題了。公司高層決定,正式在集團範圍內實施大資料平台(還特地邀請了一些社區的高手,很期待.......),做為第三方支付公司實施大資料平台也無可厚非,因此也積極的參與到這個項目中來。正好之前關於OSGi的企業級架構的研究也告一段落,所以想利用CSDN這個平台將這次大資料平台實施過程記錄下來。我想一定能為其它有類似想法的個人或公司提供很好的參考資料!
第一記,大資料平台的整體架構設計
- 軟體架構設計
大資料平台架構設計沿襲了分層設計的思想,將平台所需提供的服務按照功能劃分成不同的模組層次,每一模組層次只與上層或下層的模組層次進行互動(通過層次邊界的介面),避免跨層的互動,這種設計的好處是:各功能模組的內部是高內聚的,而模組與模組之間是松耦合的。這種架構有利於實現平台的高可靠性,高擴充性以及易維護性。比如,當我們需要擴容Hadoop叢集時,只需要在基礎設施層添加一台新的Hadoop節點伺服器即可,而對其他模組層無需做任何的變動,且對使用者也是完全透明的。
整個大資料平台按其職能劃分為五個模組層次,從下到上依次為:
運行環境層:
運行環境層為基礎設施層提供運行時環境,它由2部分構成,即作業系統和運行時環境。
(1)作業系統我們推薦安裝REHL5.0以上版本(64位)。此外為了提高磁碟的IO輸送量,避免安裝RAID驅動,而是將Distributed File System的資料目錄分布在不同的磁碟分割上,以此提高磁碟的IO效能。
(2)運行時環境的具體要求如下表:
名稱版本說明
JDK1.6或以上版本Hadoop需要Java運行時環境,必須安裝JDK。
gcc/g++3.x或以上版本當使用Hadoop Pipes運行MapReduce任務時,需要gcc編譯器,可選。
python2.x或以上版本當使用Hadoop Streaming運行MapReduce任務時,需要python運行時,可選。
基礎設施層:
基礎設施層由2部分組成:Zookeeper叢集和Hadoop叢集。它為基礎平台層提供基礎設施服務,比如命名服務、Distributed File System、MapReduce等。
(1)ZooKeeper叢集用於命名映射,做為Hadoop叢集的命名伺服器,基礎平台層的任務調度控制台可以通過命名伺服器訪問Hadoop叢集中的NameNode,同時具備failover的功能。
(2)Hadoop叢集是大資料平台的核心,是基礎平台層的基礎設施。它提供了HDFS、MapReduce、JobTracker和TaskTracker等服務。目前我們採用雙主節點模式,以此避免Hadoop叢集的單點故障問題。
基礎平台層:
基礎平台層由3個部分組成:任務調度控制台、HBase和Hive。它為使用者網關層提供基礎服務調用介面。
(1)任務調度控制台是MapReduce任務的調度中心,分配各種任務執行的順序和優先順序。使用者通過調度控制台提交作業任務,並通過使用者網關層的Hadoop用戶端返回其任務執行的結果。其具體執行步驟如下:
任務調度控制台接收到使用者提交的作業後,匹配其調度演算法;
請求ZooKeeper返回可用的Hadoop叢集的JobTracker節點地址;
提交MapReduce作業任務;
輪詢作業任務是否完成;
如果作業完成發送訊息並調用回呼函數;
繼續執行下一個作業任務。
作為一個完善的Hadoop叢集實現,任務調度控制台盡量自己開發實現,這樣靈活性和控制力會更加的強。
(2)HBase是基於Hadoop的列資料庫,為使用者提供基於表的資料訪問服務。
(3)Hive是在Hadoop上的一個查詢服務,使用者通過使用者網關層的Hive用戶端提交類SQL的查詢請求,並通過用戶端的UI查看返回的查詢結果,該介面可提供資料部門准即時的資料查詢統計服務。
使用者網關層:
使用者網關層用於為終端客戶提供個人化的調用介面以及使用者的身份認證,是使用者唯一可見的大資料平台操作入口。終端使用者只有通過使用者網關層提供的介面才可以與大資料平台進行互動。目前網關層提供了3個個人化調用介面:
(1)Hadoop用戶端是使用者提交MapReduce作業的入口,並可從其UI介面查看返回的處理結果。
(2)Hive用戶端是使用者提交HQL查詢服務的入口,並可從其UI介面查看查詢結果。
(3)Sqoop是關係型資料庫與HBase或Hive互動資料的介面。可以將關係型資料庫中的資料按照要求匯入到HBase或Hive中,以提供使用者可通過HQL進行查詢。同時HBase或Hive或HDFS也可以將資料導回到關係型資料庫中,以便其他的分析系統進行進一步的資料分析。
使用者網關層可以根據實際的需求無限的擴充,以滿足不同使用者的需求。
客戶應用程式層:
客戶應用程式層是各種不同的終端應用程式,可以包括:各種關係型資料庫,報表,交易行為分析,對賬單,清結算等。
目前我能想到的可以落地到大資料平台的應用有:
1.行為分析:將交易資料從關係型資料庫匯入到Hadoop叢集中,然後根據資料採礦演算法編寫MapReduce作業任務並提交到JobTracker中進行分散式運算,然後將其計算結果放入Hive中。終端使用者通過Hive用戶端提交HQL查詢統計分析的結果。
2.對賬單:將交易資料從關係型資料庫匯入到Hadoop叢集,然後根據商務規則編寫MapReduce作業任務並提交到JobTracker中進行分散式運算,終端使用者通過Hadoop用戶端提取對賬單結果檔案(Hadoop本身也是一個Distributed File System,具備通常的檔案存取能力)。
3.清結算:將銀聯檔案匯入HDFS中,然後將之前從關係型資料庫中匯入的POSP交易資料進行MapReduce計算(即對賬操作),然後將計算結果串連到另外一個MapReduce作業中進行費率及分潤的計算(即結算操作),最後將計算結果導回到關係型資料庫中由使用者觸發商戶劃款(即劃款操作)。
部署架構設計
關鍵點說明:
1.目前整個Hadoop叢集均放置在銀聯機房中。
2.Hadoop叢集中有2個Master節點和5個Slave節點,2個Master節點互為備份通過ZooKeeper可實現failover功能。每個Master節點共用所有的Slave節點,保證Distributed File System的備份存在於所有的DataNode節點之中。Hadoop叢集中的所有主機必須使用同一網段並放置在同一機架上,以此保證叢集的IO效能。
3.ZooKeeper叢集至少配置2台主機,以避免命名服務的單節點故障。通過ZooKeeper我們可以不再需要F5做負載平衡,直接由任務調度控制台通過ZK實現Hadoop名稱節點的負載平衡訪問。
4.所有伺服器之間必須配置為無密鑰SSH訪問。
5.外部或內部使用者均需要通過網關才能訪問Hadoop叢集,網關在經過一些身份認證之後才能提供服務,以此保證Hadoop叢集的訪問安全。
【大資料乾貨】基於Hadoop的大資料平台實施——整體架構設計