MapReduce的執行過程(以及其中排序)

Map階段(MapTask): 切片(Split)-----讀取數據(Read)-------交給Mapper處理(Map)------分區和排序(sort)
Reduce階段(ReduceTask): 拷貝數據(copy)------排序(sort)-----合并(reduce)-----寫出(write)

1、Map task讀取:
框架調用InputFormat類的子類讀取HDFS中文件數據,把文件轉換為InputSplit。
默認,文件的一個block對應一個InputSplit,一個InputSplit對應一個map task。
一個InputSplit中的數據會被RecordReader解析成<k1,v1>。
默認,InputSplit中的一行解析成一個<k1,v1>。
默認,v1表示一行的內容,k1表示偏移量。
map:
框架調用mapper 類中的map方法,接收<k1,v1>輸出<k2,v2>,有多少個<k1,v1>,就執行多少次map分區: 框架對mapp的輸出進行分區,分區的目的是確定哪些<k2,v2>進入哪個reduce task。默認只有一個分區。
排序分組:框架對不同分區中的<k2,v2>進行排序分組.排序是按照k2進行排序。分組指的是相同k2的v2分到一個組中。分組不會減少<k2,v2>的數量。(快速排序)
combiner:可以在map task中對<k2,{v2}>執行reduce歸約。
寫入本地:框架對map的輸出寫入到Linux本地磁盤
2、reduce taskshuffle:
框架根據map不同分區中的數據,通過網絡copy到不同的reduce節點合并
排序分組:每個reduce會把多個map傳來的<k2,{v2}>進行合并排序分組(歸并排序)
reduce:框架調用reduce<k2,v2s>,有多少個分組就回執行多少回reduce
寫入HDFS:
框架對reduce輸出的數據寫入到hdfs中

快速排序:
個人理解:
就是歸位,分區,遞歸
比如: 4,6,9,2,1,3,8 這個數組,要對它使用快速排序
首先,選第一個 4 對它進行歸位 ,依次和4進行比較得到
左邊: 2,1,3
右邊:6,9,8
這樣我們就的得到了 2,1,3,4,6,9,8
然后在對兩邊進行遞歸的操作。

python 實現

def partition(li, left, right):tmp = li[left]# 當兩邊搜索并沒有重合的時候就進行雙向查找while left < right:# 這一級兩個判斷條件# 因為li[right] >= tmp退出說明在right出找到了小于tmp的值,這樣填到left就行了# 因為left < right退出是因為left右側的所有值都大于tmp,left已經和right重合了while left < right and li[right] >= tmp:  # left有空缺,需要right小于tmp的值來填補right = right - 1  # 往前一位接著找li[left] = li[right]  # 將右邊的數寫到左邊空缺處# 找到之后,right出現空缺,應從left找比tmp大的數填到rightwhile left < right and li[left] <= tmp:left = left + 1li[right] = li[left]# 當雙向查找兩邊重合時侯,left=right,將值寫入li[left] = tmpreturn lili = [5, 7, 4, 6, 3, 1, 2, 9, 8]
result = partition(li, 0, len(li)-1)
print(result)def quick_sort(li, left, right):if left < right:  # 至少兩個元素mid = partition(li, left, right)# 拿到mid之后就能對兩邊的部分進行相同的整理quick_sort(li, left, mid-1)quick_sort(li, mid+1, right)li = [5,7,4,6,3,1,2,9,8]
quick_sort(li, 0, len(li)-1)

歸并排序:
是將數組按 left mid right 劃分成兩個部分,要求每個部分是有序的,然后假設有兩個指針指在,兩個部分的第一個位置,開始比較,較小的被放到一個臨時集合中,指針移動到下一個位置,然后繼續比較,直到一方沒有下一個值 ,另一方剩下的就是最大的一部分直接放在臨時集合最后,整個排序完成。
python 實現

