分布式平行計算MapReduce

2021-09-25 18:16:11 字數 3728 閱讀 6450

1.用自己的話闡明hadoop平台上hdfs和mapreduce的功能、工作原理和工作過程。

hdfs

(1)第一次啟動 namenode 格式化後,建立 fsimage 和 edits 檔案。如果不是第一次啟動,直接載入編輯日誌和映象檔案到記憶體。

(2)客戶端對元資料進行增刪改的請求。

(3)namenode 記錄操作日誌,更新滾動日誌。

(4)namenode 在記憶體中對資料進行增刪改查。

2)第二階段:secondary namenode 工作

(1)secondary namenode 詢問 namenode 是否需要 checkpoint。直接帶回 namenode 是否檢查結果。

(2)secondary namenode 請求執行 checkpoint。

(3)namenode 滾動正在寫的 edits 日誌。

(4)將滾動前的編輯日誌和映象檔案拷貝到 secondary namenode。

(5)secondary namenode 載入編輯日誌和映象檔案到記憶體,並合併。

(6)生成新的映象檔案 fsimage.chkpoint。

(7)拷貝 fsimage.chkpoint 到 namenode。

namenode 將 fsimage.chkpoint 重新命名成 fsimage。

datanode:

shuffle過程:

1)maptask 收集我們的 map()方法輸出的 kv 對,放到記憶體緩衝區中

2)從記憶體緩衝區不斷溢位本地磁碟檔案,可能會溢位多個檔案

3)多個溢位檔案會被合併成大的溢位檔案

4)在溢位過程中,及合併的過程中,都要呼叫 partitioner 進行分割槽和針對 key 進行排序

5)reducetask 根據自己的分割槽號,去各個 maptask 機器上取相應的結果分割槽資料

6)reducetask 會取到同乙個分割槽的來自不同 maptask 的結果檔案,reducetask 會將這些檔案再進行合併(歸併排序)

7)合併成大檔案後,shuffle 的過程也就結束了,後面進入 reducetask 的邏輯運算過程

(從檔案中取出乙個乙個的鍵值對 group,呼叫使用者自定義的reduce()方法)

maptask

(1)read 階段:map task 通過使用者編寫的 recordreader,從輸入 inputsplit 中解析出乙個個 key/value。

(2)map 階段:該節點主要是將解析出的 key/value 交給使用者編寫 map()函式處理,並產生一系列新的 key/value。

(3)collect 收集階段:在使用者編寫 map()函式中,當資料處理完成後,一般會呼叫outputcollector.collect()輸出結果。在該函式內部,它會將生成的 key/value 分割槽(呼叫partitioner),並寫入乙個環形記憶體緩衝區中。

(4)spill 階段:即「溢寫」,當環形緩衝區滿後,mapreduce 會將資料寫到本地磁碟上,生成乙個臨時檔案。需要注意的是,將資料寫入本地磁碟之前,先要對資料進行一次本地排序,並在必要時對資料進行合併、壓縮等操作。

溢寫階段詳情:

步驟 1:利用快速排序演算法對快取區內的資料進行排序,排序方式是,先按照分割槽編號

partition 進行排序,然後按照 key 進行排序。這樣,經過排序後,資料以分割槽為單位聚集在一起,且同一分區內所有資料按照 key 有序。

步驟 2:按照分割槽編號由小到大依次將每個分割槽中的資料寫入任務工作目錄下的臨時檔案 output/spilln.out(n 表示當前溢寫次數)中。如果使用者設定了 combiner,則寫入檔案之前,對每個分割槽中的資料進行一次聚集操作。

步驟 3:將分割槽資料的元資訊寫到記憶體索引資料結構 spillrecord 中,其中每個分割槽的元資訊包括在臨時檔案中的偏移量、壓縮前資料大小和壓縮後資料大小。如果當前記憶體索引大小超過 1mb,則將記憶體索引寫到檔案 output/spilln.out.index 中。

(5)combine 階段:當所有資料處理完成後,maptask 對所有臨時檔案進行一次合併,以確保最終只會生成乙個資料檔案。

當所有資料處理完後,maptask 會將所有臨時檔案合併成乙個大檔案,並儲存到檔案output/file.out 中,同時生成相應的索引檔案 output/file.out.index。

在進行檔案合併過程中,maptask 以分割槽為單位進行合併。對於某個分割槽,它將採用多輪遞迴合併的方式。每輪合併 io.sort.factor(預設 100)個檔案,並將產生的檔案重新加入待合併列表中,對檔案排序後,重複以上過程,直到最終得到乙個大檔案。

讓每個 maptask 最終只生成乙個資料檔案,可避免同時開啟大量檔案和同時讀取大量小檔案產生的隨機讀取帶來的開銷。

reducetask:

(1)copy 階段:reducetask 從各個 maptask 上遠端拷貝一片資料,並針對某一片資料,如果其大小超過一定閾值,則寫到磁碟上,否則直接放到記憶體中。

(2)merge 階段:在遠端拷貝資料的同時,reducetask 啟動了兩個後台執行緒對記憶體和磁碟上的檔案進行合併,以防止記憶體使用過多或磁碟上檔案過多。

(3)sort 階段:按照 mapreduce 語義,使用者編寫 reduce()函式輸入資料是按 key 進行聚集的一組資料。為了將 key 相同的資料聚在一起,hadoop 採用了基於排序的策略。由於各個 maptask 已經實現對自己的處理結果進行了區域性排序,因此,reducetask 只需對所有資料進行一次歸併排序即可。

(4)reduce 階段:reduce()函式將計算結果寫到 hdfs 上。

2.hdfs上執行mapreduce

1)準備文字檔案,放在本地/home/hadoop/wc

2)編寫map函式和reduce函式,在本地執行測試通過

3)啟動hadoop:hdfs, jobtracker, tasktracke

4)把文字檔案上傳到hdfs檔案系統上 user/hadoop/input 

5)streaming的jar檔案的路徑寫入環境變數,讓環境變數生效

7)source run.sh來執行mapreduce

8)檢視執行結果

分布式平行計算MapReduce

作業要求來自 1.用自己的話闡明hadoop平台上hdfs和mapreduce的功能 工作原理和工作過程。hdfs hadoop distributed file system,hadoop分布式檔案系統 它是乙個高度容錯性的系統,適合部署在廉價的機器上。hdfs能提供高吞吐量的資料訪問,適合那些有...

平行計算與分布式計算

主要內容來自維基百科 分布式系統是聯網計算機組,其工作目標相同。術語 併發計算 平行計算 和 分布式計算 有很多重疊,它們之間沒有明顯的區別。15 同一系統可以表徵為 並行 和 分布式 典型分布式系統中的處理器並行執行。16 平行計算可以被看作分布式計算的乙個特定的緊密耦合的形式,17 和分布式計算...

平行計算與分布式計算的區別

平行計算 空間復用多個處理器 intel多 指令優化集是針對乙個處理器,擴充套件處理額外的資料,屬於特殊的平行計算優化 多處理器系統,作業系統採用平行計算的排程方法,允許多個執行緒在多個處理器上同時執行。分布式處理系統 某種處理任務被分解到多個處理器上,系統為扁平結構,一般上層有乙個控制中心,下層有...