溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MapReduce 實(shí)驗(yàn) (一) 原理

發(fā)布時(shí)間:2020-07-22 13:49:59 來(lái)源:網(wǎng)絡(luò) 閱讀:1446 作者:pcdog 欄目:大數(shù)據(jù)

官網(wǎng)

http://hadoop.apache.org/

hadoop三大組件

HDFS:分布式存儲(chǔ)系統(tǒng)

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html

MapReduce:分布式計(jì)算系統(tǒng)

http://hadoop.apache.org/docs/r2.8.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html

YARN: hadoop 的資源調(diào)度系統(tǒng)

http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/YARN.html

回想起以前做過(guò)一個(gè)中鐵軌道激光測(cè)量軌道平整的項(xiàng)目,一段50KM的數(shù)據(jù)庫(kù)大小是400G,光是找空間復(fù)制出來(lái)就是頭大,現(xiàn)在有了分布式的數(shù)據(jù)庫(kù)和計(jì)算平臺(tái)就可以非常方便的進(jìn)行。

MapReduce 實(shí)驗(yàn) (一) 原理

MapReduce 實(shí)驗(yàn) (一) 原理

Mapper

映射器將輸入鍵/值對(duì)映射到一組中間鍵/值對(duì)中。

  • 映射是將輸入記錄轉(zhuǎn)換為中間記錄的單個(gè)任務(wù)。轉(zhuǎn)換后的中間記錄不需要與輸入記錄相同的類型。給定的輸入對(duì)可以映射到零或多個(gè)輸出對(duì)。
  • Hadoop的MapReduce框架產(chǎn)生一個(gè)地圖的任務(wù)由每個(gè)InputSplit工作InputFormat生成。
  • 總的來(lái)說(shuō),制圖的實(shí)現(xiàn)是通過(guò)工作傳遞到工作setmapperclass(類)的方法??蚣苷{(diào)用圖(writablecomparable,寫,上下文)每個(gè)鍵/值對(duì),任務(wù)在InputSplit對(duì)。然后應(yīng)用程序可以覆蓋清除(上下文)方法來(lái)執(zhí)行任何必需的清理工作。
  • 輸出對(duì)不需要與輸入對(duì)相同的類型。給定的輸入對(duì)可以映射到零或多個(gè)輸出對(duì)。輸出對(duì)被調(diào)用的上下文所寫(writablecomparable,可寫)。

應(yīng)用程序可以使用計(jì)數(shù)器報(bào)告其統(tǒng)計(jì)數(shù)據(jù)。

  • 所有與給定輸出鍵相關(guān)聯(lián)的中間值隨后由框架分組,并傳遞給減速器以確定最終輸出。用戶可以通過(guò)指定一個(gè)比較器通過(guò)工作控制分組。setgroupingcomparatorclass(類)。
  • 對(duì)映射器輸出進(jìn)行排序,然后對(duì)每個(gè)減速器進(jìn)行分區(qū)。分區(qū)的總數(shù)與任務(wù)的減少任務(wù)數(shù)相同。用戶可以控制鍵(因此記錄)通過(guò)實(shí)現(xiàn)一個(gè)自定義的分割器去哪。
  • 用戶可以選擇指定一個(gè)合成器,通過(guò)工作。setcombinerclass(類),執(zhí)行中間輸出的地方聚集,這有助于減少?gòu)闹茍D到減速器的數(shù)據(jù)量。
  • 中間排序的輸出總是存儲(chǔ)在一個(gè)簡(jiǎn)單(鍵、鍵、值、值)格式中。應(yīng)用程序可以控制的話,又如何,中間輸出被壓縮和compressioncodec可以通過(guò)配置。

Reducer

  • 減速減少一組中間值份額較小的一組值的關(guān)鍵。
  • 數(shù)量減少了工作組通過(guò)工作的用戶。setnumreducetasks(int)。
  • 總的來(lái)說(shuō),減速器的實(shí)現(xiàn)是通過(guò)崗位工作經(jīng)工作。setreducerclass(類)方法,可以重寫它初始化自己。框架調(diào)用減少(writablecomparable,個(gè)<寫>,<上下文)為每個(gè)關(guān)鍵方法(值列表)>在分組的輸入對(duì)。應(yīng)用程序可以重寫清理(上下文)執(zhí)行任何所需的清理方法。
  • 減速器有3個(gè)主要階段:洗牌,排序和減少。

Shuffle洗牌

  • 輸入減速器的排序輸出的映射。在這一階段的框架帶來(lái)的所有映射器輸出相應(yīng)的分區(qū),通過(guò)HTTP。

Partitioner分區(qū)

  • partitions空間分區(qū)是關(guān)鍵。
  • 分區(qū)分配的關(guān)鍵的中間圖的輸出。“密鑰或密鑰的子集的冰derive)使用的分區(qū),typically A市的哈希函數(shù)。的總數(shù)partitions冰茶一樣的號(hào)碼reduce任務(wù)的工作。這hence米,江森自控的reduce任務(wù)的中間密鑰和hence記錄)的冰后期兩個(gè)還原。
  • hashpartitioner是默認(rèn)的分區(qū)。

Counter計(jì)數(shù)器

  • 計(jì)數(shù)器是MapReduce應(yīng)用程序報(bào)告其統(tǒng)計(jì)數(shù)據(jù)的工具。
  • 映射器和減速器實(shí)現(xiàn)可以使用計(jì)數(shù)器報(bào)告統(tǒng)計(jì)數(shù)據(jù)。
  • Hadoop的MapReduce的附帶了一個(gè)普遍有用的映射器,減速器庫(kù),并計(jì)劃。

