大數據領域開山鼻祖組件Hadoop核心架構設計

一、Hadoop的整體架構

Hadoop是一個專為大數據設計的架構解決方案,歷經多年開發演進,已逐漸發展成為一個龐大且復雜的系統。其內部工作機制融合了分布式理論與具體工程開發的精髓,構成了一個整體架構。

Hadoop最樸素的原理在于,它利用大量的普通計算機來處理大規模數據的存儲和分析任務,而非依賴于單一的超級計算機。這一設計理念不僅降低了硬件成本,還通過分布式處理提高了系統的可擴展性和容錯性。

Hadoop作為大數據處理領域的基石性架構,其設計理念體現了"分而治之"的分布式計算哲學。經過十余年的技術演進,Hadoop已從最初的單一計算框架發展為包含存儲、資源管理、計算引擎等完整組件的生態系統,其架構復雜度反映了分布式系統理論與工程實踐的深度融合。

Hadoop 系統的一個架構圖,現在已經有了非常多的組件,但最核心的兩部分依然是底層的文件系統 HDFS和用于計算的 MapReduce。來看下 Hadoop 系統中的一些重要組成部分。

在這里插入圖片描述

二、HDFS(分布式文件系統)

HDFS 主要有 NameNode、DataNode、Secondary NameNode 三大組件:

  • ?NameNode?

    • 管理文件系統的命名空間
    • 協調客戶端對文件的訪問
    • 存儲文件系統的元數據
  • ?Secondary NameNode?

    • 定期合并NameNode的編輯日志和鏡像文件,減少NameNode啟動時間
    • 提供NameNode的備份,但不用于故障切換
  • ?DataNode?

    • 存儲實際的數據塊
    • 執行數據的讀寫操作
    • 定期向NameNode報告其存儲的數據塊信息

在這里插入圖片描述

Primary Namenode 與 Secondary Namenode

在這里插入圖片描述

三、MapReduce(分布式計算框架)

MapReduce 核心思想:分而治之的并行計算

3.1 拆分(Split)→ 并行計算(Map)?

  • 輸入數據被自動切割為 ?分片(Split)?(默認與 HDFS Block 對齊) → 分發到集群節點?。
  • ?Map 階段?:每個節點對本地數據執行相同的用戶自定義函數,輸出中間鍵值對 (key, value)。

👉 實質:將大規模問題分解為獨立子問題

3.2 聚合(Shuffle)→ 歸約(Reduce)

  • ?Shuffle 階段?:框架按 key 將中間結果跨節點分組、排序、傳輸(核心瓶頸)?。
  • ?Reduce 階段?:相同 key 的數據發送到同一節點,執行歸約邏輯(如求和、去重)。

👉 實質:合并子問題的結果生成全局解

MapReduce Split
在這里插入圖片描述
MapReduce Shuffle
在這里插入圖片描述

四、Yarn(資源調度與管理框架)

老周在之前講解Flink架構的時候講過YARN集群架構,我這里直接拿我之前Yarn的架構圖。YARN集群總體上是經典的主/從(Master/Slave)架構,主要由ResourceManager、NodeManager、ApplicationMaster和Container等幾個組件構成。

在這里插入圖片描述

4.1 ResourceManager

以后臺進程的形式運行,負責對集群資源進行統一管理和任務調度。ResourceManager的主要職責如下:

  • 接收來自客戶端的請求。
  • 啟動和管理各個應用程序的ApplicationMaster。
  • 接收來自ApplicationMaster的資源申請,并為其分配Container。
  • 管理NodeManager,接收來自NodeManager的資源和節點健康情況匯報。

4.2 NodeManager

集群中每個節點上的資源和任務管理器,以后臺進程的形式運行。它會定時向ResourceManager匯報本節點上的資源(內存、CPU)使用情況和各個Container的運行狀態,同時會接收并處理來自ApplicationMaster的Container啟動/停止等請求。NodeManager不會監視任務,它僅監視Container中的資源使用情況,例如。如果一個Container消耗的內存比最初分配的更多,就會結束該Container。