# 實現一次歸并的過程
# 前提是已經拿到兩個有序子的列表
def merge(li, low, mid, high):""":param li:列表:param low:第一段有序子列表起始位:param mid:第一段有序子列表終止位:param high:第二段有序子列表終止位:return:一次歸并操作之后的整個列表"""# i,j開始分別指向兩個有序子序列的起始位i = lowj = mid + 1ltmp = []  # 存儲結果用while i<=mid and j<=high:  # 只要兩個有序子序列都有數if li[i] < li[j]:ltmp.append(li[i])i = i + 1else:ltmp.append(li[j])j = j + 1# 兩部分中有一部分拿光了while i <= mid:  # 說明后面的拿光了ltmp.append(li[i])i = i + 1while j <= high:  # 說明前面的拿光了ltmp.append(li[j])j = j + 1li[low:high+1] = ltmp  # 將結果寫回去li = [0,2,4,6,8,1,3,5,7,9]
merge(li, 0, 4, len(li)-1)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210589.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210589.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210589.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue2與Vue3的語法對比

Vue2與Vue3的語法對比 Vue.js是一款流行的JavaScript框架&#xff0c;通過它可以更加輕松地構建Web用戶界面。隨著Vue.js的不斷發展&#xff0c;Vue2的語法已經在很多應用中得到了廣泛應用。而Vue3于2020年正式發布&#xff0c;帶來了許多新的特性和改進&#xff0c;同時也帶來…

rpc原理與應用

IPC和RPC&#xff1f; RPC 而RPC&#xff08;Remote Procedure Call&#xff09;&#xff0c;又叫做遠程過程調用。它本身并不是一個具體的協議&#xff0c;而是一種調用方式。 gRPC 是 Google 最近公布的開源軟件&#xff0c;基于最新的 HTTP2.0 協議&#xff0c;并支持常見…

【SQLite】SQLite3約束總結

前面學習了SQLite數據庫的常見使用方法&#xff0c;其中包含許多約束&#xff0c;常見的如NOT NULL、DEFAULT、UNIQUE、PRIMARY KEY&#xff08;主鍵&#xff09;、CHECK等 本篇文章主要介紹這些約束在SQLite中的使用 目錄 什么是約束NOT NULL 約束DEFAULT約束UNIQUE約束PRIMA…

【設計模式-3.2】結構型——適配器模式

說明&#xff1a;本文介紹設計模式中結構型設計模式中的&#xff0c;適配器模式&#xff1b; 插頭轉換器 適配器模式屬于結構型設計模式&#xff0c;設計思想體現在結構上的。以插頭轉換器為例&#xff0c;當你需要給手機充電&#xff0c;但是眼前只有一個三孔插座&#xff0…

Java基本類型的高級使用方法詳解

引言 Java中的基本數據類型&#xff08;primitive types&#xff09;是構建程序的基礎&#xff0c;包括整型、浮點型、字符型、布爾型等。除了直接使用這些基本類型外&#xff0c;Java還提供了一些高級的使用方法&#xff0c;使得我們能夠更靈活地處理基本類型數據。本文將深入…

二叉樹結點個數、葉子結點個數、樹的高度、第k層結點個數的計算(C語言)

目錄 前言 分治算法 模擬二叉樹代碼 結點個數計算 錯誤方法 不便利方法 基于分治思想的方法 葉子結點個數 樹的高度 第k層結點的個數 前言 在鏈式二叉樹的前序、中序、后續遍歷中我們模擬了一棵二叉樹&#xff0c;并實現了它的前、中、后序遍歷&#xff0c;現在我們來…

UE4 .ini文件使用

在需要給配置文件的類中加上config標簽&#xff0c;當然變量也要加 在項目的Config下&#xff0c;新建一個Default類的UCLASS中config等于的名字&#xff0c;這里結合上面截圖就是DefaultTest 在下面寫入 [/Script/項目名/類名] 然后寫變量以及對應的值即可

【Angular 開發】Angular 信號的應用狀態管理

自我介紹 做一個簡單介紹&#xff0c;年近48 &#xff0c;有20多年IT工作經歷&#xff0c;目前在一家500強做企業架構&#xff0e;因為工作需要&#xff0c;另外也因為興趣涉獵比較廣&#xff0c;為了自己學習建立了三個博客&#xff0c;分別是【全球IT瞭望】&#xff0c;【架構…

智能機器人在新材料方面遇到的挑戰

智能機器人在新材料方面面臨的挑戰包括但不限于以下幾點&#xff1a; 新材料的研發&#xff1a;機器人需要使用新材料來提高其性能和功能。然而&#xff0c;新材料的研發需要大量的時間和資金&#xff0c;同時還需要具備高超的技術和專業知識. 材料的可靠性&#xff1a;機器人…

