基于Hadoop MapReduce模型的數據分析平臺研究設計
原文 http://www.36dsj.com/archives/28713
前言
拖了5天終于看完了兩篇論文,對相關數據分析平臺搭建技術也有了進一步的了解。對自己這幾天的筆記做了一個整理,既是為了方便自己以后查看,也是為以后的實際平臺搭建建立依據。其實感覺還是挺苦逼的,這大過年的親戚都坐在旁邊包餃子,而我……還在為自己的拖延癥買單。
本筆記主要記錄以下兩個方面:
- Hadoop MapReduce與Hive技術研究
- 數據分析平臺框架設計與環境配置
Google三大核心技術:GFS[1]、Mapreduce、Bigtable[2]
[1]. Google文件系統(Google File System,縮寫為GFS或GoogleFS)是Google公司為了滿足其需求而開發的基于Linux的專有分布式文件系統。
[2]. BigTable是一種壓縮的、高性能的、高可擴展性的,基于Google文件系統(Google File System,GFS)的數據存儲系統,不是傳統的關系型數據庫,用于存儲大規模結構化數據,適用于云計算。
Hadoop MapReduce與Hive技術研究
一、Hadoop框架工作機制
Hadoop框架定義:Hadoop分布式文件系統(HDFS)和Mapreduce實現。并行程序設計方法中最重要的一種結構就是主從結構,而Hadoop則屬于該架構。
HDFS架構:HDFS采用Master/Slave架構,也是主從模式的結構。一個HDFS集群由一個NameNode節點和一組DataNode節點(通常也作為計算節點,若干個)組成。
NameNode定義:NameNode是一個中心服務器,負責管理文件系統的名字空間(NameSpace)、數據節點和數據塊之間的映射關系以及客戶 端對文件的訪問。它會將包含文件信息、文件相對應的文件塊信息以及文件塊在DataNode的信息等文件系統的緣數據存儲在內存中,是整個集群的主節點。
DataNode定義:集群系統中,一個節點上通常只運行一個DataNode,負責管理他所在節點上的數據存儲,并負責處理文件系統客戶端的讀寫請求, 在NameNode的統一調度下進行數據塊的創建、刪除和復制。集群中的數掘節點管理存儲的數據,會將塊的元數據存儲在本地,并且會將全部存在的塊信息周 期性的發給NameNode。
在節點中操縱數據:
當要向集群中的某一節點寫入數據:NameNode負責分配數據塊,客戶端把數據寫入到對應節點中;
當要從集群中的某一節點讀取數據:客戶端在找到這一節點之前需要先獲取到數據塊的映射關系(關系由Namenode提供),之后從節點上讀取數據。
為了應對HDFS大量節點構成的特殊分布式數據結構的特征,所以HDFS架構最重要的就是要有錯誤故障檢測以及故陣的快速恢復機制,這是通過數據節點和名字節點之間的一種稱為心跳的機制來實現的,他能夠使HDFS系統任意增刪節點。
同時,分布式系統的采用和MapReduce模型的實現使得Hadoop框架具有高容錯性以及對數據讀寫的高吞吐率,能自動處理失敗節點。
HDFS兩大特性:
高容錯系統:HDFS增加了數據的冗余性。即每一個文件的所有數掘塊都將會有副本。HDFS釆用一種機架感知的策略,這種策略需在經驗積累的基礎上調優。 經過機架感知,NameNode可以知道DataNode所在位置的機架。這樣的策略可使副本均勻分布在集群中的節點上,對于節點故障時的負載均衡有利。
高存取數據性能:通過客戶端臨時緩存在本地的數據減少對于網絡帶寬的依賴程度;讀取副本時遵循就近原則;采用流水線復制技術提高性能(第一個接收數據的數 據節點在把數據寫到本地后會依次接著把數據傳到存有數據副本的節點,直到所有的存對副本的節點,在這個過程中每個節點都是一邊接受一邊傳送,減少了備份的 時間);
Hadoop集群系統架構示意圖
Client:獲取分布式文件系統文件的應用程序。
Master:負責NameNode和JobTracker的工作,其中JobTracker負責應用程序的啟動、跟蹤和調度各個Slave任務的執行,各個Tracker中TaskTracker管理本地數據處理與結果,并與JobTracker通信。
二、MapReduce(映射-歸并算法)分布式并行計算編程模型
該主從框架結構可以把一個作業任務分解成若干個細粒度的子任務,根據節點空閑狀況來調度和快速的處理子任務,最后通過一定的規則合并生成最終的結 果。有一個主節點和若干個從節點,其中主節點的作用是負責任務分配和資源的調度;而從節點則主要是負責作業的執行處理。基于此框架的程序能在通配置的機器 上實現并行化的處理。
MapReduce借用函數式編程的思想,通過把海量數據集的常見操作抽象為Map(映射過程)和Reduce(聚集過程)兩種集合操作,而不用過多考慮分布式相關的操作。
MapReduce任務計算流程示意圖
MR任務的基本計算流程:
1、對輸入數據進行數據塊劃分,便于每個map處理一個分片作業;
2、RecordReader對數據塊進行生成鍵值;
3、Map操作:Partitioner類以指定的方式將數據區分的寫入文件,此時集群中多個節點可以同時進行map作業操作處理;
4、Reduce過程:組合、排序、聚集數據,最后結果寫入Hadoop的分布式文件系統HDFS管理的輸出文件中。
對MapReduce模型使用的思考:
MapReduce是一個可擴展的架構,通過切分塊數據實現集群上各個節點的并發計算。理論上隨著集群節點節點數量的增加,它的運行速度會線性上 升,但在實際應用時要考慮到以下的一些限制因素。數據不可能無限的切分,如果每份數據太小,那么它的開銷就會相對變大;集群節點數目增多,節點之間的通信 開銷也會隨之增大,而且網絡也會有Oversubscribe的問題(也就是機架間的網絡帶寬遠遠小于每個機架內部的總帶寬),所以通常情況下如果集群的 規模在百個節點以上,MapReduce的速度可以和節點的數目成正比;超過這個規模,雖然它的運行速度可以繼續提高,但不再以線性增長。
三、并行隨機數發生器算法的MapReduce實現
算法實現流程基本步驟如下:
1、由MapReduce框架為每個映射任務分配計算負載,即確定每個映射任務要生成的隨機數個數(m),m=nRandom(總隨機個數)/(nMaps(映射任務數));
2、集群中各計算節點執行Map任務,根據負載分配計算得出m個隨機數并存入一個數組,產生一組中間結果;
3、MapReduce框架進行分區操作。Partitioner類使用Hash函數按key(或者一個key子集)進行分區操作,分區的數目等 同于一個作業的Reduce任務的數目。即由Partitioner控制將中間過程的key發送給m個Reduce任務中的哪一個來進行Reduce操 作。
4、各計算節點啟動Reduce任務,將有相同key的隨機數值進行聚集操作,并將最終結果寫入文件進行輸出。
四、Hive架構
什么是Hive?
Hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供完整的SQL查詢功能,可以將SQL語句轉換 為MapReduce任務進行運行。其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce 應用,十分適合數據倉庫的統計分析。
Hive是建立在Hadoop上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化加載(ETL),這是一種可以存儲、查詢和 分析存儲在Hadoop中的大規模數據的機制。Hive定義了簡單的類SQL查詢語言,稱為HQL,它允許熟悉SQL的用戶查詢數據。同時,這個語言也允 許熟悉 MapReduce 開發者的開發自定義的mapper和reducer來處理內建的mapper和reducer無法完成的復雜的分析工作。
Hive架構
用戶接口(User Interface) Hive主要有三個用戶接口,分別是命令行接(CLI),web用戶接口(WUI)和客戶端(Client)。其中CLI是最常用的,Client是用戶 連接至Hive Server的客戶端,要指出運行Hive服務器的節點,并在此節點之上動Hive服務器。對于WUI來說采用使用瀏覽器方式訪問Hive。
元存儲(MetaStore) Hive是把元數掘存儲在hadoop文件系統HDFS中,元數據包括數據表的名字,數據表的列、分區及其屬性,數掘表的屬性,數據所在的目錄等,大部分的的查詢由MapReduce完成。
其他 HQL語句的語法和語法分析、編譯和優化以及查詢計劃都是通過解釋器、優化器和編譯器共同完成的,生成的中間數據是存儲在hadoop分布式文件系統中,并在某個時間調用MapReduce程序來執行。
Hive優點
針對海量數據的高性能查詢和分析系統:除天生的高性能查詢功能外,Hive針對HiveQL到MapReduce的翻譯進行了大量的優化,從而保證了生成的MapReduce任務是高效的。實際應用中,Hive支持處理TB甚至PB級的數據。
類SQL的查詢語言HiveQL:熟悉SQL的用戶基本不需要培訓就可以非常容易的使用Hive進行很復雜的查詢。
HiveQL極大可擴展性:除了HiveQL自身提供的能力,用戶還可以自定義其使用的數據類型、也可以用任何語言自定義mapper和reducer腳本,還可以自定義函數(普通函數、聚集函數)等,以此實現復雜查詢的目的。
高擴展性(Scalability)和容錯性Hive沒有執行的機制,用戶的查詢執行過程都是由分布式計算框架MapReduce完成的,因此Hive相應具有MapReduce的高度可擴展和高容錯特點。
與Hadoop其他產品完全兼容:Hive自身并不存儲用戶數據,而是通過接口訪問用戶數據。這就使得Hive支持各種數據源和數據格式。用戶可以實現用 自己的驅動來增加新的數據源和數據格式。一種理想的應用模型是將數據存儲在HBase中實現實時訪問,而用Hive對HBase中的數據進行批量分析。
五、Hbase
Hbase是使用java的google bigtable的開源實現,它是建立在分布式文件系統之上的分布式數據系統,屬于面向列的數據庫。
HBase主要由三個部分組成,分別是Hmaster、HRegionServer和HbaseClient。
1、HMaster是HBase中的主服務器,主要負責對表和Region的管理,包括管理對表的操作、以及Region的負載均衡以及災難處理等。
2、HRegions是由HBase中的數據表逐漸分裂而成的,因為在HBase中存在著一系列往往比較大的表,當一張表的記錄數不斷的增加達到 一定的容量上限時便會逐漸分裂成Regions,而這些Regions會比較均勻的分布在集群中的,并且—個Region下還會還會有一定數量的列族。
3、HBaseClient是指HBase客戶端的API,通信都采用RPC機制,用戶程序通過調用客戶端的API來和HBase的后臺中的 HMaster和HRegion進行交互的。Client主要進行兩類的操作:管理操作(和HMaster之問進行通信)和數據讀寫類操作(和 HRegion進行通信)。
數據分析平臺框架設計與環境配置
一、平臺總體架構和模塊設計
數據分析平臺設計總計架構圖
注:從上至下為數據流方向,,黃色虛線指向為軟件流程方向。總共系統包括七個層面,除圖中六個模塊均處于監控管理模塊下,其為分布式系統監控管理層。
二、平臺數據采集預處理模塊詳細設計
數據采集模塊:根據不同的信息來源,需要采取不同的技術。
數據預處理模塊:清洗、規約等階段。
三、存儲模塊詳細設計
HBase調用文件系統接口來獲取日志數據的物理存儲位置,MapReduce程序調用文件接口來將處理后的海量數據存儲在HDFS中。
1、外部調用:此部分由MapReduce程序、HBase和web接口三部分組成。這三部分都可以通過調用HDFS接口,在底層文件系統上存儲數據。
2、HDFS接口:文件系統底層的接口是底層HDFS系統呈現的接口,所有對文件系統的操作都要通過此接口來完成。
3、底層文件系統:位于最底層的文件系統足整個系統我正的存儲平臺,所有的數掘倍總都足存儲在文件系統中的,外部調用模塊根據需要調用HDFS接口來對文件系統進行操作。
四、平臺監控模塊詳細設計
集群管理器設計:
集群管理器設計
配置管理器設計:
功能實現:讀取、修改、創建共享配置。
五、平臺監控模塊詳細設計
Hadoop集群安裝部署:
1、在集群的每個節點上安裝hadoop并編輯每個節點的hosts文件,分別將主節點和各從節點的主機名稱與IP地址的映射關系添加到hosts文件之中;
2、配置SSH服務,并在master上通過運行ssh-keygen-trsa命令用于生成一個無口令RSA密鑰對,然后再將此公朗復制到每個slave節點的.ssh文件夾下的authorized_keys文件里;
3、修改Hadoop的一些重要的配置文件,在安裝hadoop的目錄下的conf目錄下對其中的coresite.xml、mapredsite.xml和HDFS_site.xmI等幾項配置信息進行修改。
Hive安裝配置:由于Hive安裝過于簡單,故這里略去。
參考文獻
《基于hadoop的海量搜索日志分析平臺的設計和實現》,趙龍,大連,大連理工大學,2013.6
《基于HadoopMapReduce模型的應用研究》,謝桂蘭,四川,《軟件天地》雜志,2010.01
本文轉自Joe Jiang的github博客, 原文地址>>>