【Hadoop】詳解HDFS

Hadoop 分布式文件系統(HDFS)被設計成適合運行在通用硬件上的分布式文件系統,它是一個高度容錯性的系統,適合部署在廉價的機器上,能夠提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。為了做到可靠性,HDFS創建了多份數據塊的副本,并將它們放置在服務器群的計算節點中,MapReduce 可以在它們所在的節點上處理這些數據。

1.?HDFS 的設計目標

  • 存儲大規模數據:HDFS 可以存儲并管理 PB 級甚至 EB 級的數據。
  • 高容錯性:數據自動保存多個副本,副本丟失自動恢復
  • 高吞吐量:適合流式數據訪問,支持高并發讀寫,一次寫入,可多次讀取,確保數據的一致性。
  • 低成本:可以在普通硬件上運行,降低存儲成本。

2. HDFS 的設計思想和體系架構

HDFS采用主從架構。一個HDFS集群是由一個NameNode和一定數目的DataNodes 組成。其中 NameNode 是一個中心服務器,負責文件系統的名字空間(namespace)管理以及客戶端對文件的訪問。集群中的DataNode一般是一個節點一個,負責管理它所在節點上的存儲。

HDFS設計思想

從內部看,一個文件其實被分成一個或多個數據塊,這些塊存儲在一組DataNode(server)之上。NameNode執行文件系統的名字空間操作,比如打開、關閉、重命名文件或目錄,同時它也負責確定數據塊到具體DataNode節點的映射。DataNode負責處理文件系統客戶端的讀寫請求,在NameNode的統一調度下進行數據塊的創建、刪除和復制。

HDFS框架結構

?

HDFS使用Java語言開發,因此任何支持Java的機器都可以部署NameNode或DataNode。 由于采用了可移植性極強的Java語言,這就使得HDFS可以部署到幾乎所有類型的機器上。

三.NameNode

1.NameNode的作用

  • 元數據管理:Namenode 是HDFS的元數據節點,負責文件系統的名字空間(Namespace)管理以及客戶端對文件的訪問。
  • 文件元數據操作:NameNode 負責文件元數據的操作,如創建、刪除、重命名文件或目錄。
  • 數據塊管理:NameNode 決定數據塊的副本存放在哪些 DataNode 上。讀取文件時,NameNode 會盡量讓用戶先讀取最近的副本(通過網絡拓撲距離來衡量),以降低帶寬消耗和讀取時延。
  • 心跳機制:NameNode 周期性地從每個 DataNode 接收心跳信號和塊狀態報告。心跳信號表示 DataNode 工作正常,塊狀態報告包含 DataNode 上所有數據塊的信息列表。

2. NameNode 的目錄結構

NameNode 的元數據存儲在本地文件系統的以下目錄中:${dfs.name.dir}/current/

包含以下文件:

  • VERSION:是Java properties 文件,保存 HDFS 的版本信息
  • edits:修改日志(Edit Log),記錄對文件系統元數據的修改。存儲在本地文件系統中。
  • fsimage:命名空間鏡像文件,保存整個文件系統的命名空間包括數據塊映射信息,文件屬性等等。存儲在本地文件系統中。
  • fstime:記錄最后一次檢查點(checkpoint)的時間。

3. NameNode 的啟動與檢查點

NameNode 在內存中保存著整個文件系統的命名空間和文件數據塊映射的映像,這個關鍵的元數據結構設計得非常緊湊,因而一個有4G內存的NameNode就足以支撐巨大量的文件和目錄。

(1)啟動過程

  • NameNode 從硬盤讀取 FsImage 和 Edit Log。
  • 將 Edit Log 中的事務應用到內存中的 FsImage。
  • 將更新后的 FsImage 保存到本地磁盤,并刪除舊的 Edit Log。

(2)檢查點(Checkpoint)

  • 定期將內存中的元數據保存到 FsImage,并清理 Edit Log。
  • 由 Secondary NameNode 輔助完成。

4. Secondary NameNode 的作用

