檔案系統定義
- 檔案系統是一種存儲群組織資料的方法,實作了資料的存儲、分級組織、通路和擷取等操作,使得使用者對檔案通路和查找變得容易;
- 檔案系統使用樹形目錄的抽象邏輯概念代替了硬碟等實體裝置使用資料塊的概念,使用者不必關心資料底層存在硬碟哪裡,隻需要記住這個檔案的所屬目錄和檔案名即可;
- 檔案系統通常使用硬碟和CD光牒這樣的儲存設備,并維護檔案在裝置中的實體位置。
傳統常見的檔案系統
- 所謂傳統常見的檔案系統更多指的的單機的檔案系統,也就是底層不會橫跨多台機器實作。比如windows作業系統上的檔案系統、Linux上的檔案系統、FTP檔案系統等等。
- 這些檔案系統的共同特征包括:帶有抽象的目錄樹結構,樹都是從/根目錄開始往下蔓延;樹中節點分為兩類:目錄和檔案;從根目錄開始,節點路徑具有唯一性。
資料、中繼資料
-
資料
指存儲的内容本身,比如檔案、視訊、圖檔等,這些資料底層最終是存儲在磁盤等存儲媒體上的,一般使用者無需關心,隻需要基于目錄樹進行增删改查即可,實際針對資料的操作由檔案系統完成。
-
中繼資料
中繼資料(metadata)又稱之為解釋性資料,記錄資料的資料;檔案系統中繼資料一般指檔案大小、最後修改時間、底層存儲位置、屬性、所屬使用者、權限等資訊。
海量資料存儲遇到的問題
-
成本高
傳統存儲硬體通用性差,裝置投資加上後期維護、更新擴容的成本非常高。
-
如何支撐高效率的計算分析
傳統存儲方式意味着資料:存儲是存儲,計算是計算,當需要處理資料的時候把資料移動過來。
程式和資料存儲是屬于不同的技術廠商實作,無法有機統一整合在一起。
-
性能低
單節點I/O性能瓶頸無法逾越,難以支撐海量資料的高并發高吞吐場景。
-
可擴充性差
無法實作快速部署和彈性擴充,動态擴容、縮容成本高,技術實作難度大。
分布式存儲系統
分布式存儲系統的核心屬性及功能含義
分布式存儲系統核心屬性:
- 分布式存儲
- 中繼資料記錄
- 分塊存儲
- 副本機制
分布式存儲的優點
- 問題:資料量大,單機存儲遇到瓶頸
-
解決:
單機縱向擴充:磁盤不夠加磁盤,有上限瓶頸限制
多機橫向擴充:機器不夠加機器,理論上無限擴充
中繼資料記錄的功能
- 問題:檔案分布在不同機器上不利于尋找
- 解決:中繼資料記錄下檔案及其存儲位置資訊,快速定位檔案位置
分塊存儲好處
- 問題:檔案過大導緻單機存不下、上傳下載下傳效率低
- 解決:檔案分塊存儲在不同機器,針對塊并行操作提高效率
副本機制的作用
- 問題:硬體故障難以避免,資料易丢失
- 解決:不同機器設定備份,備援存儲,保障資料安全
HDFS簡介
- HDFS(Hadoop Distributed File System ),意為:Hadoop分布式檔案系統。
- 是Apache Hadoop核心元件之一,作為大資料生态圈最底層的分布式存儲服務而存在。也可以說大資料首先要解決的問題就是海量資料的存儲問題。
- HDFS主要是解決大資料如何存儲問題的。分布式意味着是HDFS是橫跨在多台計算機上的存儲系統。
- HDFS是一種能夠在普通硬體上運作的分布式檔案系統,它是高度容錯的,适應于具有大資料集的應用程式,它非常适于存儲大型資料 (比如 TB 和 PB)。
- HDFS使用多台計算機存儲檔案, 并且提供統一的通路接口, 像是通路一個普通檔案系統一樣使用分布式檔案系統。
HDFS設計目标
- 硬體故障(Hardware Failure)是常态, HDFS可能有成百上千的伺服器組成,每一個元件都有可能出現故障。是以故障檢測和自動快速恢複是HDFS的核心架構目标。
- HDFS上的應用主要是以流式讀取資料(Streaming Data Access)。HDFS被設計成用于批處理,而不是使用者互動式的。相較于資料通路的反應時間,更注重資料通路的高吞吐量。
- 典型的HDFS檔案大小是GB到TB的級别。是以,HDFS被調整成支援大檔案(Large Data Sets)。它應該提供很高的聚合資料帶寬,一個叢集中支援數百個節點,一個叢集中還應該支援千萬級别的檔案。
- 大部分HDFS應用對檔案要求的是write-one-read-many通路模型。一個檔案一旦建立、寫入、關閉之後就不需要修改了。這一假設簡化了資料一緻性問題,使高吞吐量的資料通路成為可能。
- 移動計算的代價比之移動資料的代價低。一個應用請求的計算,離它操作的資料越近就越高效。将計算移動到資料附近,比之将資料移動到應用所在顯然更好。
- HDFS被設計為可從一個平台輕松移植到另一個平台。這有助于将HDFS廣泛用作大量應用程式的首選平台。
HDFS應用場景
HDFS重要特性
整體概述
- 主從架構
- 分塊存儲
- 副本機制
- 中繼資料記錄
- 抽象統一的目錄樹結構(namespace)
1)NameNode(nn):就是Master,它是一個主管、管理者。
- 管理HDFS的名稱空間;
- 配置副本政策;
- 管理資料塊(Block)映射資訊;
- 處理用戶端讀寫請求。
2)DataNode:就是Slave。NameNode下達指令,DataNode執行實際的操作。
- 存儲實際的資料塊;
- 執行資料塊的讀/寫操作。
3)Client:就是用戶端。
- 檔案切分。檔案上傳HDFS的時候,Client将檔案切分成一個一個的Block,然後進行上傳
- 與NameNode互動,擷取檔案的位置資訊;
- 與DataNode互動,讀取或者寫入資料;
- Client提供一些指令來管理HDFS,比如NameNode格式化;
- Client可以通過一些指令來通路HDFS,比如對HDFS增删查改操作;
4)Secondary NameNode:并非NameNode的熱備。當NameNode挂掉的時候,它并不
能馬上替換NameNode并提供服務。
- 輔助NameNode,分擔其工作量,比如定期合并Fsimage和Edits,并推送給NameNode ;
- 在緊急情況下,可輔助恢複NameNode。
主從架構
- HDFS叢集是标準的master/slave主從架構叢集。
- 一般一個HDFS叢集是有一個Namenode和一定數目的Datanode組成。
- Namenode是HDFS主節點,Datanode是HDFS從節點,兩種角色各司其職,共同協調完成分布式的檔案存儲服務。
- 官方架構圖中是一主五從模式,其中五個從角色位于兩個機架(Rack)的不同伺服器上。
分塊存儲
- HDFS中的檔案在實體上是分塊存儲(block)的,預設大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M,不足128M則本身就是一塊。
- 塊的大小可以通過配置參數來規定,參數位于hdfs-default.xml中:dfs.blocksize。
思考:為什麼塊的大小不能設定太小,也不能設定太大?
(1)HDFS的塊設定太小,會增加尋址時間,程式一直在找塊的開始位置;
(2)如果塊設定的太大,從磁盤傳輸資料的時間會明顯大于定位這個塊開始位置所需的時間。導緻程式在處理這塊資料時,會非常慢。
總結:HDFS塊的大小設定主要取決于磁盤傳輸速率。
副本機制
- 檔案的所有block都會有副本。副本系數可以在檔案建立的時候指定,也可以在之後通過指令改變。
- 副本數由參數dfs.replication控制,預設值是3,也就是會額外再複制2份,連同本身總共3份副本。
中繼資料管理
在HDFS中,Namenode管理的中繼資料具有兩種類型:
-
檔案自身屬性資訊
檔案名稱、權限,修改時間,檔案大小,複制因子,資料塊大小。
-
檔案塊位置映射資訊
記錄檔案塊和DataNode之間的映射資訊,即哪個塊位于哪個節點上。
namespace
- HDFS支援傳統的層次型檔案組織結構。使用者可以建立目錄,然後将檔案儲存在這些目錄裡。檔案系統名字空間的層次結構和大多數現有的檔案系統類似:使用者可以建立、删除、移動或重命名檔案。
- Namenode負責維護檔案系統的namespace名稱空間,任何對檔案系統名稱空間或屬性的修改都将被Namenode記錄下來。
- HDFS會給用戶端提供一個統一的抽象目錄樹,用戶端通過路徑來通路檔案,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。
資料塊存儲
- 檔案的各個block的具體存儲管理由DataNode節點承擔。
- 每一個block都可以在多個DataNode上存儲。