劉義卿 陳新房
(防災科技學院信息工程學院,河北 三河 065201)
Hadoop 是一種具有分布式特點的系統(tǒng)框架,Hadoop 發(fā)展到今天已經(jīng)發(fā)展成一個生態(tài)系統(tǒng),其組件之多,使用也是極其復雜,但是根本的目的只有一個那就是解決數(shù)據(jù)的存儲與分析。本文將在Hadoop 分布式系統(tǒng)下的MapReduce 為處理系統(tǒng)的基礎(chǔ)上進行網(wǎng)站日志的清洗,通過LogMapper 類進行鍵值對的Shuffl 操作、通過LogReducer 類進行合并統(tǒng)計。利用分布式、并行計算的優(yōu)越性,快速得到數(shù)據(jù)分析結(jié)果。
Hadoop 主要由兩大核心HDFS 和MapReduce 兩部分組成。
1.1 HDFS。HDFS是一種分布式文件系統(tǒng),作為Hadoop 核心之一,具有處理超大數(shù)據(jù)、流式處理、可在廉價的服務器上運行等特點。HDFS在訪問應用程序數(shù)據(jù)時,具有很高的吞吐率,因此對于超大數(shù)據(jù)集的應用程序而言,選擇HDFS 作為底層的數(shù)據(jù)存儲是比較理想的選擇。
1.2 MapReduce。MapReduce 是一種編程模型,通常被用于大規(guī)模的數(shù)據(jù)集的并行運算,對于各個數(shù)據(jù)分片,都會有一個map 任務對該分片進行處理,這種處理是一種并行的方式。但是對同一個分片,Mapreduce 的map 任務對該分片的<key,value>對的處理是一個串行的處理過程。分布式并行計算指的是對數(shù)據(jù)分片的并行,對分片內(nèi)的記錄,則按照順序的串行處理。
Mapreduce 模型的核心是Map 函數(shù)和Reduce 函數(shù)。二者都是由應用程序開發(fā)者負責具體實現(xiàn)的。只需要關(guān)注如何實現(xiàn)Map 和Reduce 函數(shù),不需要處理并行編程過程中的其他各種復雜問題。,例如分布式存儲、工作調(diào)度、負載均衡、容錯處理等。這些問題都會由Mapreduce 框架進行處理完成。如圖1所示。
圖1 MapReduce 模型
MapReduce 將復雜的、運行于大規(guī)模集群上的并行計算過程高度的抽象到兩個函數(shù):Map 函數(shù)和Reduce 函數(shù)。
2.1 Map 函數(shù)的輸入來自于分布式文件系統(tǒng)的文件塊,這些文件塊的格式是任意的。類型也是任意的。在Map 讀取之前MapReduce 框架會使用InputFormat 模塊做Map 的預前處理,檢驗其格式是否符合等。講文件邏輯上切分多個InputSplit 在這個過程中還需要RecordReader 記錄相應的處理信息。Map 函數(shù)將輸入的元素轉(zhuǎn)化為<key,value>鍵值對的形式,轉(zhuǎn)化的過程是根據(jù)用戶輸入的映射規(guī)則進行轉(zhuǎn)化的。因此鍵的類型和值的大小,都與用戶定義的規(guī)則有關(guān)。
2.2 Shuffle 過程分為Map 端和Reduce 端。Map 端的Shuffle 的任務主要分為以下幾部分:首先將輸入的數(shù)據(jù)按照用戶自定義的映射規(guī)則轉(zhuǎn)換成一批<key,value>,寫入緩存,每個任務都會分配一個緩存一般默認為100MB,溢寫比為0.8 這樣就能保證Map 持續(xù)的寫入緩存,即要保證緩存不滿。到達緩存后,在進入磁盤的過程中會先被分區(qū)、排序、合并。分區(qū)的方式是采用Hash 函數(shù)對Key 進行哈希后再對Reduce 任務進行取模,以為了更均勻的分配給Reduce。后臺進程還要根據(jù)key的不同進行排序,并根據(jù)用戶是否定義了合并操作而選擇合并,以減少寫到磁盤的數(shù)據(jù)量。合并的根本目的就是將key相同的value 相加起來目的是減少鍵值對的數(shù)量。寫入磁盤后,緩存要被清空。輸送到磁盤中要進行文件的歸并,所謂“歸并”就是要將相同的鍵值對的歸并成一個新鍵,待Map 端結(jié)束后Reduce端會“領(lǐng)取”屬于它的數(shù)據(jù)放到自己的磁盤中,期間Reduce 還會通過RPC向JobTracker 查看Map 的狀態(tài),保證任務的傳遞速率。Map 端領(lǐng)過來的數(shù)據(jù)會先放入Reduce 的緩存中,進行文件的歸并以及合并操作,最后把任務輸送到Reduce。圖2 為Shuffle 過程。
圖2 Shuffle 過程
2.3 在整個Shuffle 結(jié)束之后,Reduce 任務會根據(jù)Reduce函數(shù)中用戶定義的各種映射規(guī)則,輸出最終結(jié)果,并保存到分布式文件系統(tǒng)中。
在此進行一個網(wǎng)站日志清洗的實例,將其上傳到分布式系統(tǒng)中,并利用MapReduce 計算模型進行數(shù)據(jù)分析。
System.setProperty ("HADOOP_USER_NAME", "root"); // API 連接高可用時用到
總結(jié),本文首先介紹了Hadoop 在大數(shù)據(jù)技術(shù)中的重要地位,并簡單介紹了Hadoop 的兩大核心HDFS 和MapReduce 的概念。進而詳細介紹MapReduce 的組成部分和其各部分的主要功能,尤其是Map 函數(shù)的處理過程和Shuffle 的詳細過程。以及各部分組件在工作時的相互作用與協(xié)調(diào)。在MapReduce 計算模型的處理下,將網(wǎng)站的日志進行了分析處理將其日志進行清洗過濾得到了想要的分析結(jié)果。充分體現(xiàn)了Mapreduce 作為Hadoop 生態(tài)圈的重要一員,其在處理數(shù)據(jù)時具有的高效性和優(yōu)越性。