(1)輔助 NameNode

  • Secondary NameNode 不是 NameNode 的備用節點,而是輔助 NameNode 完成檢查點。
  • 主要功能是定期合并 FsImage 和 Edit Log,防止 Edit Log 過大。

(2)檢查點過程

  1. Secondary NameNode 通知 NameNode 生成新的 Edit Log。
  2. 從 NameNode 獲取 FsImage 和舊的 Edit Log。
  3. 將 FsImage 加載到內存,并應用 Edit Log 中的事務,生成新的 FsImage。
  4. 將新的 FsImage 傳回 NameNode。
  5. NameNode 更新 FsImage 和 Edit Log,并記錄檢查點時間。

Secondary NameNode并不是NameNode出現問題時候的備用節點,它和NameNode負責不同的事情。其主要功能就是周期性地將NameNode的命名空間鏡像文件和修改日志合并,以防日志文件過大。合并過后的命名空間鏡像文件也在Secondary NameNode保存了一份,以防止在 NameNode失敗的時候,可以安全恢復。Secondary NameNode 通常在一個獨立的機器上運行,它的內存要求和主 NameNode 是一樣的。Secondary NameNode在配置后通過 start-dfs.sh 啟動。

四.DateNode

1.DataNode的作用

  • 數據存儲:DataNode是文件系統中真正存儲數據的地方,一個數據塊在DataNode磁盤存儲時,會存儲數據塊本身,以及元數據包括數據塊的長度、塊數據的校驗和、以及時間戳。
  • 數據塊管理:DataNode是HDFS文件系統的工作節點,DataNode會按照客戶端或者是NameNode的調度來存儲和檢索數據,并定期向NameNode發送它所存儲的數據塊列表。
  • 與 NameNode 通信:DataNode啟動后向NameNode注冊,注冊成功后,周期性每小時向NameNode上報所有的塊信息,心跳頻率每3秒一次,心跳返回結果帶有 NameNode 給該 DataNode 的命令,如復制塊數據到另一臺機器,或刪除某個數據塊等等。
  • 節點狀態:如果 NameNode超過10分鐘沒有收到某個DataNode的心跳,則認為該節點不可用。集群在運行中可以安全地加入或剔除狀態異常的機器。

2. DataNode 的目錄結構

DataNode 的數據存儲目錄結構如下:${dfs.data.dir}/current/

包含以下內容:

  • VERSION:存儲 DataNode 的版本信息。
  • blk_<id>存儲數據塊的二進制數據。
  • blk_<id>.meta存儲數據塊的元數據,包括校驗和、長度和時間戳。

五 .HDFS數據塊

1.數據塊大小:默認情況下,HDFS 的數據塊大小為?128MB(Hadoop 2.x 及以上版本)或?64MB(Hadoop 1.x 版本)。用戶可以根據需要調整塊大小。

2.數據塊分布:HDFS 通過數據塊副本機制實現高容錯性。默認情況下,每個數據塊會被復制到 3 個不同的 DataNode 上。

而在傳統的塊存儲介質中,塊是讀寫的最小數據單位(扇區),傳統文件系統是基于存儲塊進行操作 的,為了節省文件分配表空間,一般會對物理存儲塊進行整合,通常為 4KB 或 64KB。

那為什么HDFS 的塊遠遠大于傳統文件系統的塊?

  • 塊大小較小,文件會被分割成更多的數據塊,導致元數據量大幅增加,占用大量 NameNode 內存。較大的塊大小可以減少元數據量,降低 NameNode 的內存壓力。NameNode 的元數據管理更加高效。
  • 減少尋址開銷:在傳統文件系統中,較小的塊大小會導致更多的磁盤尋址操作,增加 I/O 開銷。HDFS 的較大塊大小可以減少尋址次數,提高數據訪問效率
  • HDFS 設計用于處理大規模數據,適合流式數據訪問(即順序讀取大文件)。較大的塊大小可以減少數據塊的切換頻率提高數據讀取的吞吐量

?

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

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

相關文章

2025 批量下載市場高標解讀/配置喵/wangdizhe 雪球帖子/文章導出excel和pdf

