Reduce原始碼分析

2021-09-24 13:51:44 字數 1543 閱讀 3505

先拉取資料(拷貝map的輸出資料),再二次排序(分組的比較–迭代器),最後是reduce

reducetask

​ *riter 用於代表reduce從所有map拉取的資料,有歸併功能(基於map的歸併方法) --真迭代器

​ *compartor 分組比較器

​ *getoutputvaluegropingcomparator

​ 比較器取值過程

​ 1檢視使用者是否設定分組比較器

​ 2走map端排序比較器

​ 2-1先檢視使用者是否設定排序比較器

​ 2-2如果沒有設定取k自己的比較器

​ *runnewreducer

​ *createreducecontext

​ *reducecontext

​ *reducecontextimpl

​ nextkey()

​ nextkeyvalue() 作用:

​ 1將map端拉取的io資料反序列化,簡而言之,是對k,v賦值

​ 2 nextkeyissame 取出下一組資料,利用分組比較器,比較前一條k與下一條k值

​ getcurrentkey()

​ getvalues() 用到迭代器,也是在reducecontextimpl方法中

注意nextkeyissame,其作用是預判斷–比較前條和下條資料的k值是否一致使用的是分組比較器,這個值真假迭代器都要使用,真迭代器的nextkeyissame值除了map輸入檔案的最後一條資料外可以為空其他時候都不會為空。但是假迭代器的nextkeyissame值在當前組不為空,原理如下

比較器comparator在map中是排序比較器 在reduce中是分組比較器

​ 在排序比較器中有3個比較結果 >,<,= 2種取值過程(2)

​ 在分組比較器中有2個比較結果 是,不是 3種取值過程(1,2)

比較器取值過程

​ 1檢視使用者是否設定分組比較器

​ 2走map端排序比較器

​ 2-1先檢視使用者是否設定排序比較器

​ 2-2如果沒有設定取k自己的比較器

nextkeyvalue()這個方法在map端是 對k,v賦值的過程

​ 在reduce端 1對k,v賦值

​ 2做預判斷–比較前條和下條資料的k值是否一致(分組比較器)

reduce的迭代原理

假迭代器取的是真迭代器的內部資料,但是真迭代器會做預判斷處理,當假迭代器使用nextkeyvalue方法取值時,當假迭代器遇到前條資料與下條資料的k值不相等情況時,假迭代器執行完畢,會跳出迴圈。

這樣保證了相同的k為一組,這組資料在reduce方法內進行迭代,所以假迭代器只能執行一組資料的歸併

map-reduce不占用記憶體空間

map不占用記憶體空間,只需要分配的溢寫磁碟大小(預設100m),溢寫出來的小檔案都在磁碟上

reduce拉取的map資料在磁碟當中,只占用幾條記錄的記憶體​

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...