大數據基礎:Hadoop之MapReduce重點架構原理

文章目錄

Hadoop之MapReduce重點架構原理

一、MapReduce概念

二、MapReduce 編程思想

2.1、Map階段

2.2、Reduce階段

三、MapReduce處理數據流程

四、MapReduce Shuffle

五、MapReduce注意點

六、MapReduce的三次排序


Hadoop之MapReduce重點架構原理

一、MapReduce概念

MapReduce是Hadoop生態中的計算框架,用于大規模數據集的并行計算。

二、MapReduce 編程思想

2.1、Map階段

在Map階段中,輸入數據被分割成若干個獨立的塊,并由多個Mapper任務并行處理,每個Mapper任務都會執行用戶定義的map函數,將輸入數據轉換成一系列鍵-值對的形式(Key-Value Pairs),這些鍵-值對被中間存儲,以供Reduce階段使用。

Map階段主要是對數據進行映射變換,讀取一條數據可以返回一條或者多條K,V格式數據。

2.2、Reduce階段

在Reduce階段中,所有具有相同鍵的鍵-值對會被分配到同一個Reducer任務上,Reducer任務會執行用戶定義的reduce函數,對相同鍵的值進行聚合、匯總或其他操作,生成最終的輸出結果,Reduce階段也可以由多個Reduce Task并行執行。

Reduce階段主要對相同key的數據進行聚合,最終對相同key的數據生成一個結果,最終寫出到磁盤文件中。

三、MapReduce處理數據流程

  1. 首先MapReduce會將處理的數據集劃分成多個split,split劃分是邏輯上進行劃分,而非物理上的切分,每個split默認與Block塊大小相同,每個split由1個map task進行處理。

  2. map task以行為單位讀取split中的數據,將數據轉換成K,V格式數據,根據Key計算出本條數據應該寫出的分區號,最終在內部得到(K,V,P)格式數據寫入到當前map task 所在的物理節點磁盤,便于后續reduce task的處理。

  3. 為了避免每條數據都產生一次IO,MapReduce 引入了“環形緩沖區”內存數據結構,默認大小100M。先將處理好的每條數據寫入到“環形緩沖區”,當環形緩沖區使用達到80%時,會將數據溢寫到磁盤文件。根據split大小不同,可能會發生多次溢寫磁盤過程。

  4. 每次溢寫磁盤時會對數據進行二次排序:按照數據(K,V,P)中的P(分區)進行排序并在每個P(分區)中按照K進行排序,這樣能保證相同的分區數據放在一起并能保證每個分區內的數據按照key有序。

  5. 最終多次溢寫的磁盤文件數據會根據歸并排序算法合并成一個完整的磁盤文件,此刻,該磁盤文件特點是分區有序且分區內部數據按照key有序。

  6. Reduce端每個Reduce task會從每個map task所在的節點上拉取落地的磁盤文件對應的分區數據,對于每個Reduce task來說,從各個節點上拉取到多個分區數據后,每個分區內的數據按照key分組有序,但是總體來看這些分區文件中key數據不是全局有序狀態(分區數據內部有序,外部無序)。

  7. 每個Reduce task需要再通過一次歸并排序進行數據merge,將每個分區內的數據變成分區內按照key有序狀態,然后通過Reduce task處理將結果寫出到HDFS磁盤。

四、MapReduce Shuffle

  1. 分區(Partitioning):根據鍵值對的鍵,將中間鍵值對劃分到不同的分區。每個分區對應一個Reduce任務,這樣可以確保相同鍵的鍵值對被發送到同一個Reduce任務上進行處理。

  2. 排序(Sorting):對每個分區內的中間鍵值對按鍵進行排序(快排)。通過排序,相同鍵的鍵值對會相鄰存放,以便后續的合并操作更高效。

  3. 合并(Merging):對多次溢寫的結果按照分區進行歸并排序合并溢寫文件,每個maptask最終形成一個磁盤一些文件,減少后續Reduce階段的輸入數據量。

  4. Combiner(局部合并器):Combiner是一個可選的優化步驟,在Map任務輸出結果后、Reduce輸入前執行。其作用是對Map任務的輸出進行局部合并,將具有相同鍵的鍵值對合并為一個,以減少需要傳輸到Reduce節點的數據量,降低網絡開銷,并提高整體性能。Combiner實際上是一種輕量級的Reduce操作,用于減少數據在網絡傳輸過程中的負擔。需要注意的是,Combiner的執行并不是強制的,而是由開發人員根據具體情況決定是否使用。

  5. 拷貝(Copying):將各分區內的數據復制到各自對應的Reduce任務節點上,會先向內存緩沖區中存放數據,內存不夠再溢寫磁盤,當所有數據復制完畢后,Reduce Task統一對內存和磁盤數據進行歸并排序并交由Redcue方法并行處理。