之前分享過文章2025 批量下載雪球和東方財富文章導出excel和pdf &#xff0c;今天整理分享下我下載過的一些雪球文章。 第1個號市場高標解讀 抓取下載的所有帖子excel數據包含文章日期&#xff0c;文章標題&#xff0c;文章鏈接&#xff0c;文章簡介&#xff0c;點贊數&#…

2022年《申論》第二題(河北A卷)

材料&#xff1a; “社區很大&#xff0c;共有安置房148棟&#xff0c;安置人口2.9萬人。人員眾多&#xff0c;而且原來都來自農村&#xff0c;群眾生活環境變化大&#xff0c;不適應。”春林易地搬遷安置點建成使用后&#xff0c;老單便來這里擔任春林街道辦主任。如何有效治…

Qt中實現多個QMainWindow同時顯示

在Qt中實現多個QMainWindow同時顯示&#xff0c;可通過以下方法實現&#xff1a; 一、直接顯示多個實例 必須使用new創建堆對象&#xff0c;避免棧對象因作用域結束被銷毀?。 int main(int argc, char *argv[]) {QApplication a(argc, argv);// 創建兩個獨立的主窗口QMainW…

從運動手環到醫療貼片,精密校平機正在重塑柔性電子器件的工業化生產標準

在柔性電子器件的制造領域&#xff0c;從運動手環到醫療貼片&#xff0c;精密校平機的應用正引領一場生產標準的變革。傳統的柔性電子器件生產過程中&#xff0c;材料的平整度控制往往不夠精確&#xff0c;導致產品質量參差不齊。然而&#xff0c;隨著精密校平機的引入&#xf…

AIP-161 域掩碼

編號161原文鏈接AIP-161: Field masks狀態批準創建日期2021-03-01更新日期2021-03-01 在&#xff08;使用AIP-134的Update或類似方法&#xff09;更新資源時&#xff0c;通常需要明確指定哪些域需要更新。服務可以忽略另外的域&#xff0c;即使用戶發送了值。 定義一種掩碼格…

掌握Kubernetes Network Policy,構建安全的容器網絡

在 Kubernetes 集群中&#xff0c;默認情況下&#xff0c;所有 Pod 之間都是可以相互通信的&#xff0c;這在某些場景下可能會帶來安全隱患。為了實現更精細的網絡訪問控制&#xff0c;Kubernetes 提供了 Network Policy 機制。Network Policy 允許我們定義一組規則&#xff0c…

Flask 小冊子簡介

這是一個Flask restful講解的小冊子&#xff0c;涵蓋了 RESTful API 的概念、選擇 Flask 的原因以及小冊子的目標和結構。我會盡量寫得詳細&#xff0c;幫助你更好地理解。 1. 簡介 1.1 什么是 RESTful API&#xff1f; 1.1.1 REST 的概念 REST&#xff08;Representational…

ElementUI 級聯選擇器el-cascader啟用選擇任意一級選項,選中后關閉下拉框

1、啟用選擇任意一級選項 在 el-cascader 標簽上加上配置項&#xff1a; :props"{ checkStrictly: true }"例如&#xff1a; <el-cascaderref"selectedArrRef"v-model"selectedArr":options"optionsList":props"{ checkStri…

typedef 和 using 有什么區別?

在 C 編程中&#xff0c;類型別名&#xff08;Type Aliases&#xff09;是為已有類型定義新名稱的一種機制&#xff0c;能夠顯著提升代碼的可讀性和可維護性。C 提供了兩種工具來實現這一功能&#xff1a;傳統的 typedef 和 C11 引入的 using 關鍵字。 概念 類型別名本質上是為…

VS2022C#windows窗體應用程序調用DeepSeek API

目錄 一、創建DeepSeek API Key 二、創建窗體應用程序 三、設計窗體 1、控件拖放布局?? 2、主窗體【Form1】設計 3、多行文本框【tbContent】 4、提交按鈕【btnSubmit】 5、單行文字框 四、撰寫程序 五、完整代碼 六、運行效果 七、其它 一、創建DeepSeek API Ke…

