HDFS分散式檔案系統簡介
阿新 • • 發佈:2019-02-14
HDFS(Hadoop Distributed File System)Hadoop 分散式檔案系統
基於流資料模式訪問
就是可以位元組序列化的資料,java.io.Serializable介面
分散式檔案系統處理的資料必須是流資料,可以寫IO操作的資料
以128MB的資料塊儲存檔案
其中每一個儲存節點上都有一個DataNode程序,由NameNode來進行協調。
10T的一個檔案資料儲存到多臺伺服器上,每個伺服器擔任一部分儲存任務,這些多臺伺服器通過一個檔案系統組織起來對外界提供統一的服務,那麼客戶端訪問這個10T的檔案的時候,就感覺後臺是一個伺服器在提供服務,那麼我們把這個機制就叫做分散式,把執行在多臺伺服器上的這個檔案系統就叫做分散式檔案系統。
1 HDFS名詞簡介
block:
基本儲存單位,128M,預設備份3份
塊的大小(hadoop2.0 128M):決定了資源,檔案系統讀寫資料的吞吐量,應用程式定址的速度
大資料的塊之所以設定的如此之大,是為了提高資料的吞吐量和降低資料定址的時間
每一個block塊對應一個Map的任務(執行緒)
NameNode:
維護HDFS檔案系統,儲存檔案資料的元資訊。處理來自客戶端的對HDFS的各種操作的互動反饋 映象檔案(Namespace image)和操作日誌檔案(edit log) 這些資訊在系統啟動時從資料節點重建.被Cache在RAM中 這兩個檔案也會被持久化儲存在本地硬碟。
SecondaryNameNode:
週期性將元資料節點的名稱空間映象檔案和修改日誌進行合併,並實現fsimage的備份
日誌與映象的定期合併的作用:
如果Namenode節點故障,namenode下次啟動的時候,會把fsimage載入到記憶體中
如果沒有合併機制:edits log是每一次操作的記錄,namenode要對每一次操作進行重寫
導致操作很耗時(namenode容錯機制)
DataNode:
檔案系統的工作節點,根據客戶端或是namenode的排程儲存和檢索資料 並且定期向namenode傳送他們所儲存的塊(block)的列表。 DataNode啟動時會向NameNode報告當前儲存的資料塊資訊,後續也會定時報告修改資訊 DataNode之間會進行通訊,複製資料塊,保證資料的冗餘性
NodeManager :
對它所在的節點上的資源的管理(cpu、記憶體、磁碟的利用情況)
定期向resourcemanager進行彙報該節點上的資源利用資訊
監督Container(容器)的生命週期
監控每個Container的資源使用(記憶體、CPU等)情況
追蹤節點健康狀況,管理日誌和不同應用程式用到的附屬服務(auxiliary service)。
ResouceManager:
負責叢集中所有資源的統一管理和分配
接收來自各個節點(NodeManager)的資源彙報資訊
並把這些資訊按照一定的策略分配給各個應用程式(實際上是ApplicationManager)。
2 HDFS優點
1)適合大資料處理
能夠處理百萬規模以上的檔案數量( GB、TB、PB級資料),能夠處理10K節點的規模
2)處理非結構化的資料
可處理結構化、半結構化、非結構化的資料(語音、視訊、圖片),80% 的資料都是非結構化的資料
3)流式訪問資料
一次寫入,多次讀取。檔案一旦寫入不能修改,只能追加。它能保證資料的一致性。
4)運行於廉價的商用機器叢集上
它通過多副本機制,提高可靠性。一旦出現故障也不會影響正常的業務處理,可以通過其它副本來恢復。
3 HDFS缺點
1)不適合處理低延遲的資料訪問
HDFS是為了處理大型資料集分析任務的,主要是為了達到高的資料吞吐量而設計的
HBase適合做低延遲的資料訪問BigTable
2)無法高效的儲存大量小檔案
當檔案以block塊的形式進行儲存時,block塊的位置會儲存在namenode節點的記憶體中
不論儲存大檔案還是小檔案,每個檔案對應的單條block的塊資訊大小是一致的
而NameNode的記憶體總是有限的。小檔案儲存的尋道時間會超過讀取時間,它違反了HDFS的設計目標。
(這裡的小檔案是指小於HDFS系統的Block大小的檔案,預設是64M)
3)不支援併發寫入和任意的修改
一個檔案同時只能有一個寫,不允許多個執行緒同時寫。
僅支援資料 append(追加),不支援檔案的隨機修改。以追加的形式達到修改的目的
4 HDFS特性
1)高容錯,可擴充套件性及可配置性強
資料自動儲存多個副本。它通過增加資料冗餘來提高容錯性。某一個副本丟失以後,它可以自動恢復
可擴充套件:可以不斷的新增新的datanode
2)跨平臺
Java語言開發的,HDFS支援多個平臺Windows
3)shell命令介面
hadoop fs -put 上傳,把本地Linux檔案系統的檔案,上傳到HDFS檔案系統中
hadoop fs -ls hdfs://master:9000/ 檢視HDFS檔案系統根目錄(/)下的檔案
......
4)機架感知功能
副本的存放,第一個存到rack1,第二個就會選擇不同於rack1的其他的rack上面儲存 /etc/hosts
5)負載均衡
理想狀態下,叢集中每個伺服器上面儲存資料都是均勻的。但在實際當中,經常會出現資料偏移
start-balancer.sh -t 10%
6)Web介面
http://master:18088 yarn http://master:50070 hdfs
能夠檢視hdfs檔案系統中的檔案資訊
5 HDFS設計目標
1)監測和快速恢復硬體故障
監測:立刻會監測到壞的塊--->上報到主節點RM
單獨啟動一個程序:hadoop-daemon.sh start namenode/datanode/resourcemanager/nodemanager
2)流式資料訪問
重視的是吞吐量,而不是資料處理的速度。實現批處理
3)大規模資料集
支援大檔案儲存,一個單一的HDFS例項能支撐數以千萬計的檔案
4)簡化一致性訪問模式
一次寫入,多次讀取
5)移植性強
移動計算的代價,要比移動資料的代價低
6 HDFS資料儲存
HDFS採用Master/Slave主從架構來儲存資料,這種架構主要由四個部分組成。分別為HDFS Client、NameNode、DataNode和Secondary NameNode
Client:客戶端
1、檔案切分。檔案上傳 HDFS 的時候,Client 將檔案切分成 一個一個的Block,然後進行儲存。
2、與 NameNode 互動,獲取檔案的位置資訊。
3、與 DataNode 互動,讀取或者寫入資料。
4、Client 提供一些命令來訪問和管理HDFS等操作。
NameNode:master管理者
1、管理 HDFS 的名稱空間。資料塊(Block)對映資訊。配置副本策略
2、處理客戶端讀寫請求。
fsimage與edits是NameNode的兩個重要檔案。
1)fsimage:元資料映象檔案(儲存檔案系統的目錄樹,比如說有哪些目錄,每個目錄有哪些檔案...)
2)edits:元資料操作日誌(儲存針對目錄樹的修改操作,比如你刪除了某個檔案或者增加了某個檔案)
DataNode:Slave節點,NameNode 下達命令,DataNode 執行實際的操作
1、儲存檔案。
2、執行資料塊的讀/寫操作。
SecondaryNameNode:輔助元資料
並非NameNode 的熱備(熱備從廣義上講,就是伺服器高可用應用的另一種說法)。
當NameNode 掛掉的時候,它並不能替換 NameNode 並提供服務。
1、輔助 NameNode,執行fsimage和edits的定期合併
2、在緊急情況下,可輔助恢復 NameNode。
7 HDFS功能概述
HDFS具有兩個功能:名稱空間管理(Namespace management)和塊/儲存管理服務(block/storage management)。
1.名稱空間管理
HDFS的名稱空間包含目錄、檔案和塊的資訊。
指名稱空間支援對HDFS中的目錄、檔案和塊做建立、修改、刪除、列表檔案和目錄等基本操作。
2.塊/儲存管理
在塊儲存服務中包含兩部分工作:塊管理和物理儲存。這是一個更通用的儲存服務。其他的應用可以直接建立在Block Storage上,如HBase,Foreign Namespaces等。
塊管理:
A) 處理DataNode向NameNode註冊的請求,處理datanode的成員關係。
B) 處理來自DataNode週期性的心跳報告,維護塊的位置資訊。
C) 處理與塊相關的操作:塊的建立、刪除、修改及獲取塊資訊。
D) 管理副本放置(replica placement)和塊的複製及多餘塊的刪除。
物理儲存:
Data Node把塊儲存到本地檔案系統中,對本地檔案系統的讀寫。