五、MapReduce注意點

  1. MapReduce Job 中Map Task并行度由split切片決定。

  2. Split切片默認與一個block大小相等,block是物理切分,split是邏輯切分,也就是說split大小是通過offset范圍來決定每個split大小,而非真正的文件切分。

  3. 讀取數據源時,如果數據源頭包括多個文件,會針對每個文件單獨進行split切片,而不會考慮數據整體。

六、MapReduce的三次排序

  • 第一次排序發生在Map階段的磁盤溢寫時:當MapReduce的環形緩沖區達到溢寫閾值時,在數據刷寫到磁盤之前,會對數據按照key的字典序進行快速排序,以確保每個分區內的數據有序。

  • 第二次排序發生在多個溢寫磁盤小文件合并的過程中:經過多次溢寫后,Map端會生成多個磁盤文件,這些文件會被合并成一個分區有序且內部數據有序的輸出文件,從而確保輸出文件整體有序。

  • 第三次排序發生在Reduce端:Reduce任務在獲取來自多個Map任務輸出文件后,進行合并操作并通過歸并排序生成每個Reduce Task處理的分區文件整體有序。


  • 📢博客主頁:https://lansonli.blog.csdn.net
  • 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
  • 📢本文由 Lansonli 原創,首發于 CSDN博客🙉
  • 📢停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活?

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

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

相關文章

ORACLE重裝之后恢復數據庫,相當于sqlserver的附加數據庫

在開發機器上經常會遇到重裝系統的問題,重裝之前如果ORACLE沒有及時備份的話重裝之后就糾結了,數據還原很頭疼。 只能找到一些ORACLE安裝與重裝系統前目錄相同的解決辦法,目錄不同就沒招了。 我用的是oracle11G。老版的應該相似。 經過我的嘗試,找到了幾個關鍵點,現在分…

講講 JVM 的內存結構(附上Demo講解)

講講 JVM 的內存結構 什么是 JVM 內存結構?線程私有程序計數器?虛擬機棧本地方法棧 線程共享堆?方法區?注意永久代?元空間?運行時常量池?直接內存? 代碼詳解 什么是 JVM 內存結構? JVM內存結構分為5大區域,程序計數器、虛擬機棧、本地…

C# 泛型

泛型 泛型不是語法糖,而是由框架提供的一種便捷語法,首次出現在.NET 2.0中。 1. 泛型定義 泛型:是一種程序特性,定義時不對類型做出明確的規定,使用時規定且不能改變。一般應用:泛型集合、泛型方法、泛型…

機器學習——LR、?GBDT、?SVM、?CNN、?DNN、?RNN、?Word2Vec等模型的原理和應用

LR(邏輯回歸) 原理: 邏輯回歸模型(Logistic Regression, LR)是一種廣泛應用于分類問題的統計方法,尤其適用于二分類問題。其核心思想是通過Sigmoid函數將線性回歸模型的輸出映射到(0,1)區間,從…

【AI前沿】深度學習:神經網絡基礎

文章目錄 📑引言一、神經元和感知器1.1 神經元的基本概念1.2 感知器模型 二、多層感知器(MLP)2.1 MLP的基本結構2.2 激活函數的重要性2.3 激活函數2.4 激活函數的選擇 三、小結 📑引言 深度學習是現代人工智能的核心技術之一&…

kotlin Flow 學習指南 (三)最終篇

目錄 前言Flow生命周期StateFlow 替代LiveDataSharedFlow其他常見應用場景處理復雜、耗時邏輯存在依賴關系的接口請求組合多個接口的數據 Flow使用注意事項總結 前言 前面兩篇文章,介紹了Flow是什么,如何使用,以及相關的操作符進階&#xff…

如何挑選適合的需求池管理系統?10款優質工具分享

本文將分享10款優質需求池管理工具:PingCode、Worktile、Teambition、Epicor Kinetic、TAPD、SAP IBP、Logility、RELEX Solutions、JIRA、明道云。 在管理項目和產品需求時,正確的工具能夠大幅提高效率與透明度。如何從眾多需求池工具中選擇最適合團隊的…

第一節 SHELL腳本中的常用命令(2)

二,網絡管理命令nmcli 1.查看網卡 # 或者先用ip addr或ip a等查看網卡 ip a s 網卡名 ifconfig 網卡名 nmcil device show 網卡名 nmcil device status nmcil connection show 網卡名2.設置網卡 a)當網卡未被設置過時 設置dncp網絡工作模式 nmcil connection add con-name…

Rust編程-編寫自動化測試

編寫單元測試步驟: 1. 準備所需的數據 2. 調用需要測試的代碼 3. 斷言運行結果與我們所期望的一致 Rust的test元數據: #[cfg(test)]:是一個屬性宏(attribute macro)。用于控制特定的代碼段僅在測試環境中編譯…