GO面試題系列

1.GO有哪些關鍵字 2.GO有哪些數據類型 3.Go方法與函數的區別 在Go語言中&#xff0c;方法和函數是兩個不同的概念&#xff0c;盡管它們在某些方面有相似之處。下面是它們的主要區別&#xff1a; 定義位置&#xff1a; 函數&#xff1a; 函數是獨立聲明的&#xff0c;它們不…

python數據分析總結(pandas)

目錄 前言 df導入數據 df基本增刪改查 數據清洗 ?編輯 索引操作 數據統計 行列操作 ?編輯 df->types 數據格式化 ?編輯 日期數據處理 前言 此篇文章為個人python數據分析學習總結&#xff0c;總結內容大都為表格和結構圖方式&#xff0c;僅供參考。 df導入數…

Vue3使用vue-baidu-map-3x百度地圖

安裝vue-baidu-map-3x&#xff1a; // vue3 $ npm install vue-baidu-map-3x --save// vue2 $ npm install vue2-baidu-map --save 全局注冊/局部注冊&#xff1a; import { createApp } from vue import App from ./App.vue import BaiduMap from vue-baidu-map-3xconst app …

綜述 2017-Genome Biology:Alignment-free sequence comparison

Zielezinski, Andrzej, et al. "Alignment-free sequence comparison: benefits, applications, and tools." Genome biology 18 (2017): 1-17. https://genomebiology.biomedcentral.com/articles/10.1186/s13059-017-1319-7 被引次數&#xff1a;476應用問題&…

curl 18 HTTP/2 stream

cd /Users/haijunyan/Desktop/CustomKit/KeepThreadAlive/KeepThreadAlive //Podfile所在文件夾 git config --global https.postBuffer 10485760000 git config --global http.postBuffer 10485760000 pod install https://blog.csdn.net/weixin_41872403/article/details/86…

linux命令積累

1.查找指定目錄下第二層目錄&#xff0c;一年前的文件 find $dir -maxdepth 1 -type d -mtime 365 2./data/att/dir1軟連接到/data1/att/dir1 硬連接和軟連接的區別 硬連接 ln file1 file2 1.硬連接不能對目錄進行鏈接。 2.硬連接修改一個文件&#xff08;不論修改哪方文件&…

top K問題(借你五分鐘)

目錄 前言 top K問題 模擬數據 建堆 驗證&#xff08;簡單了解即可&#xff09; 最終代碼 調試部分 前言 在大小堆的實現&#xff08;C語言&#xff09;中我們討論了堆的實際意義&#xff0c;在看了就會的堆排序&#xff08;C語言&#xff09;中我們完成了堆排序&#…

銀河麒麟本地軟件源配置方法

軟件源介紹 軟件源可以理解為軟件倉庫&#xff0c;當需要安裝軟件時則會根據源配置去相應的軟件源下載軟件包&#xff0c;此方法的優點是可以自動解決軟件包的依賴關系。常見的軟件源有光盤源、硬盤源、FTP源、HTTP源&#xff0c;本文檔主要介紹本地軟件源的配置方法&#xff…

功能強大的屏幕錄制和剪輯工具Camtasia Studio 2024 中文版

Camtasia Studio 2024 是一款功能強大的屏幕錄像工具&#xff0c;集視頻錄制、剪輯、編輯和播放于一體的多功能屏幕錄制軟件&#xff0c;Camtasia Studio 2024操作簡單&#xff0c;它能夠輕松為您將屏幕上的所有聲音、影音、鼠標移動的軌跡和麥克風聲音全部錄制下來&#xff0c…

分布式架構原理與實踐讀書筆記

分布式架構原理與實踐讀書筆記 IT 軟件架構的更迭&#xff1a;從單體架構&#xff0c;到集群架構&#xff0c;到現在的分布式和微服務架構。 分布式架構具有分布性、自治性、并行性、全局性等特點。 為了應對請求的高并發和業務的復雜性&#xff0c;需要對應用服務進行合理拆…

springboot(ssm暢游游戲銷售平臺 游戲電商系統Java系統

springboot(ssm暢游游戲銷售平臺 游戲電商系統Java系統 開發語言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服務器&#xff1a;tomcat 數據庫&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; 數…