日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Hadoop-HDFS分布式文件系統基礎

作者:無敵的小周 更新時間: 2022-07-21 編程語言

分布式存儲的核心屬性和功能作用

為什么使用分布式文件系統?

當存儲海量數據時,當磁盤空間不夠時,往往是通過擴容來解決,但是升級擴容的成本高。

單節點不能完成高并發,需要支撐海量數據的計算。

分布式存儲能無線拓展,不像單機主板有限,連接的磁盤有限。

元數據記錄

分布式文件系統如何快速定位文件?通過元數據去記錄,元數據相當于書的目錄,是記錄數據的數據,記錄文件名,大小,存儲機器IP這些信息。

NameNode記錄的元數據類型有兩種:

  • 文件自身的屬性信息

文件名稱,權限,修改時間,大小等

  • 文件塊位置映射信息

記錄文件塊和DataNode之間的映射信息,即哪個塊位于哪個結點上

分塊存儲

文件過大,導致單機裝不下,將文件分塊存儲,對每個塊進行并行操作,能提高操作效率,但記錄時也要記錄每個塊的存儲信息,也就是元數據。當文件大小超過128M就分塊,所以一個塊的大小小于等于128M。

副本機制

不同機器設置備份,冗余存儲,保障數據安全,比如node1存儲第一個文件塊和第二個文件塊的備份,node2存儲第二個文件塊和第一個文件塊的備份。文件的所有block都有副本,副本系數可以在文件創建時指定,也可以在之后改變,副本系數由dfs.replication控制,默認值是3,也就是會算復制兩份,連同本身共三份。

主從架構

提供給用戶統一個接口去訪問,一個HDFS集群由一個NameNode和一定數量的DataNode組成,各司其職,主角色來維護元數據和目錄樹結構,DataNode需要去管理具體的數據塊,將存儲信息反饋給主角色NameNode,例如要刪除一個文件,用戶去操作NameNode,而真正干活的是DataNode,NameNode去指揮DataNode刪除文件。

namespace

HDFS支持傳統的層次型文件組織結構,用戶可以創建刪除目錄文件,NameNode負責維護文件系統的namespace名稱空間,任何對文件系統名稱或屬性的修改都將被NameNode記錄下來,HDFS給客戶端提供一個統一的抽象目錄樹,客戶端通過路徑(url)來訪問資源,如hdfs://192.168.88.151:9870/dir-a/file.data

HDFS簡介

HDFS(Hadoop Distributed File System)Hadoop分布式文件系統

HDFS的架構圖?

HDFS使用多臺計算機存儲文件,并提供一個統一的訪問接口

HDFS的設計目標

HDFS適合大文件處理,并不適合小文件的處理

HDFS更注重數據的吞吐,不注重數據的交互式訪問,所以處理延遲較高

HDFS不能編輯修改

HDFS Shell命令行

介紹

通過Shell命令行來操作文件系統

HDFS Shell CLI(command-line interface 命令行界面)支持多種文件系統,包括本地文件系統和分布式文件系統,具體操作什么文件系統取決于命令行中的文件路徑URL的前綴協議。

?可以在/export/server/hadoop-3.3.0/etc/hadoop/core-site.xml中設置默認訪問的文件系統

?hdfs dfs也可以訪問文件系統,只不過只能訪問HDFS文件系統。

可以通過hadoop fs -help來查看每個命令的用法

創建文件夾

?查看指定目錄內容

上傳文件到HDFS指定目錄下

localsrc的標準格式是? file:///

dst的標準格式是 hdfs://node1:8020/

?查看HDFS文件內容

?下載HDFS文件

?指定到本地目錄的具體某個文件名(這個文件可有可無),就等于給下載的文件改名。

拷貝HDFS文件

追加數據到HDFS文件中

將本地文件追加到HDFS文件里

HDFS的各角色職責

主角色:NameNode

是分布式文件系統的核心,架構中的主角色,維護和管理文件系統的元數據,包括名稱空間目錄樹結構,文件塊的位置信息,訪問權限,它是訪問HDFS的唯一入口

NameNode元數據的存儲

內存讀寫速度快,但斷電丟失數據,所以還要硬盤定時的進行持久化。

NameNode的數據保存在內存中,當系統重啟時,需要DataNode向NameNode重新匯報信息。

單點故障:一個地方出現了問題,導致整體不能工作

主角色需要大內存

從角色:DataNode

負責具體數據塊的存儲,擴容集群指的是增加DataNode節點.

從角色需要大磁盤

主角色輔助角色:secondarynamenode

是NameNode的輔助節點,但不能替代NameNode,主要是幫助主角色進行元數據文件的合并動作。

HDFS的寫數據流程(上傳文件)

幾個概念

Pipeline:管道,上傳文件的一種傳輸方式。

客戶端上傳到node1的HDFS文件系統(即保存到DataNode中),node1保存數據后再復制到第二個節點依此類推。

線性傳輸沿著一個方向傳輸,充分利用每臺機器的帶寬,能夠減少延遲,而不是采用拓撲式傳輸,讓客戶端發給node1-node3。

ACK應答響應

  • ACK(AcKnowledeg character)即確認字符,在數據通信中,接收方發給發送方的一種傳輸類控制字符,表示發送的數據已經確認接收無誤。比如node1給node2發送數據abc,那么node2按字符給node1發送確認。
  • 在HDFS的pipeline管道傳輸數據的過程中,傳輸的反方向會進行ACK校驗,確保傳輸安全

默認三副本存儲策略

  • 第一塊副本:看用戶客戶端本地有沒有DataNode,也就是客戶端這臺機器是否在集群中,否則就近隨機。
  • 第二塊副本:不同于第一塊副本的不同機架。
  • 第三塊副本:第二塊副本相同機架的不同機器。

?流程

  • 1.HDFS客戶端創建對象實例DistributeFileSystem,該對象封裝了與HDFS文件系統操作的相關方法。
  • 2.調用DistributedFileSystem對象的create()方法,通過RPC請求NameNode創建文件。

NameNode執行各種檢查判斷:目標文件是否存在,父目錄是否存在,客戶端是否具有創建權限。

檢查通過后,NameNode為本次請求記下一條記錄,返回FSDataOutputStream輸出流對象給客戶端用于寫數據。

  • 3.客戶端通過FSDataOutputStream輸出流開始寫入數據。
  • 4.寫入數據時,將數據分成一個個數據包(packet 默認64k),內部組件DataStreamer請求NameNode挑選出適合存儲數據副本的一組DataNode地址,默認是3副本存儲。

  • 5.傳輸的反方向上,通過ACK機制校驗數據包傳輸是否成功。
  • 6.客戶端完成數據寫入后,在FSDataOutputStream輸出流上調用close()方法關閉
  • 7.DistributedFileSystem聯系NameNode告知其文件寫入完成,等待NameNode確認。

?如果有至少一個上傳成功,客戶端通知NameNode,如果有缺失的副本(即復制傳輸失敗),NameNode會找其他的機器進行復制。

原文鏈接:https://blog.csdn.net/weixin_52972575/article/details/125881846

欄目分類
最近更新