網站首頁 編程語言 正文
分布式存儲的核心屬性和功能作用
為什么使用分布式文件系統?
當存儲海量數據時,當磁盤空間不夠時,往往是通過擴容來解決,但是升級擴容的成本高。
單節點不能完成高并發,需要支撐海量數據的計算。
分布式存儲能無線拓展,不像單機主板有限,連接的磁盤有限。
元數據記錄
分布式文件系統如何快速定位文件?通過元數據去記錄,元數據相當于書的目錄,是記錄數據的數據,記錄文件名,大小,存儲機器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
相關推薦
- 2022-07-15 C#中Timer定時器類的簡單使用_C#教程
- 2022-05-16 淺談react?16.8版本新特性以及對react開發的影響_React
- 2022-06-30 Oracle中游標Cursor的用法詳解_oracle
- 2023-01-13 python中的txt文件轉換為XML_python
- 2022-07-08 python?讀寫csv文件方式(創建,追加,覆蓋)_python
- 2022-11-07 .NET?實現啟動時重定向程序運行路徑及?Windows?服務運行模式部署的方法_實用技巧
- 2022-03-22 Android中ListView使用示例介紹_Android
- 2022-01-19 正則——時間 時分秒 12小時制 24小時制 moment可以轉化的時間 HH:mm:ss hh:m
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支