4.3 Task

應用程序具體執行的任務。一個應用程序可能有多個任務,例如一個MapReduce程序可以有多個Map任務和多個Reduce任務。

4.4 Container

YARN中資源分配的基本單位,封裝了CPU和內存資源的一個容器,相當于一個Task運行環境的抽象。從實現上看,Container是一個Java抽象類,定義了資源信息。應用程序的Task將會被發布到Container中運行,從而限定了Task使用的資源量。

一個應用程序所需的Container分為兩類:運行ApplicationMaster的Container和運行各類Task的Container。前者是由ResourceManager向內部的資源調度器申請和啟動的,后者是由ApplicationMaster向ResourceManager申請的,并由ApplicationMaster請求NodeManager進行啟動。

我們可以將Container類比成數據庫連接池中的連接,需要的時候進行申請,使用完畢后進行釋放,而不需要每次獨自創建。

4.5 ApplicationMaster

ApplicationMaster可在Container內運行任何類型的Task。例如,MapReduce ApplicationMaster請求一個容器來啟動Map Task或Reduce Task。也可以實現一個自定義的ApplicationMaster來運行特定的Task,以便任何分布式框架都可以受YARN支持,只要實現了相應的ApplicationMaster即可。

我們可以這樣認為:ResourceManager管理整個集群,NodeManager管理集群中的單個節點,ApplicationMaster管理單個應用程序(集群中可能同時有多個應用程序在運行,每個應用程序都有各自的ApplicationMaster)。

YARN集群中應用程序的執行流程如下圖所示:

  • 客戶端提交應用程序(可以是MapReduce程序、Spark程序等)到ResourceManager。
  • ResourceManager分配用于運行ApplicationMaster的Container,然后與NodeManager通信,要求它在該Container中啟動ApplicationMaster。ApplicationMaster啟動后,它將負責此應用程序的整個生命周期。
  • ApplicationMaster向ResourceManager注冊(注冊后可以通過ResourceManager查看應用程序的運行狀態)并請求運行應用程序各個Task所需的Container(資源請求是對一些Container的請求)。如果符合條件,ResourceManager會分配給ApplicationMaster所需的Container(表達為Container ID和主機名)。
  • ApplicationMaster請求NodeManager使用這些Container來運行應用程序的相應Task(即將Task發布到指定的Container中運行)。

此外,各個運行中的Task會通過RPC協議向ApplicationMaster匯報自己的狀態和進度,這樣一旦某個Task運行失敗,ApplicationMaster就可以對其重新啟動。當應用程序運行完成時,ApplicationMaster會向ResourceManager申請注銷自己。

在這里插入圖片描述

五、Hadoop HA

在這里插入圖片描述

在這里插入圖片描述
問題1:兩個NameNode主節點,誰是Active,誰是Standby?

利用Zookeeper進行選舉

問題2:怎么實現的?

  • 每一個NameNode都有一個ZKFC:Zookeeper Failover Contorller
  • 功能
    • 負責幫助NameNode向Zookeeper進行注冊選舉,并且監聽active的NameNode
    • 負責監控NameNode的狀態

問題3:如果有兩個NameNode,客戶端如何知道誰是active?

  • 客戶端只能請求active狀態的NameNode
  • 一旦配置了HA,將兩個NameNode構建成一個整體
  • 客戶端不用再請求單個NameNode,請求這個整體,這個整體負責從zookeeper中找到誰是active轉發這個請求

問題4:如果有兩個NameNode,所有的DataNode向哪個NameNode進行注冊呢?

兩個NameNode 都注冊,只有active的能管理。

問題5:一個是active,一個standby,如果active宕機,standby接替active,如何保證standby的元數據與active是一致的?

  • journalnode日志節點
  • active狀態的 NN,會將自己元數據的變化日志edits文件寫入journalnode集群
  • standby狀態的NN,會從journalnode集群中將變化讀取出來,對自己操作,保證自己的元數據與active的元數據是一致的