其實(shí)MapReduce講的就是分而治之的程序處理理念,把一個(gè)復(fù)雜的任務(wù)劃分為若干個(gè)簡(jiǎn)單的任務(wù)分別來(lái)做。另外,就是程序的調(diào)度問(wèn)題,哪些任務(wù)給哪些Mapper來(lái)處理是一個(gè)著重考慮的問(wèn)題。MapReduce的根本原則是信息處理的本地化,哪臺(tái)PC持有相應(yīng)要處理的數(shù)據(jù),哪臺(tái)PC就負(fù)責(zé)處理該部分的數(shù)據(jù),這樣做的意義在于可以減少網(wǎng)絡(luò)通訊負(fù)擔(dān)。最后補(bǔ)上一副經(jīng)典的圖來(lái)做最后的補(bǔ)充,畢竟,圖表往往比文字更有說(shuō)服力。

MapReduce 實(shí)驗(yàn) (一) 原理

如果那個(gè)400G的數(shù)據(jù)庫(kù)還在,分成400個(gè)任務(wù),每個(gè)任務(wù)進(jìn)行1g左右數(shù)據(jù)處理,理論上速度是原來(lái)的400倍。

具體請(qǐng)參考google mapreduce

https://wenku.baidu.com/view/1aa777fd04a1b0717fd5dd4a.html

MapReduce如何工作

讓我們用一個(gè)例子來(lái)理解這一點(diǎn) –

假設(shè)有以下的輸入數(shù)據(jù)到 MapReduce 程序,統(tǒng)計(jì)以下數(shù)據(jù)中的單詞數(shù)量:

Welcome to Hadoop Class

Hadoop is good

Hadoop is bad

MapReduce 實(shí)驗(yàn) (一) 原理

MapReduce 任務(wù)的最終輸出是:

bad

1

Class

1

good

1

Hadoop

3

is

2

to

1

Welcome

1

這些數(shù)據(jù)經(jīng)過(guò)以下幾個(gè)階段

輸入拆分:

輸入到MapReduce工作被劃分成固定大小的塊叫做 input splits ,輸入折分是由單個(gè)映射消費(fèi)輸入塊。

映射 - Mapping

這是在 map-reduce 程序執(zhí)行的第一個(gè)階段。在這個(gè)階段中的每個(gè)分割的數(shù)據(jù)被傳遞給映射函數(shù)來(lái)產(chǎn)生輸出值。在我們的例子中,映射階段的任務(wù)是計(jì)算輸入分割出現(xiàn)每個(gè)單詞的數(shù)量(更多詳細(xì)信息有關(guān)輸入分割在下面給出)并編制以某一形式列表<單詞,出現(xiàn)頻率>

重排

這個(gè)階段消耗映射階段的輸出。它的任務(wù)是合并映射階段輸出的相關(guān)記錄。在我們的例子,同樣的詞匯以及它們各自出現(xiàn)頻率。

Reducing

在這一階段,從重排階段輸出值匯總。這個(gè)階段結(jié)合來(lái)自重排階段值,并返回一個(gè)輸出值??傊@一階段匯總了完整的數(shù)據(jù)集。

在我們的例子中,這個(gè)階段匯總來(lái)自重排階段的值,計(jì)算每個(gè)單詞出現(xiàn)次數(shù)的總和。

MapReduce如何組織工作?

Hadoop 劃分工作為任務(wù)。有兩種類型的任務(wù):

  1. Map 任務(wù) (分割及映射)
  2. Reduce 任務(wù) (重排,還原)

如上所述

完整的執(zhí)行流程(執(zhí)行 Map 和 Reduce 任務(wù))是由兩種類型的實(shí)體的控制,稱為

  1. Jobtracker : 就像一個(gè)主(負(fù)責(zé)提交的作業(yè)完全執(zhí)行)
  2. 多任務(wù)跟蹤器 : 充當(dāng)角色就像從機(jī),它們每個(gè)執(zhí)行工作

對(duì)于每一項(xiàng)工作提交執(zhí)行在系統(tǒng)中,有一個(gè) JobTracker 駐留在 Namenode 和 Datanode 駐留多個(gè) TaskTracker。

MapReduce 實(shí)驗(yàn) (一) 原理

  • 作業(yè)被分成多個(gè)任務(wù),然后運(yùn)行到集群中的多個(gè)數(shù)據(jù)節(jié)點(diǎn)。
  • JobTracker的責(zé)任是協(xié)調(diào)活動(dòng)調(diào)度任務(wù)來(lái)在不同的數(shù)據(jù)節(jié)點(diǎn)上運(yùn)行。
  • 單個(gè)任務(wù)的執(zhí)行,然后由 TaskTracker 處理,它位于執(zhí)行工作的一部分,在每個(gè)數(shù)據(jù)節(jié)點(diǎn)上。
  • TaskTracker 的責(zé)任是發(fā)送進(jìn)度報(bào)告到JobTracker。
  • 此外,TaskTracker 周期性地發(fā)送“心跳”信號(hào)信息給 JobTracker 以便通知系統(tǒng)它的當(dāng)前狀態(tài)。
  • 這樣 JobTracker 就可以跟蹤每項(xiàng)工作的總體進(jìn)度。在任務(wù)失敗的情況下,JobTracker 可以在不同的 TaskTracker 重新調(diào)度它。
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI