云計算在大數據處理方面,尤其針對幾百MB、幾百GB、甚至幾百TB大小的文件,有了很好的應用,目前已經有存儲PB級數據的Hadoop集群了。Google關于GFS、MapReduce、BigTable的三篇論文是云計算領域的經典。Apache 按照這三篇論文,用Java實現了開源的云計算Hadoop系統,性能上Hadoop不比Google優良,卻也不影響Hadoop被業界廣泛接受。
1.Hadoop系統介紹
Hadoop 由兩個核心構件組成,Hadoop 分布式文件系統HDFS(Hadoop Distributed File System)和map/reduce計算模型。
表1 Apache 與Google 云計算產品性能比較
HDFS 保留了傳統文件系統特征的同時,也有海量數據存儲、高性價比、可靠性、可擴展性等云計算領域的特征。HDFS 集群是由一個名字節點(NameNode)和多個數據節點(DataNode)構成。一個大數據文件被分成多個塊,這些塊存儲在DataNode 中,由NameNode 確定每個塊與DataNode的映射,并且命令DataNode進行文件或目錄操作,如open、read、write、close 等。NameNode 的容錯很重要,NameNode停機會造成HDFS 數據的丟失,安全起見Hadoop 會有NameNode 的備份,一旦NameNode 停機或異常,SecondaryNameNode 便會接管NameNode的工作,用戶卻不容易覺察到明顯的中斷。map/reduce 計算模型由一個調度協調任務的JobTracker 和多個執行來自JobTracker 指令的TaskTracker 組成。 map/reduce 程序提交給JobTracker 后,JobTracker獲取當前網絡拓撲中最優的數個節點,將map和reduce 任務交付給所選節點的TaskTracker。任務執行過程中,通過心跳機制,TaskTracker 向JobTracker 報告任務進度,通過更改heartbeat.recheck.interval 屬性可以設置心跳的時間。當TaskTracker 不能完成任務或任務失敗的時候,JobTracker 會選取效率高的TaskTracker 的結果,或者將任務重新下發給其他節點的TaskTracker。
圖1,map/reduce 計算模型提供了任務的分解(map)和規約(reduce)來進行分布式計算。map函數對文件的每一行進行處理,產生(Key/Value)對。reduce以map的輸出為輸入,將相同的Key值規約至同一reduce,reduce 進一步處理后,產生新的數據集。形式化過程如下:
map: (k1,v1)→(k2,v2)→(k2,list(v2))
reduce: (k2,list(v2))→(k3,v3)
map將(k1,v1)經過處理,產生數據集(k2,v2), 歸納為(k2,list(v2));將(k2,list(v2))交予reduce處理,(k2,list(v2))成為reduce函數的輸入,產生map/reduce計算的結果(k3,v3)。
圖1 map/reduce 計算模型
2.云計算技術
數據存儲和分析效率,是判斷服務優劣程度的重要指標。多年來,IT 界內存容量和磁盤容量大幅增加,然而數據存儲和數據分析的效率卻未能滿足企業的要求。將云計算產品Hadoop 應用于數據的存儲、分析,能提高數據存儲和分析的效率。傳統的數據存儲、分析,將一張表存儲在一臺機器上,一條SELECT 語句被一臺機器執行,影響效率的關鍵因素是單機的性能。HDFS 將一個大文件分塊存儲在集群的各個節點上,完成數據存儲的分解;map/reduce 將一個數據分析任務下發到各個節點上,完成任務的分解。各個節點并行的進行數據存儲和分析,最終通過歸約各個節點的結果完成任務。Hadoop 系統強大的數據處理能力,鮮明的云計算的特征,已經被業界廣泛的接受,并被應用于生產。
2.1 HDFS 的數據存儲
數據文件有效記錄 1221215 條,大小為457MB,每一行是數據庫的一條記錄,將數據備份至HDFS文件系統。圖2從Web端展示了HDFS文件系統,它類似于Unix文件系統,有訪問控制、屬主、屬組等。
圖2 HDFS 分布式文件系統
Block Size 屬性表示HDFS的塊大小,由于Hadoop的優點是大數據處理,當處理TB、PB 級別數據的時候,可以根據需要調節為256M、512M 等。它的配置直接影響了分配給map階段每個Split的大小,從而影響map過程的效率。配置Block Size 屬性,理論上應從以下幾點考慮:
第一,GB、TB 級別的大數據處理,分片小了,增加了map過程的開銷。
第二,分片大了,負載均衡的效果不理想。
第三,NameNode 的內存壓力,隨著塊大小的增加,NameNode 內存壓力變小。
當數據量過大的時候,或者集群規模不大,可選擇大一點的分片。3個節點的機群,要處理1GB 的數據,不妨設置分片128M或者256M。實際應用中,分片大小的選取,要從數據量和節點個數考慮。另外,處理小數據量時也不必設置小于64M(比如32M),就如同Windows 下,不必將塊大小設置為小于512byte。
Replication 屬性配置了數據塊的復本數,體現了HDFS 容錯機制,一旦有節點意外停機,用戶可以從其他節點讀取數據塊。實驗證明,隨著Replication 值增加,實際寫入的數據量是原數據量的Replication倍,導致HDFS的寫速度降低。因此,在不同場合,應對Replication屬性有所取舍。
2.2 map/reduce 程序設計
map/reduce 程序設計的關鍵,是構建與應用相關的key/value 鍵值,也就是map函數輸出的中間結果。另外,中間結果的優化也影響了數據分析的效率。
map 函數對源數據提取需要分析的字段,過濾無效數據,進行預處理后,交由reduce進行規約。map函數中間輸出(key,V),被寫入context.reduce 對map的輸出context的內容進行歸類,同一key 值的(key,V)放在一個列表中生成(key,list(V)),然后對(key,list(V))進行規約Vout=result(list(V)),任務結果為(key,Vout)。map/reduce 偽碼如下:
圖3 map/reduce 偽碼
為了優化map/reduce程序,對map函數的輸出在當前節點進行中間處理,然后交予reduce 函數,這種方式稱為Hadoop 數據局部性。Hadoop 提供了一個優化數據局部性的函數combiner,實質上combiner 也是一個reduce 規約函數,它不影響reduce 的處理結果。map函數完成,在當前節點進行combiner,實質上是減少了map函數和reduce函數之間的數據傳輸,因此提高了效率。為此,文獻提出了一種改進的數據局部性算法。本實驗中,用reduce 函數作為combiner 函數。
3.實驗結果
3.1 實驗平臺
圖3,在配置Pentium Dual-core CPU T4300 2。1GHz,4G DDR3 1600mHz 內存,250G WDC ATA 硬盤,32bit-Windows7 sp1 的機器上,運行三臺虛擬機fedora101、fedora102、fedora103,操作系統是32 位Fedora Core 15。fedora101 是Master 節點,fedora101、fedora102、fedora103 是Slave 節點。由于實驗資源有限,Master 節點fedora101,也運行了 Slave 節點的實例。但是,在實際生產上,盡量避免這樣做,不僅Master與Slave 要物理上隔離,SecondaryNameNode 也要與NameNode 隔離。
圖4 實驗環境系統架構
3.2 實驗分析及優化
Hadoop的性能表現在兩個方面:一是HDFS 大數據存儲的效率;二是map/reduce 程序大數據分析的效率。以此將應用分為載入數據和分析數據兩個階段,這兩個階段的效率直接影響了用戶感受。對于云計算來說,影響這兩個效率的瓶頸是網絡傳輸效率和磁盤I/O,在網絡環境理想的LAN中,暫不予考慮網絡傳輸效率。
HDFS 的Replication 屬性很大程度上影響了數據載入效率,是磁盤I/O對性能的影響。它確保了在發生數據塊、磁盤、機器故障后數據不丟失。當系統發現一個錯誤的塊,會從其他節點讀取另一個復本,保證復本數回到Replication 的值。 當Replication 過大時,會影響寫數據的效率,因為數據量比原數據大了Replication 倍,并且在WAN中應考慮網絡數據傳輸的開銷。當應用僅僅是為了分析數據時,可以將Replication 設置為1。表2列出了不同Replication 值對HDFS效率的影響。
當數據達到GB規模,內存已不能滿足需求,必定有中間數據被寫入磁盤等待處理。因此,磁盤I/O的效率直接關系了map/reduce 數據處理的效率。文獻和文獻給出了兩種基于map/reduce 的優化方案,本質是開發基于map/reduce 程序的分類算法,提高數據分析的效率。這兩種方法,沒有從本質上解決大數據處理所面臨的I/O 壓力。
表2 Replication 值對HDFS 效率的影響
本文給出了兩種優化map/reduce性能的方法。根據對Hadoop系統的研究,提出了數據局部性優化和I/O 緩存優化,本質上都是提高磁盤I/O 性能。數據局部性優化提供combiner函數,減少了map 到reduce的I/O。I/O 緩存優化是配置Hadoop數據I/O緩沖區的大小,從默認的4096字節,增加到65536字節。實驗證明,map/reduce 程序性能有了明顯提高。表3列出了兩種典型的優化方案。
表3 map/reduce 程序處理時間比較
4.結語
本文應用Hadoop云計算模型,提高了數據存儲的安全性,數據分析的效率,滿足了應用的要求,提供了更好的用戶體驗。同時,分析了map/reduce計算模型的瓶頸,從而根據應用對環境進行優化,并進行驗證,得出map/reduce 程序的優化應從I/O性能著手。實驗結果表明,HDFS 文件系統能夠很好的容錯,map/reduce具有高效的數據分析能力,完全可以替代傳統的單機的數據存儲、分析。今后要實踐解決的問題是,如何快速的跨平臺向Hadoop提交數據,降低數據移植給Hadoop帶來的效率影響。
本文的局限性在于資源有限,只能構建虛擬集群,有構成規模。所以,要驗證了Hadoop投入生產使用的可行性,以及在技術上遇到的問題,通過優化系統配置和程序代碼,提高數據分析的效率。
核心關注:拓步ERP系統平臺是覆蓋了眾多的業務領域、行業應用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業務管理理念,功能涉及供應鏈、成本、制造、CRM、HR等眾多業務領域的管理,全面涵蓋了企業關注ERP管理系統的核心領域,是眾多中小企業信息化建設首選的ERP管理軟件信賴品牌。
轉載請注明出處:拓步ERP資訊網http://www.guhuozai8.cn/
本文標題:基于參數優化的Hadoop 云計算平臺
本文網址:http://www.guhuozai8.cn/html/consultation/10839711148.html