六、HDFS Architecture

6.1 NameNode and DataNodes
在這里插入圖片描述
6.2 Data Replication

在這里插入圖片描述

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

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

相關文章

OneCode3.0 VFS分布式文件管理API速查手冊

📚 前言:OneCode 3.0微內核引擎架構解析 在云原生與分布式系統日益普及的今天,文件管理系統面臨著前所未有的挑戰——海量數據存儲、跨節點協同、多租戶隔離以及彈性擴展等需求推動著傳統文件系統向分布式架構演進。OneCode 3.0作為新一代企業…

UI前端與數字孿生結合實踐探索:智慧物流的倉儲自動化管理系統

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言:傳統倉儲的 “效率黑洞” 與數字孿生的破局當倉庫管理員在數萬平的庫房中…

使用layui的前端框架過程中,無法加載css和js怎么辦?

這使用layui的前端框架過程中&#xff0c;無法加載css和js怎么辦&#xff1f;里寫自定義目錄標題已經按要求下載并解壓到指定位置了&#xff0c;但是感覺就是無法加載文件后臺提示如下&#xff1a;那就我清理緩存當再次觀察html頁面時&#xff0c;發現頁面最開始有兩個< htm…

gitlab+TortoiseGit克隆生成ppk方式

1、第一步 2、第二步3、第三步4、第四步&#xff0c;如何使用這個ppk就可以了

VSCode中使用容器及容器編排docker-compose

前面筆者寫了一篇博文&#xff1a;使用容器編排對go項目進行部署、調試&#xff0c;介紹了在Goland中如何使用容器&#xff0c;由于Goland的容器配置是可視化的&#xff0c;使用起來非常方便&#xff0c;VSCode中也有一個容器插件&#xff0c;但是筆者一直未使用過&#xff0c;…

深度學習入門:讓神經網絡變得“深不可測“?(二)

深度學習入門&#xff1a;讓神經網絡變得"深不可測" &#x1f9e0;? 系列課程第二彈&#xff1a;深度學習的奇妙世界 前言&#xff1a;從淺到深的華麗轉身 哈嘍&#xff0c;各位AI探險家&#xff01;&#x1f44b; 歡迎回到我們的"讓機器變聰明"系列課…

硅基計劃2.0 學習總結 捌 異常與常用工具類

文章目錄一、異常1. 防御性編程2. throw關鍵字3. throws關鍵字4. 捕獲5. finally關鍵字二、自定義異常類三、常用工具類1. Date以及相關的類1. 創建時間&#xff08;基本棄用&#xff09;2. 捕獲系統時間3. 獲取當前年月日時分秒4. 日期加減5. 根據字符串創建日期6. 根據當前時…

2025-7-14-C++ 學習 排序(2)

文章目錄2025-7-14-C 學習 排序&#xff08;2&#xff09;P1059 [NOIP 2006 普及組] 明明的隨機數題目描述輸入格式輸出格式輸入輸出樣例 #1輸入 #1輸出 #1說明/提示提交代碼P1093 [NOIP 2007 普及組] 獎學金題目背景題目描述輸入格式輸出格式輸入輸出樣例 #1輸入 #1輸出 #1輸入…

微信131~140

1.在組件中使用store對象的數據 // 要想使用store中的數據以及方法 // 需要從 mobx-miniprogram-bindings 方法將 ComponentWithStore 方法 import { ComponentWithStore } from mobx-miniprogram-bindings // 導入store對象 import { numStore } from ../../../stores/numstor…

微美全息借區塊鏈與DRL算法打造資源管理協同架構,達成邊緣計算與區塊鏈動態適配

在當今數字化浪潮洶涌的時代&#xff0c;邊緣計算與區塊鏈技術正逐步成為驅動技術革新與業務轉型升級的核心動力。當這兩項前沿技術相互融合&#xff0c;一個兼具高效性與安全性的任務處理系統便得以構建。為了充分挖掘邊緣計算系統的性能潛力&#xff0c;避免任務卸載過程中的…

