分布式文件系统—HDFS—基本介绍
目錄
一、HDFS相關概念
二、設計思路
三、HDFS總體架構
四、HDFS文件讀寫
五、HDFS優缺點
Hadoop簡介
Hadoop是Apache開源軟件基金會開發的運行于大規模普通服務器上用于大數據存儲、計算、分析的一種分布式存儲系統和分布式運行框架。
其設計思想為使用普通機器(高性能、低成本)、數據冗余(HDFS)、并行化處理(MR)、移動計算(海量數據的情況下移動計算比移動數據更有效),其中思想基礎為使用普通機器,只有做到高性能和低成本,使用門檻低,Hadoop項目才會迅速普及,被大家運用。
一、HDFS相關概念
首先,它是一個文件系統,用于存儲文件,通過統一的命名空間——目錄樹來定位文件。其次,它是分布式的,由很多服務器聯合起來實現其功能,集群中的服務器都有各自清晰的角色定位。重要特性如下:
- HDFS 中的文件在物理上是分塊存儲(block):塊的大小可以通過配置參數(dfs.blocksize)來規定,默認大小在 hadoop2.x 版本中是 128M,老版本中是 64M,hadoop3.x版本中是256M。
- HDFS 文件系統會給客戶端提供一個統一的抽象目錄樹:客戶端通過路徑來訪問文件,形如為?hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
- 目錄結構及文件分塊位置信息(元數據)的管理由 namenode 節點承擔,namenode 是 HDFS 集群主節點,負責維護整個 hdfs 文件系統的目錄樹,以及每一個路徑(文件)所對應的 block 塊信息(block 的 id,及所在的 datanode 服務器)。
- 文件的各個 block 的存儲管理由 datanode 節點承擔,datanode 是 HDFS 集群從節點,每一個 block 都可以在多個 datanode 上存儲多個副本(副本數量也可以通過參數設置 dfs.replication,默認是 3)。
- HDFS 是設計成適應一次寫入,多次讀出的場景,且不支持文件的修改。(PS:適合用來做數據分析,并不適合用來做網盤應用,因為,不便修改,延遲大,網絡開銷大,成本太高)
二、設計思路
HDFS 被設計成用來使用低廉的服務器來進行海量數據的存儲,那是怎么做到的呢?
默認的數據塊大小為128MB(Hadoop-2.2版本之前為64MB)。所以,HDFS文件總是按照128MB被切分成不同的數據塊,每個數據塊盡可能地存儲于不同的DataNode中.不同于普通文件系統的是,當文件長度小于一個數據塊的大小時,該文件是不會占用整個數據塊空間。
?
三、HDFS總體架構
HDFS采用Master/Slave(即:主/從)架構:一個HDFS集群是由一個NameNode和若干個DataNode組成。
1.元數據節點(NameNode)
元數據節點的作用是管理分布文件系統的命名空間,并將所有的文件和目錄的元數據保存到Linux本地文件系統的目錄之中.這些信息采用文件命名空間鏡像及編輯日志方式進行保存。此外,NameNode節點還保存了一個文件,該文件信息包括哪些數據塊以及這些數據塊分布在哪些DataNode之中.但這些信息并不永久存儲本地文件系統,而是在NameNode啟動時從各個DataNode收集而成。
2.數據節點(DataNode)
數據節點作用是保存HDFS文件的數據內容.在客戶端向HDFS寫入文件時,大數據文件將被切分成多個數據塊,為了保證HDFS的高吞吐量,NameNode將這些數據的存儲任務指派給不同的DataNode。每一個DataNode在授受任務之后直接從客戶端接收數據,經加密后寫入到Linux本地系統的相應目錄中。
3.輔助元數據節點(Secondary NameNode)
輔助元數據節點的作用是周期性地將元數據節點的鏡像文件fsimage和日志edits合并,以防日志文件過大.合并之后,fsimage文件也在輔助元數據節點保存一份,以便在元數據節點中的鏡像文件失敗時可以恢復。特別注意:Secondary NameNode不是NameNode出現問題時的備用節點。
四、HDFS文件讀寫
讀文件:客戶端向NameNode發送數據讀操作請求,NameNode向客戶端發送組成該文件的數據塊的位置列表(即每個數據塊存儲哪些DataNode之中),客戶端直接從這些DataNode讀取文件數據(在讀數據過程中,NameNode不參與文件的傳輸)
?
寫文件:客戶端向NameNode發送數據寫操作請求,包括文件名和目錄路徑等部分元數據信息;NameNode告訴客戶端到哪個數據節點進行具體的數據寫入操作;客戶端直接將文件數據傳輸給DataNode,由DataNode的后臺程序負責把數據保存到Linux的本地文件系統之中.
五、HDFS優缺點
1. HDFS優點
- 可構建在廉價機器上:通過多副本提高可靠性,提供了容錯和恢復機制
- 高容錯性:數據自動保存多個副本,副本丟失后,自動恢復
- 適合批處理:移動計算而非數據,數據位置暴露給計算框架
- 適合大數據處理:GB、TB、甚至 PB 級數據,百萬規模以上的文件數量,10K+節點規模
- 流式文件訪問:一次性寫入,多次讀取,保證數據一致性
2. HDFS缺點
不適于以下操作:
- 低延遲數據訪問:比如毫秒級,低延遲與高吞吐率
- 小文件存取:占用 NameNode 大量內存 150b* 1000W = 15E,1.5G,尋道時間超過讀取時間
- 并發寫入、文件隨機修改:一個文件只能有一個寫者,僅支持 append
HDFS 不適合存儲小文件:
- 元信息存儲在 NameNode 內存中:一個節點的內存是有限的
- 存取大量小文件消耗大量的尋道時間:類比拷貝大量小文件與拷貝同等大小的一個大文件
- NameNode 存儲 block 數目是有限的:一個 block 元信息消耗大約 150 byte 內存,存儲 1 億個 block,大約需要 20GB 內存,如果一個文件大小為 10K,則 1 億個文件大小僅為 1TB(但要消耗掉 NameNode 20GB內存)。
總結
以上是生活随笔為你收集整理的分布式文件系统—HDFS—基本介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件系统是什么?
- 下一篇: 分布式文件系统—HDFS—入门简介