2021年大数据Hadoop(七):HDFS分布式文件系统简介
?2021大數據領域優質創作博客,帶你從入門到精通,該博客每天更新,逐漸完善大數據各個知識體系的文章,幫助大家更高效學習。
有對大數據感興趣的可以關注微信公眾號:三幫大數據
目錄
HDFS分布式文件系統簡介
一、HDFS概述
二、HDFS發展歷史
三、HDFS設計目標
四、HDFS應用場景
適合的應用場景
不適合的應用場景
五、HDFS的架構
六、HDFS的副本機制
HDFS文件副本機制
HDFS副本放置策略(機架感知)
HDFS分布式文件系統簡介
一、HDFS概述
在現代的企業環境中,單機容量往往無法存儲大量數據,需要跨機器存儲。統一管理分布在集群上的文件系統稱為分布式文件系統?。
? HDFS(Hadoop Distributed File System)是 Apache Hadoop 項目的一個子項目. Hadoop 非常適于存儲大型數據 (比如 TB 和 PB), 其就是使用 HDFS 作為存儲系統. HDFS 使用多臺計算機存儲文件, 并且提供統一的訪問接口, 像是訪問一個普通文件系統一樣使用分布式文件系統.
???分布式文件系統解決的問題就是大數據存儲。它們是橫跨在多臺計算機上的存儲系統。分布式文件系統在大數據時代有著廣泛的應用前景,它們為存儲和處理超大規模數據提供所需的擴展能力。
二、HDFS發展歷史
- Doug Cutting?在做 Lucene 的時候, 需要編寫一個爬蟲服務, 這個爬蟲寫的并不順利, 遇到 了一些問題, 諸如: 如何存儲大規模的數據, 如何保證集群的可伸縮性, 如何動態容錯等。
- 2013年的時候, Google 發布了三篇論文, 被稱作為三駕馬車, 其中有一篇叫做 GFS, 是描述了 Google 內部的一個叫做 GFS?的分布式大規模文件系統, 具有強大的可伸縮性和容錯。
- Doug Cutting 后來根據 GFS 的論文, 創造了一個新的文件系統, 叫做 HDFS。
三、HDFS設計目標
1、硬件故障是常態, HDFS將有成百上千的服務器組成,每一個組成部分都有可能出現故障。因此故障的檢測和自動快速恢復是HDFS的核心架構目標。
2、HDFS上的應用與一般的應用不同,HDFS被設計成適合批量處理,而不是用戶交互式的。相較于數據訪問的反應時間,更注重數據訪問的高吞吐量。
3、典型的HDFS文件大小是GB到TB的級別。所以,HDFS被調整成支持大文件。它應該提供很高的聚合數據帶寬,一個集群中支持數百個節點,一個集群中還應該支持千萬級別的文件。
4、大部分HDFS應用對文件要求的是write-one-read-many訪問模型。一個文件一旦創建、寫入、關閉之后就不需要修改了。這一假設簡化了數據一致性問題,使高吞吐量的數據訪問成為可能。
5、移動計算的代價比之移動數據的代價低。一個應用請求的計算,離它操作的數據越近就越高效,這在數據達到海量級別的時候更是如此。將計算移動到數據附近,比之將數據移動到應用所在顯然更好。
6、在異構的硬件和軟件平臺上的可移植性。這將推動需要大數據集的應用更廣泛地采用HDFS作為平臺。
四、HDFS應用場景
適合的應用場景
- 存儲非常大的文件:這里非常大指的是幾百M、G、或者TB級別,需要高吞吐量,對延時沒有要求。
- 采用流式的數據訪問方式: 即一次寫入、多次讀取,數據集經常從數據源生成或者拷貝一次,然后在其上做很多分析工作 ,且不支持文件的隨機修改。
- 正因為如此,HDFS適合用來做大數據分析的底層存儲服務,并不適合用來做.網盤等應用,因為,修改不方便,延遲大,網絡開銷大,成本太高。
- 運行于商業硬件上: Hadoop不需要特別貴的機器,可運行于普通廉價機器,可以處節約成本
- 需要高容錯性?
- 為數據存儲提供所需的擴展能力
不適合的應用場景
- 低延時的數據訪問 對延時要求在毫秒級別的應用,不適合采用HDFS。HDFS是為高吞吐數據傳輸設計的,因此可能犧牲延時
- 大量小文件 文件的元數據保存在NameNode的內存中, 整個文件系統的文件數量會受限于NameNode的內存大小。 經驗而言,一個文件/目錄/文件塊一般占有150字節的元數據內存空間。如果有100萬個文件,每個文件占用1個文件塊,則需要大約300M的內存。因此十億級別的文件數量在現有商用機器上難以支持。
- 多方讀寫,需要任意的文件修改 HDFS采用追加(append-only)的方式寫入數據。不支持文件任意offset的修改,HDFS適合用來做大數據分析的底層存儲服務,并不適合用來做.網盤等應用,因為,修改不方便,延遲大,網絡開銷大,成本太高。
五、HDFS的架構
HDFS采用Master/Slave架構,一個HDFS集群有兩個重要的角色,分別是Namenode和Datanode。Namenode是管理節點,負責管理文件系統的命名空間(namespace)以及客戶端對文件的訪問。Datanode是實際存儲數據的節點。HDFS暴露了文件系統的命名空間,用戶能夠以操作文件的形式在上面操作數據。
HDFS的四個基本組件:HDFS Client、NameNode、DataNode和Secondary NameNode。
?1、Client:就是客戶端。
- 文件切分。文件上傳 HDFS 的時候,Client 將文件切分成 一個一個的Block,然后進行存儲
- 與 NameNode 交互,獲取文件的位置信息。
- 與 DataNode 交互,讀取或者寫入數據。
- Client 提供一些命令來管理 和訪問HDFS,比如啟動或者關閉HDFS。
2、NameNode:就是 master,它是一個主管、管理者。
- 管理 HDFS 的名稱空間
- 管理數據塊(Block)映射信息
- 配置副本策略
- 處理客戶端讀寫請求。
3、DataNode:就是Slave。NameNode 下達命令,DataNode 執行實際的操作。
- 存儲實際的數據塊。
- 執行數據塊的讀/寫操作。
- 定時向namenode匯報block信息
4、Secondary NameNode:并非 NameNode 的熱備。當NameNode 掛掉的時候,它并不能馬上替換 NameNode 并提供服務。
- 輔助 NameNode,分擔其工作量。
- 定期合并 fsimage和fsedits,并推送給NameNode。
- 在緊急情況下,可輔助恢復 NameNode。
六、HDFS的副本機制
HDFS文件副本機制
HDFS被設計成能夠在一個大集群中跨機器可靠地存儲超大文件。它將每個文件存儲成一系列的數據塊,這個數據塊被稱為block,除了最后一個,所有的數據塊都是同樣大小的。
為了容錯,文件的所有block都會有副本。每個文件的數據塊大小和副本系數都是可配置的。
所有的文件都是以 block 塊的方式存放在 HDFS 文件系統當中,作用如下
1、一個文件有可能大于集群中任意一個磁盤,引入塊機制,可以很好的解決這個問題
2、使用塊作為文件存儲的邏輯單位可以簡化存儲子系統
3、塊非常適合用于數據備份進而提供數據容錯能力
4、副本優點是安全,缺點是占空間。
在 Hadoop1 當中, 文件的 block 塊默認大小是 64M, hadoop2 當中, 文件的 block 塊大小默認是 128M(134217728字節)。假設文件大小是100GB,從字節位置0開始,每128MB字節劃分為一個block,依此類推,可以劃分出很多的block。每個block就是128MB大小。
block塊的大小可以通過 hdfs-site.xml 當中的配置文件進行指定,Hadoop默認的副本數為3,也就是每個block會存三份。
<property><name>dfs.block.size</name><value>塊大小以字節為單位</value></property>
注意當一個文件的大小不足128M時,比如文件大小為2M,那么這個文件也占用一個block,但是這個block實際只占2M的空間,所以從某種意義上來講,block只是一個邏輯單位。
HDFS副本放置策略(機架感知)
HDFS分布式文件系統的內部有一個副本存放策略,默認副本數為3,在這里以副本數=3為例:
第一副本:優先放置到離寫入客戶端最近的DataNode節點,如果上傳節點就是DataNode,則直接上傳到該節點,如果是集群外提交,則隨機挑選一臺磁盤不太滿,CPU不太忙的節點。
第二個副本:放置在于第一個副本不同的機架的節點上(隨機選擇)
第三個副本:與第二個副本相同機架的不同節點中。
- 📢博客主頁:https://lansonli.blog.csdn.net
- 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
- 📢本文由 Lansonli 原創,首發于 CSDN博客🙉
- 📢大數據系列文章會每天更新,停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活?
總結
以上是生活随笔為你收集整理的2021年大数据Hadoop(七):HDFS分布式文件系统简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据Hadoop(四):Ha
- 下一篇: 2021年大数据Hadoop(八):HD