屬性綁定

簡寫模式二.為什么要這樣做布爾型attribute動態綁定多個值

鏈表算法之【獲取鏈表開始入環的節點】

目錄 LeetCode-142題 LeetCode-142題 給定一個鏈表的頭節點head&#xff0c;返回鏈表開始入環的第一個節點&#xff0c;如果鏈表無環&#xff0c;則返回null class Solution {public ListNode detectCycle(ListNode head) {// checkif (head null || head.next null)retur…

【網絡編程】KCP——可靠的 UDP 傳輸協議——的知識匯總

文章目錄前言UDP 協議UDP 的關鍵指標/特性UDP 的典型應用場景KCP 協議的基礎KCP 的構造KCP 協議特性KCP 的可靠傳輸機制——ARQ三種 ARQ 機制對比KCP 的選擇性重傳一、基礎機制&#xff1a;選擇性重傳&#xff08;SR&#xff09;二、KCP 對 SR 的增強策略KCP 的激進重傳策略——…

量子計算新突破!阿里“太章3.0”實現512量子比特模擬(2025中國量子算力巔峰)

??摘要??2025年量子計算競爭進入??實用化臨界點??&#xff0c;阿里達摩院發布“太章3.0”量子模擬器&#xff0c;在全球首次實現??512量子比特全振幅模擬??&#xff0c;較谷歌Sycamore的53比特提升近10倍算力維度。本文深度解析三大技術突破&#xff1a;??張量網…

DOM事件綁定時機:解決腳本提前加載導致的綁定失敗

引言&#xff1a;一個讓無數新手抓狂的常見錯誤在JavaScript開發中&#xff0c;尤其是在前端領域&#xff0c;有一個讓無數新手抓狂的問題&#xff1a;明明寫了事件監聽代碼&#xff0c;點擊按鈕卻沒有任何反應&#xff01;更令人困惑的是&#xff0c;代碼邏輯看起來完全正確&a…

游戲框架筆記

游戲的數據有哪些類型無非是只讀數據&#xff08;各種道具配表里的數據&#xff09;和可讀可寫數據&#xff08;玩家屬性、擁有的物品&#xff09;。游戲框架需要哪些管理器用戶數據管理器負責找到數據持久化文件&#xff0c;從中讀取指定用戶的數據&#xff0c;包括玩家的設置…

【C語言進階】指針面試題詳解(2)

上一期內容&#xff0c;大多數的解題思路寫在代碼中&#xff0c;沒有寫在正文中&#xff0c;這就導致系統判斷文章質量不高&#xff0c;沒有什么數據&#xff0c;這一期將思路寫在正文中。注意&#xff1a;運行環境是x86 1.題目1思路&#xff1a;&a是取到了整個數組的地址&…

一文讀懂現代卷積神經網絡—稠密連接網絡(DenseNet)

目錄 什么是 DenseNet&#xff1f; 稠密塊&#xff08;Dense Block&#xff09;詳解 一、稠密塊的核心思想 二、稠密塊的結構組成 1. 卷積單元&#xff08;的結構&#xff09; 2. 密集連接的具體方式 3. 關鍵參數&#xff1a;增長率&#xff08;Growth Rate, k&#xff0…

關于僵尸進程

深入理解僵尸進程&#xff1a;成因、危害與解決方案 進程終止的條件 我們先了解一下進程銷毀的條件&#xff1a; 調用了exit函數在main函數中執行了return語句 無論采用哪種方式&#xff0c;都會有一個返回值&#xff0c;這個返回值由操作系統傳遞給該進程的父進程。操作系統不…

深入解析進程、線程與協程:現代并發編程的三大支柱

深入解析進程、線程與協程&#xff1a;現代并發編程的三大支柱在計算資源日益豐富的時代&#xff0c;理解并發執行機制已成為每位開發者的必修課。本文將帶你深入探索操作系統中的三大并發模型&#xff1a;進程、線程與協程&#xff0c;揭開它們的神秘面紗。引言&#xff1a;并…