HDFS基本原理

来源:https://www.cnblogs.com/jalja/archive/2019/08/03/11294584.html
-Advertisement-
Play Games

NameNode並不會將文件的分塊數據持久化存儲,這些信息會在HDFS啟動時由各個dataNode上報過來。他把這些數據存入記憶體中。並且會定時對記憶體中的數據進行快照。所以對於NameNode節點的機器記憶體應該大一些 ...


一、什麼是HDFS

HDFS即Hadoop分散式文件系統(Hadoop Distributed Filesystem),以流式數據訪問模式來存儲超大文件,它和現有的分散式文件系統有很多共同點。但同時,它和其他的分散式文件系統的區別也是很明顯的。HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。HDFS在最開始是作為Apache Nutch搜索引擎項目的基礎架構而開發的。

二、HDFS架構

 個HDFS集群包含一個單獨的NameNode和多個DataNode。HDFS採用一種稱為rack-aware的策略。Rack1 和Rack2

備份數據的存放:備份數據的存放是HDFS可靠性和性能的關鍵。HDFS採用一種稱為rack-aware的策略來決定備份數據的存放。通過一個稱為Rack Awareness的過程,NameNode決定每個DataNode所屬rack id。預設情況下,一個block塊會有三個備份,一個在NameNode指定的DataNode上,一個在指定DataNode非同一rack的DataNode上,一個在指定DataNode同一rack的DataNode上。這種策略綜合考慮了同一rack失效、以及不同rack之間數據複製性能問題。

副本的選擇:為了降低整體的帶寬消耗和讀取延時,HDFS會儘量讀取最近的副本。如果在同一個rack上有一個副本,那麼就讀該副本。如果一個HDFS集群跨越多個數據中心,那麼將首先嘗試讀本地數據中心的副本。安全模式:系統啟動後先進入安全模式,此時系統中的內容不允許修改和刪除,直到安全模式結束。安全模式主要是為了啟動檢查各個DataNode上數據塊的安全性

 

三、HDFS核心組件詳解

*********************************************************NameNode**************************************************

1、NameNode是HDFS的核心模塊,也是HDFS架構的master。NomeNode一點宕機則整個HDFS服務不可用。
2、NameNode僅僅存儲HDFS的元數據:文件系統中的文件目錄結構,並且能跟蹤整個集群中的文件。
3、NameNode不存儲實際的文件數據,實際數據是存儲在DataNode中,他存儲的是文件分塊的基礎數據;能通過文件獲取文件的快列表及其分佈在哪些dataNode上。
4、NameNode並不會將文件的分塊數據持久化存儲,這些信息會在HDFS啟動時由各個dataNode上報過來。他把這些數據存入記憶體中。並且會定時對記憶體中的數據進行快照。所以對於NameNode節點的機器記憶體應該大一些。

5、NameNode在hadoop 2.0版本之前是單點的,Hadoop 2.0版本才提出了高可用 (High Availability, HA) 解決方案,並且經過多個版本的迭代更新,已經廣泛應用於生產環境。

6、NameNode也可以將數據持久化 

 

*********************************************************DataNode**************************************************

1、DataNode:HDFS的Slave節點,存儲文件實際的數據,負責將數據落入磁碟。所以DataNode節點需要較大的磁碟。
2、DataNode在啟動時會將自己發佈到NameNode上,並上報自己持有的數據塊表。定期向NameNode發送心跳,如果NameNode長時間沒有接受到DataNode發送的心跳,NameNode就會認為該DataNode以及失效,將其剔除集群。心跳參數dfs.heartbeat.interval=3(預設3秒發送一次心跳)
3、當某個DateNode宕機後,不會影響數據和集群的可用性。NameNode會安排其他DataNode進行副本複製接管他的工作。
4、DataNode會定時上報自己負責的數據塊列表。

*********************************************************Secondary NameNode**************************************************

SecondaryNameNode有兩個作用,一是鏡像備份,二是日誌與鏡像的定期合併。兩個過程同時進行,稱為checkpoint. 鏡像備份的作用:備份fsimage(fsimage是元數據發送檢查點時寫入文件);日誌與鏡像的定期合併的作用:將Namenode中edits日誌和fsimage合併,防止如果Namenode節點故障,namenode下次啟動的時候,會把fsimage載入到記憶體中,應用edit log,edit log往往很大,導致操作往往很耗時。

四、HDFS操作流程

**************************************************文件上傳流程******************************************

