Hadoop之MapReduce框架原理

2021-10-22 13:45:47 字數 2905 閱讀 3910

mapreduce的資料流

1)問題引入

maptask的並行度決定map階段的任務處理併發度,進而影響到整個job的處理速度。

思考:1g的資料,啟動8個maptask,可以提高集群的併發處理能力。那麼1k的資料,也啟動8個maptask,會提高集群效能嗎?maptask並行任務是否越多越好呢?哪些因素影響了maptask並行度?

2)maptask並行度決定機制

資料塊:block是hdfs物理上把資料分成一塊一塊,資料塊是hdfs儲存資料單位.

資料切片:資料切片只是在邏輯上對輸入進行分片,並不會在磁碟上將其切分成片進行儲存.資料切片是mapreduce程式計算輸入資料的單位,乙個切片會對應啟動乙個maptask

1)乙個job的map階段並行度由客戶端在提交job時的切片數決定

2)每乙個split切片分配乙個maptask並行例項處理

3)預設情況下,切片大小=blocksize

4)切片時不考慮資料集整體,而是逐個針對每乙個檔案單獨切片

waitforcompletion()

submit()

;// 1建立連線

connect()

;// 1)建立提交job的**

newcluster

(getconfiguration()

);// (1)判斷是本地執行環境還是yarn集群執行環境

initialize

(jobtrackaddr, conf)

;// 2 提交job

submitter.

submitjobinternal

(job.

this

, cluster)

// 1)建立給集群提交資料的stag路徑

path jobstagingarea = jobsubmissionfiles.

getstagingdir

(cluster, conf)

;// 2)獲取jobid ,並建立job路徑

jobid jobid = submitclient.

getnewjobid()

;// 3)拷貝jar包到集群

copyandconfigurefiles

(job, submitjobdir)

; ruploader.

uploadfiles

(job, jobsubmitdir)

;// 4)計算切片,生成切片規劃檔案

writesplits

(job, submitjobdir)

; maps =

writenewsplits

(job, jobsubmitdir)

; input.

getsplits

(job)

;// 5)向stag路徑寫xml配置檔案

writeconf

(conf, submitjobfile)

; conf.

writexml

(out)

;// 6)提交job,返回提交狀態

1.切片機制(1)簡單的按照檔案的內容長度進行切片

(2)切片大小,預設等於block大小

(3)切片時不考慮資料集整體,而是逐個針對每乙個檔案單獨切片

2.案例分析

(1)輸入的資料有兩個檔案:

(2)經過fileinputformat的切片機制運算後,形成的切片資訊如下:

(1)原始碼中計算切片大小的公式

(2)切片大小設定

(3) 獲取切片資訊api

fileinputformat常見的介面實現類包括:textinputformat,keyvaluetextinputformat,nlineinputformat,combinetextinputformat和自定義inputformat等.

textinputformat是預設的fileinputformat實現類,按行讀取每天記錄.鍵是儲存改行在整個檔案中的起始位元組偏移量,longwritable型別.值是這行的內容,不包括任何終止符(換行符和回車符),text型別

hadoop批量計算框架 MapReduce

結合自身的經驗記錄,mapreduce中的一些知識點以及乙個wordcount小實踐 核心思想 分而治之 map程式 需要根據自己的需求開發 shuffle 緩衝區大小設定 core site.xml設定為100m io.file.buffer.size 100000000 以位元組為單位 hdfs...

Hadoop的分布式計算 MapReduce

什麼是mapreduce?你想數出一摞牌中有多少張黑桃。直觀方式是一張一張檢查並且數出有多少張是黑桃。mapreduce方法則是 1.給在座的所有玩家中分配這摞牌 2.讓每個玩家數自己手中的牌有幾張是黑桃,然後把這個數目匯報給你 3.你把所有玩家告訴你的數字加起來,得到最後的結論 1 mapredu...

Hadoop基本原理之一 MapReduce

1 為什麼需要hadoop 目前,一塊硬碟容量約為1tb,讀取速度約為100m s,因此完成一塊硬碟的讀取需時約2.5小時 寫入時間更長 若把資料放在同一硬碟上,且全部資料均需要同乙個程式進行處理,此程式的處理時間將主要浪費在i o時間上。在過去幾十年,硬碟的讀取速度並未明顯增長,而網路傳輸速度此飛...