docker 如何更新容器內的環境變量,并覆蓋創建這個容器的鏡像?

docker 如何更新容器內的環境變量&#xff0c;并覆蓋串講這個容器的鏡像&#xff1f; 之前試過在容器內unset 環境變量&#xff0c;并進行docker commit 保存&#xff0c;發現這樣是不行的&#xff0c;重新啟動容器之后還是會出現之前設置過的環境變量 了解了下&#xff0c;u…

Android Coil總結

文章目錄 Android Coil總結概述添加依賴用法基本用法占位圖變形自定義ImageLoader取消加載協程支持緩存清除緩存監聽 簡單封裝 Android Coil總結 概述 Coil 是一個用于 Android 的 Kotlin 圖像加載庫&#xff0c;旨在簡化圖像加載和顯示的過程。它基于 Kotlin 協程&#xff0…

如何在WPS中接入DeepSeek并使用OfficeAI助手(超細!成功版本)

目錄 第一步&#xff1a;下載并安裝OfficeAI助手 第二步&#xff1a;申請API Key 第三步:兩種方式導入WPS 第一種:本地大模型Ollama 第二種APIKey接入 第四步&#xff1a;探索OfficeAI的創作功能 工作進展匯報 PPT大綱設計 第五步&#xff1a;我的使用體驗(體驗建議) …

Spring Boot集成Minio筆記

一、首先配置MinIO 1、MinIO新建Bucket&#xff0c;訪問控制臺如圖 創建訪問密鑰(就是賬號和密碼) 二、集成mino添加Minio客戶端依賴 1.maven構建方式在pom.xml引入jar <dependency><groupId>io.minio</groupId><artifactId>minio</artifactI…

【開源寶藏】Spring Trace 一種輕量級的日志追蹤新方式

Spring Trace&#xff1a;一種輕量級的日志追蹤新方式 一、前言 在日常開發中&#xff0c;我們常常需要在日志中標記某個請求的唯一標識&#xff08;Trace ID&#xff09;或上下文信息&#xff0c;以便快速定位問題或查看調用鏈路。傳統做法通常會使用 MDC&#xff08;Mapped…

Web網頁開發——水果忍者

1.介紹 復刻經典小游戲——水果忍者 2.預覽 3.代碼 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…

【Flink銀行反欺詐系統設計方案】6.用戶畫像數據與反欺詐系統的關聯思路

【Flink銀行反欺詐系統設計方案】6.用戶畫像數據與反欺詐系統的關聯思路 概要1. 用戶畫像數據與反欺詐系統的關聯思路1.1 用戶畫像數據內容1.2 數據賦能反欺詐的核心邏輯 2. 用戶畫像賦能反欺詐的3個案例2.1 案例1&#xff1a;消費習慣異常檢測2.2 案例2&#xff1a;設備/地理位…

如何在unity中完整錄制一段動畫

在動畫制作中&#xff0c;需要對接音頻部門進行音效的制作。通常需要完整且無多余幀數的動畫視頻作為時間和幀數對幀參考&#xff0c;這時候手動錄屏就會顯得不夠精確&#xff0c;這里分享一個插件錄制方法&#xff0c;可以自定義錄制起始位置&#xff0c;0幀起手完整錄制。 錄…

Jetson Orin 安裝 onnxruntime

Jetson Orin 安裝 onnxruntime onnxruntime在Jetson上安裝只需注意三件事&#xff1a; 版本&#xff01; 版本&#xff01; 還是TMD版本&#xff01; 本機環境 Jectpack : 5.1.2CUDA : 11.4cuDNN &#xff1a;8.6.0 版本說明 關于onnxruntime的版本適配不同的官方有不同的…

Manus AI : Agent 元年開啟.pdf

Manus AI : Agent 元年開啟.pdf 是由華泰證券出品的一份調研報告&#xff0c;共計23頁。報告詳細介紹了Manus AI 及 Agent&#xff0c;主要包括Manus AI 的功能、優勢、技術能力&#xff0c;Agent 的概念、架構、應用場景&#xff0c;以及 AI Agent 的類型和相關案例&#xff0…