柯研 馬凱 鄭鈺輝
摘要:隨著計算機技術和互聯網產業的發展,數據量呈現出了爆炸式的增長,使人類進入了大數據時代。面對成千上百的TB或者PB級別的數據,傳統的計算機技術在數據存儲和數據分析上已經無法滿足人們對數據處理的需求了。為了解決大數據的存儲、大數據的分析和大數據的管理問題,研究人員開發出了Hadoop分布式系統平臺來解決這些問題。本文主要介紹分布式平臺Hadoop的分布式文件系統(HDFS)、并行計算編程模型(MapReduce)。
關鍵詞:大數據;HDFS;MapReduce
中圖分類號:TN911.73 文獻標識碼:A 文章編號:1007-9416(2018)09-0070-02
近些年來,隨著互聯網技術的發展和數字化的普及,每天都在產生著大量的數據,人們也漸漸進入了大數據時代。與此同時大數據的出現也引起了學術界、互聯網產業和各國政府的重視。面對海量數據需要存儲、分析和處理的問題,需要一種具有高效性且能并行的編程計算模型來解決這些問題。
Google在2003-2004年公布了部分Google的分布式文件系統(GFS)、Google的MapReduce開源分布式并行計算框架和一個大型分布式數據庫(BigTable)的思想細節[1]。Doug cutting等人在受到GFS和MapReduce思想的啟發后,用了兩年時間實現了DFS和MapReduce機制,使的Nutch性能得到顯著的提升,2005年Hadoop作為Nutch的一部分引入了Apache Software Foundation公司開始研發。然后隨著Hadoop的發展和完善,Hadoop成為了大數據分析處理的主流技術。
1 分布式計算平臺Hadoop
Hadoop是一個Apache Software Foundation公司用Java語言開發出的開源分布式計算平臺。Hadoop的設計核心是HDFS(Hadoop Distributed File System)分布式文件系統和MapReduce并行計算編程模型。HDFS主要是用來解決海量數據的存儲問題,MapReduce并行計算編程模型主要是用來解決海量數據的計算和分析問題。Hadoop的工作方式是串行處理和并行處理相結合,大大提高了數據分析的計算速度。Hadoop首先通過HDFS分布式文件系統將不同節點上的數據進行整合,其次提供給用戶一個標準的接口,將所需要的文件讀寫到HDFS分布式文件系統中,然后再使用MapReduce并行計算編程模型進行計算,最后可以很快的處理大量的數據。
Hadoop分布式計算平臺的出現解決了大數據并行計算、存儲、管理的問題,普通用戶可以在不了解分布式底層細節的情況下來開發分布式程序,可以充分地利用集群的力量來進行海量數據的存儲和計算數據并且進行分析。Hadoop具有高效性、可靠性、高可擴展性、成本低等特點。具體特點總結如下:
優點如下:(1)高可靠性:Hadoop的存儲方式是按位存儲[2],它能處理海量的數據。(2)高效性:Hadoop是以并行的方式工作的,通過并行處理加快處理速度。(3)高容錯性:Hadoop假設計算元素和存儲會失敗,它產生多個工作數據副本,如果有一個副本丟失或者丟失,確保能夠針對失敗的節點重新分布處理。(4)高擴展性:Hadoop通過在計算機集簇間分配數據進而完成計算任務,通過軟件配置,這些集簇能夠非常容易擴展到數以千計的節點中。
1.1 HDFS
HDFS是一個容錯性能很高的分布式文件系統,可以被廣泛地安置到廉價的計算機器上,HDFS是以流的形式訪問寫入的大型文件,可以大大提高整個系統的數據吞吐量,因此十分適合于數據集很大的應用場景。
HDFS架構主要采用的是主從架構,一個十分典型的HDFS集群是含有一個名稱節點(NameNode)和多個數據節點(DataNode)[4]。其中DataNode是存在便宜的計算機上,主要是用于保存Block塊文件。Block是對一個文件進行分塊,通常是64M。
NameNode節點主要負責整個HDFS分布式文件系統中的接收client用戶的請求的任務,同時要維護文件系統的目錄結構和管理文件系統與數據塊的關系。通常集群中只有一臺計算機上運行著NameNode實例。名稱節點上存儲著HDFS的名稱空間,對于任何篡改FileSystem原數據的操作,名稱節點都會使用一種稱為EditLog的事務日志來記錄下篡改FileSystem原數據的行為。所有的HDFS分布式文件系統的名稱空間,其中包括Block塊到文件的映射,文件的屬性等都會保存在FsImage文件中,FsImage文件是存放在NameNode所在的本地文件系統上。
DataNode節點主要負責存儲HDFS分布式文件系統中的文件,同時將數據分成大量的數據塊,為了保證數據的安全性,將數據進行備份,當其中一份數據出現的問題時候,將由其他備份數據對數據進行修復。數據節點將HDFS的數據以文件的形式保存在本地的文件系統中,將每個HDFS數據塊都保存在本地文件系統的一個單獨的文件中。當一個數據節點開始運行時,它會掃描本地文件系統中所有的文件,同時會產生一個與本地所有文件相互對應的HDFS數據塊的一個列表,然后發送給名稱節點。HDFS讀寫流程如圖1所示。
HDFS文件讀?。軐懭脒^程:首先客戶端向Filesystem發出讀取或者寫入的請求,然后FileSystem再調用NameNode來確定文件起始塊的位置。對于每一個數據塊來說,NameNode都會返回存有塊備份的DataNode的地址給客戶端,如果客戶端自己就是一個名稱節點,而且客戶端上存有相應數據塊的備份時,該名稱節點就會直接從本地的數據節點上讀取數據。
1.2 MapReduce并行計算編程模型
Hadoop MapReduce是一個簡便易用的并行計算編程模型,在MapReduce基礎上開發出來的應用程序能夠運行在由數以千計的計算機組成的計算機集群上,同時在并行處理海量的數據這一功能上有著高可靠性、高容錯性的優點。
MapReduce并行計算模型的首要條件是:(1)可以將我們需要進行處理的數據集劃分成多個小的數據集;(2)我們可以對每一個小的數據集進行并行處理。MapReduce并行計算模型的的主要思想是將需要執行的問題拆分成map函數和reduce函數兩個部分。在需要處理的數據集被分成多個小的數據集后,map函數會將待處理的數據集映射成不同的block塊,然后將這些小的數據集分配給計算機群處理,來進行分布式并行計算,最后使用reduce函數將計算的結果整理和傳輸給計算機,從而輸出開發者所需要的結果。
MapReduce并行計算模型是有一個單獨運行在主節點上的作業追蹤器(JobTracker)和多個運行在每個集群從節點上的任務追蹤器(TaskTracker)組成。
JobTracker又被稱為作業跟蹤器[5],是運行主節點上的一個很重要的進程,是MapReduce并行計算模型的調度器,主要負責處理用戶提交代碼的后臺程序。作業追蹤器將首先選擇處具體的文件去處理作業,其次將作業切割成一個個小的任務,同時將任務進行分配,把它們到所需要的數據所在的子節點上。其中map 任務是解析每條數據記錄,傳遞給用戶所編寫的map函數并且執行map函數,將輸入的結果寫入到本地磁盤中;reduce 任務 是從map 任務的執行結果中遠程的讀取需要輸入的數據,然后將數據排序,最后將數據按照排序分組,把數據傳遞給用戶編寫的reduce函數,reduce函數負責執行。主節點負責監視從節點的執行情況,并且重新執行之前失敗的任務。JobTracker可以運行在任意一臺計算機上。
TaskTracker又被稱為任務跟蹤器,主要是負責保持和作業跟蹤器之間的交互,在分配的block塊上執行map的任務或者reduce的任務,在執行任務的時候,JobTracker只有一個,但是TaskTracker會有很多個。
2 結語
本文首先介紹了分布式計算平臺Hadoop的起源,Hadoop是受Google共享的關于分布式文件系統(GFS)、MapReduce開源分布式并行計算框架和一個大型分布式數據庫的思想啟發所研究出來,一切都是為了解決海量數據的存儲、計算和分析的問題;其次介紹了Hadoop的整體框架,了解到了Hadoop具有高效性、高擴展性、高可靠性和高容錯性的特點。最后詳細介紹了Hadoop的兩個核心HDFS分布式文件系統和MapReduce并行計算模型的具體內容。
參考文獻
[1]陳吉榮,樂嘉錦.基于Hadoop生態系統的大數據解決方案綜述[J].計算機工程與科學,2013,35(10):25-35.
[2]夏靖波,韋澤鯤,付凱,等. 云計算中Hadoop技術研究與應用綜述[J].計算機科學,2016,43(11):6-11.
[3]陳璽,馬修軍,呂欣.Hadoop生態體系安全框架綜述[J].信息安全研究,2016,2(8):684-698.
[4]王峰,雷葆華.Hadoop分布式文件系統的模型分析[J].電信科學,2010,26(12):95-99.
[5]董新華,李瑞軒,周灣灣,等. Hadoop系統性能優化與功能增強綜述[J].計算機研究與發展,2013,50(s2):1-15.