1、客戶端發起寫文件請求 hadoop fs -put
2、nameNode檢查上傳文件的命名空間是否存在(就是檢測文件目錄結構是否存在),創建者是否有許可權進行操作。然後返回狀態高數客戶端你可以上傳數據
3、客戶端按照分塊配置大小將文件分塊。然後請求NameNode我要上傳blk1,副本數是三個,這個文件一共分割了5塊。
4、NameNode檢測自己管理下的DateNodes是否滿足要求,然後返回給客戶端三台DateNode節點信息(存儲策略是機架模式)。
5、Client端根據返回的DataNode信息選擇一個離自己最近的一個DataNode節點,創建pipeLine(數據傳輸管道),DataNode1->DataNode2創建pipeLine,DataNode2->DataNode3創建pipeLine;DataNode3通過這一串管道傳遞給client數據傳輸管道已經建立完畢。
6、client端創建Stream流(以packet為單位傳輸數據 64kb)上傳數據。
7、DataNode1接受並保持源源不斷的packet,然後把packet源源不斷的傳遞給DataNode2,DataNode2也做相應的操作。
8、DataNode也通過pipeLine發送ACK認證數據是否接收完畢。
9、第一個數據塊上傳完畢後client端開始上傳第二個數據塊

 *********************************************************文件的獲取流程****************************************

1、client 發起 hadoop fs -get請求
2、NomeNode檢查該文件的信息,文件的分塊信息和每個分塊所對應哪個DateNode,,以及備份信息和備份信息所在哪個DataNode。把這些信息返回給client端。(返回原則也是機架原則,根據網路拓撲將距離最近的DataNode排在前邊返回)
3、根據NameNode的信息,請求各個文件塊對應的DataNode節點獲取文件數據。
4、合併下載過來的數據塊,形成一個完整的文件。



 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 拋棄舊文化,迎接Linux命令新文化 Linux第一步,從Windows思維,切換到Linux的“命令行+文件”模式 在Linux中,做什麼都有相應命令。一般就在bin或者sbin目錄下,數量繁多。如果你事先不知道該用哪個命令,很難通過枚舉的方式找到。因此,在這樣沒有統一入口的情況下,就需要你對 ...
  • 基於MySQL Router可以實現高可用,讀寫分離,負載均衡之類的,MySQL Router可以說是非常輕量級的一個中間件了。看了一下MySQL Router的原理,其實並不複雜,原理也並不難理解,其實就是一個類似於VIP的代理功能,其中一個MySQL Router有兩個埠號,分別是對讀和寫的轉 ...
  • 說明:本文主要詳細介紹了關於如何在阿裡雲ECS伺服器上安裝並配置Mysql 環境:Centos 7版本,阿裡雲部署好系統後會預設安裝mariadb資料庫 1、刪除阿裡雲自帶的MariaDB 2、下載與安裝Mysql (1)下載MySql官方的yum repository (2)下載並安裝rpm包 ( ...
  • 哨兵機制存在的意義: 為了實現redis故障轉移的自動化。自動發現,自動轉移。不需要人工參與。 用戶管理多個Redis伺服器,該系統執行三個任務: 監控:哨兵會不間斷的檢查Master和Slave是否正常運行 提醒:當被監控的某個Redis出現問題,哨兵通過API向管理員或者應用程式發送通知 自動故 ...
  • 一句話概括就是Sum(列) 是求和,把所有列的值進行彙總求和;COUNT(列) 是行數彙總,只要列的值不為Null,就會增加1; 舉個例子說明下: --創建臨時表結構 CREATE TABLE TempTB ( ID int , Name varchar(20), Price Int ) --寫入示 ...
  • 一、表空間的創建以及刪除 聲明:此操作環境為windows,oracle10G 二、用戶 1.用戶的創建、設置密碼、設置表空間 2、授權 3、刪除用戶 4.解鎖用戶 三、Oracle數據類型(簡單的) 四、簡單DDL(數據定義語言) 1.創建表 2.修改表結構 五、DML(數據操作語言) =》 增刪 ...
  • NGINX lua集成kafka === 第一步:進入opresty目錄 說明:接下來我們關註兩個目錄 "lualib" 和 "nginx" ​ 1.lualib: 是存放opresty所需要的集成軟體包的 ​ 2.nginx: 是nginx服務目錄 接下來,我們進入lualib目錄一看究竟: 這裡 ...
  • jdbc:mysql://localhost:3306/db_film?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8每次把資料庫問好後面的加上,什麼時區問題還是亂碼問題全都解決謝謝! ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...