2022-11-17
數(shù)據(jù) 文件 鍵值 進行
Map階段
MapTask進程啟動之后,會根據(jù)對應(yīng)的輸入分片來處理數(shù)據(jù),每一個分片分配一個MapTask來處理。
使用客戶端指定的InputFormat來讀取數(shù)據(jù),常用的就是LineRecordReader對象。它會逐行讀取分片中的數(shù)據(jù),并形成一個鍵值對。鍵為行偏移量,值為行記錄。我們通常稱為
將讀取到的鍵值對數(shù)據(jù)輸入到map方法中,進行用戶自己的邏輯處理。并輸出鍵值對,我們稱為
map方法輸出的鍵值對,會被搜集進環(huán)形緩沖區(qū)。環(huán)形緩沖區(qū)是內(nèi)存中的一個字節(jié)數(shù)組,默認的大小是100M。
當環(huán)形緩沖區(qū)中被寫入了80%的數(shù)據(jù)的時候,會將這80%的部分進行分區(qū)、排序,并溢寫到磁盤,生成一個文件。在這個過程中,如果上游還有數(shù)據(jù)產(chǎn)生,將存儲在剩余的20%的空間內(nèi)。如果上游產(chǎn)生數(shù)據(jù)的速度非常快,剩余的20%也被填充滿,并且80%的數(shù)據(jù)還沒有溢寫完成,此時任務(wù)將阻塞,上游不再讀取數(shù)據(jù),直到溢寫文件完成。最終可能會生成多個溢寫的磁盤文件。
將每一個溢寫的磁盤文件合并成為一個文件,在合并的過程中,依然會按照分區(qū)、Key進行排序。最終,每一個MapTask生成一個磁盤文件。至此,MapTask執(zhí)行結(jié)束。
Reduce階段
每一個ReduceTask需要去處理一個分區(qū)的數(shù)據(jù),因此ReduceTask需要到每一個MapTask所在的節(jié)點去fetch自己分區(qū)的數(shù)據(jù)。
拉取到的數(shù)據(jù),如果比較小,會直接保存在內(nèi)存中,在內(nèi)存中完成排序,直到達到內(nèi)存閾值,將其溢寫到文件中;如果比較大,會直接以文件的形式保存起來。
數(shù)據(jù)拉取完成后,會按照設(shè)定好的合并因子進行合并。
按照Map階段輸出的的鍵進行分組,將相同鍵所對應(yīng)的所有的值聚合到一起,形成一個集合。
將分組之后的鍵值對>,輸入到Reduce方法中,進行邏輯處理。并輸出最終的結(jié)果
將最終的結(jié)果,由客戶端指定的OutputFormat進行輸出。至此ReduceTask結(jié)束。
開班時間:2021-04-12(深圳)
開班盛況開班時間:2021-05-17(北京)
開班盛況開班時間:2021-03-22(杭州)
開班盛況開班時間:2021-04-26(北京)
開班盛況開班時間:2021-05-10(北京)
開班盛況開班時間:2021-02-22(北京)
開班盛況開班時間:2021-07-12(北京)
預(yù)約報名開班時間:2020-09-21(上海)
開班盛況開班時間:2021-07-12(北京)
預(yù)約報名開班時間:2019-07-22(北京)
開班盛況
Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right
京ICP備12003911號-5
京公網(wǎng)安備 11010802035720號