自定義類型:聯合體

像結構體一樣,聯合體也是由一個或者多個成員組成,這些成員可以是不同的類型。 聯合體類型的聲明 編譯器只為最?的成員分配?夠的內存空間。聯合體的特點是所有成員共?同?塊內存空間。所以聯合體也叫:共?體。 輸出結果: 聯合體…

size_t 數據類型的好處

什么是size_t size_t 類型在不同的平臺上對應不同的底層整數類型,具體取決于平臺的指針大小。size_t 主要用于表示大小和長度,如數組的元素數量、緩沖區的大小等,它的設計目的是為了匹配指針的大小,以避免類型不匹配引起的錯誤。…

代碼隨想錄算法訓練營DAY58|101.孤島的總面積、102.沉沒孤島、103. 水流問題、104.建造最大島嶼

忙。。。寫了好久。。。。慢慢補吧。 101.孤島的總面積 先把周邊的島嶼變成水dfs def dfs(x, y, graph, s):if x<0 or x>len(graph) or y<0 or y>len(graph[0]) or graph[x][y]0:return sgraph[x][y]0s1s dfs(x1, y, graph, s)s dfs(x-1, y, graph, s)s dfs(…

【爬蟲入門知識講解:xpath】

3.3、xpath xpath在Python的爬蟲學習中&#xff0c;起著舉足輕重的地位&#xff0c;對比正則表達式 re兩者可以完成同樣的工作&#xff0c;實現的功能也差不多&#xff0c;但xpath明顯比re具有優勢&#xff0c;在網頁分析上使re退居二線。 xpath 全稱為XML Path Language 一種…

軟考高級第四版備考--第16天(規劃溝通管理)Plan Communication Management

定義&#xff1a;基于每個干系人或干系人群體的信息需求、可用的組織資產以及具體的項目的需求&#xff0c;為項目溝通活動制定恰當的方法和計劃的過程。 作用&#xff1a; 及時向干系人提供相關信息&#xff1b;引導干系人有效參與項目&#xff1b;編制書面溝通計劃&#xf…

【基于R語言群體遺傳學】-16-中性檢驗Tajima‘s D及連鎖不平衡 linkage disequilibrium (LD)

Tajimas D Test 已經開發了幾種中性檢驗&#xff0c;用于識別模型假設的潛在偏差。在這里&#xff0c;我們將說明一種有影響力的中性檢驗&#xff0c;即Tajimas D&#xff08;Tajima 1989&#xff09;。Tajimas D通過比較數據集中的兩個&#x1d703; 4N&#x1d707;估計值來…

vue項目中常見的一些preset及其關系

Babel的作用 Babel主要用途是用來做js代碼轉換的&#xff0c;將最新的js語法或者api轉換成低版本瀏覽器可兼容執行的代碼。 語法兼容是指一些瀏覽器新特性增加的js寫法&#xff0c;例如箭頭函數 ()>{}&#xff1b;低版本的瀏覽器無法識別這些&#xff0c;會導致一些語法解…

spark shuffle寫操作——UnsafeShuffleWriter

PackedRecordPointer 使用long類型packedRecordPointer存儲數據。 數據結構為&#xff1a;[24 bit partition number][13 bit memory page number][27 bit offset in page] LongArray LongArray不同于java中long數組。LongArray可以使用堆內內存也可以使用堆外內存。 Memor…

秋招突擊——7/9——字節面經

文章目錄 引言正文八股MySQL熟悉嗎&#xff1f;講一下MySQL索引的結構&#xff1f;追問&#xff1a;MySQL為什么要使用B樹&#xff1f;在使用MySQL的時候&#xff0c;如何避免索引失效&#xff1f;講一下MySQL的事物有哪幾種特征&#xff1f;MySQL的原子性可以實現什么效果&…

GESP C++ 三級真題(2023年9月)T2 進制判斷

進制判斷 問題描述 N進制數指的是逢N進一的計數制。例如&#xff0c;人們日常生活中大多使用十進制計數&#xff0c; 而計算機底層則一般使用二進制。除此之外&#xff0c;八進制和十六進制在一些場合也是 常用的計數制(十六進制中&#xff0c;一般使用字母A至F表示十至十五…

【區塊鏈+跨境服務】粵澳健康碼跨境互認系統 | FISCO BCOS應用案例

2020 年突如其來的新冠肺炎疫情&#xff0c;讓社會治理體系面臨前所未見的考驗&#xff0c;如何兼顧疫情防控與復工復產成為社會 各界共同努力的目標。區塊鏈技術作為傳遞信任的新一代信息基礎設施&#xff0c;善于在多方協同的場景中發揮所長&#xff0c;從 而為粵澳兩地的疫情…