新聞中心
HDFS(Hadoop Distributed File System)與Linux文件系統(tǒng)的比較分析

創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站重做改版、伊州網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為伊州等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
隨著大數(shù)據(jù)時(shí)代的到來(lái),分布式存儲(chǔ)系統(tǒng)被廣泛應(yīng)用,其中HDFS和Linux文件系統(tǒng)是常見(jiàn)的分布式文件系統(tǒng)。兩者都是存儲(chǔ)大數(shù)據(jù)集的文件系統(tǒng),但是它們之間存在著很大的差異。本文將對(duì)HDFS和Linux文件系統(tǒng)進(jìn)行比較分析,以幫助人們更好地理解它們的區(qū)別和用途。
一、HDFS和Linux文件系統(tǒng)的基本概念
HDFS是一種專為大數(shù)據(jù)量設(shè)計(jì)的分布式文件系統(tǒng),由Apache Hadoop項(xiàng)目開(kāi)發(fā)。它運(yùn)行在低成本硬件上,提供高容錯(cuò)性和高吞吐量。HDFS將數(shù)據(jù)塊存儲(chǔ)在多個(gè)計(jì)算機(jī)節(jié)點(diǎn)上,使得大規(guī)模的數(shù)據(jù)集可以被高效地存儲(chǔ)和處理。HDFS具有自我修復(fù)能力,在某個(gè)節(jié)點(diǎn)出現(xiàn)故障時(shí),它會(huì)自動(dòng)將數(shù)據(jù)塊復(fù)制到其他節(jié)點(diǎn)上。
Linux文件系統(tǒng)是Linux操作系統(tǒng)使用的文件系統(tǒng),它的設(shè)計(jì)目標(biāo)是提供高效的文件存儲(chǔ)和管理能力。Linux文件系統(tǒng)采用基于inode的文件系統(tǒng)結(jié)構(gòu),將文件和目錄存儲(chǔ)在磁盤上的inode節(jié)點(diǎn)中。當(dāng)需要訪問(wèn)文件時(shí),Linux文件系統(tǒng)會(huì)讀取inode節(jié)點(diǎn)信息獲取文件存儲(chǔ)的位置和大小,然后通過(guò)磁盤讀寫操作訪問(wèn)文件。
二、HDFS和Linux文件系統(tǒng)的設(shè)計(jì)目標(biāo)
HDFS和Linux文件系統(tǒng)在設(shè)計(jì)目標(biāo)上存在差異。HDFS的設(shè)計(jì)目標(biāo)是存儲(chǔ)超大規(guī)模數(shù)據(jù)集,并提供高性能和高容錯(cuò)性。它追求高吞吐量,適合進(jìn)行一次寫入多次讀取的操作。而Linux文件系統(tǒng)的設(shè)計(jì)目標(biāo)則是提供可靠的文件存儲(chǔ)和管理能力,支持各種類型的文件系統(tǒng)和操作。它追求低延遲,適合進(jìn)行隨機(jī)讀寫的操作。
三、HDFS和Linux文件系統(tǒng)的文件管理方式
HDFS和Linux文件系統(tǒng)在文件管理方式上也存在很大不同。HDFS采用塊存儲(chǔ)方式,將大文件切分成多個(gè)大小相等的塊進(jìn)行存儲(chǔ)。每個(gè)塊都會(huì)復(fù)制多份存儲(chǔ)到不同的節(jié)點(diǎn)上,以提高數(shù)據(jù)的可靠性和容錯(cuò)性。HDFS通過(guò)NameNode和DataNode兩個(gè)服務(wù)來(lái)管理和存儲(chǔ)文件。
Linux文件系統(tǒng)則采用inode節(jié)點(diǎn)的方式來(lái)管理文件和目錄。每個(gè)文件和目錄都有一個(gè)唯一的inode節(jié)點(diǎn)來(lái)存儲(chǔ)它們的信息和屬性。Linux文件系統(tǒng)使用類似于B樹(shù)的方式來(lái)組織inode節(jié)點(diǎn),以支持大量的文件和目錄。
四、HDFS和Linux文件系統(tǒng)的性能比較
HDFS和Linux文件系統(tǒng)在性能方面也存在巨大差異。由于HDFS追求高吞吐量,以便支持大規(guī)模數(shù)據(jù)處理,它的寫入性能非常高。但是HDFS的隨機(jī)讀寫性能相對(duì)較差,由于它采用塊存儲(chǔ)方式,無(wú)法進(jìn)行隨機(jī)讀取。而Linux文件系統(tǒng)則具有較好的隨機(jī)讀寫性能,由于它采用inode節(jié)點(diǎn)的方式,可以快速定位文件和目錄的物理位置,支持隨機(jī)讀寫。
總體而言,HDFS適合用于超大規(guī)模數(shù)據(jù)集的存儲(chǔ)和處理,它可以提供高效的數(shù)據(jù)訪問(wèn)和可靠的數(shù)據(jù)保護(hù)。而Linux文件系統(tǒng)則適合用于普通文件管理和存儲(chǔ),它提供高效的隨機(jī)讀寫和靈活的文件操作。
五、HDFS和Linux文件系統(tǒng)的應(yīng)用場(chǎng)景
HDFS和Linux文件系統(tǒng)的應(yīng)用場(chǎng)景也不同。HDFS適合用于大規(guī)模數(shù)據(jù)的存儲(chǔ)和分析,如數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)、等。HDFS可以與Hadoop生態(tài)系統(tǒng)中的其他工具配合使用,如MapReduce、Pig、Hive等,提供全面的大數(shù)據(jù)解決方案。而Linux文件系統(tǒng)則適合用于普通文件的存儲(chǔ)和管理,如文檔、圖片、視頻等。Linux文件系統(tǒng)可以與各種操作系統(tǒng)和工具配合使用,如Windows、Mac OS等,提供各種類型的應(yīng)用和服務(wù)。
HDFS和Linux文件系統(tǒng)在設(shè)計(jì)、文件管理、性能和應(yīng)用方面存在巨大差異。在實(shí)際應(yīng)用中,需要根據(jù)具體需求選擇適當(dāng)?shù)奈募到y(tǒng),以實(shí)現(xiàn)更佳的性能和效率。對(duì)于存儲(chǔ)超大規(guī)模數(shù)據(jù)的應(yīng)用,HDFS是更佳的選擇,它可以提供高效的數(shù)據(jù)管理和保護(hù)。而對(duì)于普通文件管理和存儲(chǔ)的應(yīng)用,Linux文件系統(tǒng)則是更為合適的選擇,它提供高效的隨機(jī)讀寫和靈活的文件操作。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
HDFS 系統(tǒng)架構(gòu)
HDFS Architecture
Hadoop Distributed File System (HDFS) 是設(shè)計(jì)可以運(yùn)行于普通商業(yè)硬件上的分布式文件系統(tǒng)。它跟現(xiàn)有的分布式文件系統(tǒng)有很多相通的地方,但是區(qū)別也是顯著的。HDFS具有高度容錯(cuò)性能,被設(shè)計(jì)運(yùn)行于低成本硬件上。HDFS可以向應(yīng)用提供高吞吐帶寬,適合于大數(shù)據(jù)應(yīng)用。HDFS 放寬了一些 POSIX 的要求,以開(kāi)啟對(duì)文件系統(tǒng)數(shù)據(jù)的流式訪問(wèn)。HDFS 最初是作為Apache Nutch web 搜索引擎項(xiàng)目的基礎(chǔ)設(shè)施開(kāi)發(fā)的。HDFS 現(xiàn)在是 Apache Hadoop 核心項(xiàng)目的一部分。
HDFS是主從架構(gòu)。一個(gè)HDFS集群包含一個(gè)NameNode,一個(gè)管理文件系統(tǒng)命名空間和控制客戶端訪問(wèn)文件的master server。以及,若干的 DataNodes,通常集群的每個(gè)node一個(gè),管理運(yùn)行DataNode的節(jié)點(diǎn)上的存儲(chǔ)。HDFS 發(fā)布一個(gè)文件系統(tǒng)命名空間,并允許用戶數(shù)據(jù)已文件的形式存儲(chǔ)在上面。內(nèi)部,一個(gè)文件被分成一個(gè)或多個(gè)塊,存儲(chǔ)在一組DataNodes上。NameNode 執(zhí)行文件系統(tǒng)命名空間操作,比如:打開(kāi)、關(guān)閉、重命名文件或目錄。它還確定塊到DataNodes的映射。DataNodes 負(fù)責(zé)向文件系統(tǒng)客戶端提供讀寫服務(wù)。DataNodes 根據(jù) NameNode 的指令執(zhí)行塊的創(chuàng)建、刪除以及復(fù)制。
NameNode 和 DataNode 是設(shè)計(jì)運(yùn)行于普通商業(yè)機(jī)器的軟件。這些機(jī)器通常運(yùn)行 GNU/Linux 操作系統(tǒng)。HDFS 是Java 語(yǔ)言編寫的;任何支持Java的機(jī)器都可以運(yùn)行NameNode or DataNode 軟件。使用高移植性Java語(yǔ)言,意味著HDFS可以部署在很大范圍的機(jī)器上。一個(gè)典型的部署就是一臺(tái)特定的機(jī)器只運(yùn)行NameNode 軟件,而集群內(nèi)的其他機(jī)器運(yùn)行DataNode 軟件的一個(gè)實(shí)例。這種架構(gòu)不排除一臺(tái)機(jī)器上運(yùn)行多個(gè)DataNodes ,但是在實(shí)際部署中很少見(jiàn)。
單 NameNode 節(jié)點(diǎn)的存在大大簡(jiǎn)化了架構(gòu)。NameNode 是所有HDFS 元數(shù)據(jù)的仲裁和倉(cāng)庫(kù)。系統(tǒng)設(shè)計(jì)上,用戶數(shù)據(jù)永遠(yuǎn)不經(jīng)過(guò)NameNode。
HDFS 支持傳統(tǒng)的文件分級(jí)組織。用戶或應(yīng)用可以創(chuàng)建目錄,并在目錄內(nèi)存儲(chǔ)文件。 文件系統(tǒng)命名空間的層次結(jié)構(gòu)跟其他文件系統(tǒng)類似;可以創(chuàng)建、刪除、移動(dòng)、重命名文件。HDFS 支持 user quotas 和 access permissions 。 HDFS 不支持軟、硬鏈接。但是,HDFS 架構(gòu)不排除實(shí)現(xiàn)這些功能。
雖然HDFS遵守 文件系統(tǒng)命名約定 ,一些路徑和名稱 (比如/.reserved 和.snapshot ) 保留了。比如功能 transparent encryption 和 snapshot 就使用的保留路徑。
NameNode 維護(hù)文件系統(tǒng)命名空間。任何文件系統(tǒng)命名空間或?qū)傩缘淖兓?,都?huì)被NameNode記錄。 應(yīng)用可以指定HDFS應(yīng)維護(hù)的文件副本數(shù)量。文件副本的數(shù)量被稱為該文件的復(fù)制因子 replication factor 。該信息存儲(chǔ)于NameNode。
HDFS 被設(shè)計(jì)用于在一個(gè)大規(guī)模集群上跨機(jī)器可靠地存儲(chǔ)巨大的文件。它以一序列的塊的方式存儲(chǔ)文件。每個(gè)文件都可以配置塊尺寸和復(fù)制因子。
一個(gè)文件除了最后一個(gè)塊外,其他的塊一樣大。在 append 和 hsync 添加了可變長(zhǎng)度塊的支持后,用戶可以啟動(dòng)一個(gè)新的塊,而不用填充最后一個(gè)塊到配置的塊大小。
應(yīng)用可以指定一個(gè)文件的副本數(shù)量。復(fù)制因子可以在創(chuàng)建的時(shí)候指定,也可以以后更改。HDFS的文件只寫一次(除了 appends 和 truncates) ,并在任何時(shí)候只允許一個(gè) writer 。
NameNode 指定塊復(fù)制的所有決策。它周期性的從集群的每個(gè)DataNodes 接受 Heartbeat 和 Blockreport。Heartbeat 的接受代表 DataNode 工作正常。Blockreport 包含了DataNode上所有塊的清單。
副本的位置對(duì)HDFS的可靠性和性能至關(guān)重要。副本位置的優(yōu)化是HDFS和其他大多數(shù)分布式文件系統(tǒng)的區(qū)別。這是一個(gè)需要大量調(diào)優(yōu)和經(jīng)驗(yàn)的特性。Rack-aware 復(fù)制策略的目的就是提高數(shù)據(jù)可靠性,可用性和網(wǎng)絡(luò)帶寬利用率。當(dāng)前副本位置策略的實(shí)現(xiàn)是這個(gè)方向的之一步。實(shí)施該策略的短期目標(biāo)是在生產(chǎn)環(huán)境驗(yàn)證它,了解其更多的行為,為測(cè)試和研究更復(fù)雜的策略打下基礎(chǔ)。
大型HDFS實(shí)例運(yùn)行在跨多個(gè)Rack的集群服務(wù)器上。不同rack的兩個(gè)node通信需要通過(guò)交換機(jī)。大多數(shù)情況下,同一rack內(nèi)的帶寬大于rack之間的帶寬。
NameNode 通過(guò)在 Hadoop Rack Awareness 內(nèi)的進(jìn)程描述 判斷DataNode 屬于哪個(gè)rack id。一個(gè)簡(jiǎn)單但是并非更佳的策略是將副本分布于不同的racks。這可以防止整個(gè)機(jī)架發(fā)生故障時(shí)丟失數(shù)據(jù),并允許在讀取數(shù)據(jù)時(shí)使用多個(gè)機(jī)架的帶寬。該策略在群集中均勻地分布副本,使得組件故障時(shí)很容易平衡負(fù)載。 但是,該策略會(huì)增加寫入成本,因?yàn)閷懭氩僮餍枰獙K傳輸?shù)蕉鄠€(gè)機(jī)架。
一般,復(fù)制因子設(shè)置為3, HDFS 的分布策略是:如果writer在datanode上則將一個(gè)副本放到本地機(jī)器, 如果writer不在datanode上則將一個(gè)副本放到writer所在機(jī)柜的隨機(jī)datanode 上;另一個(gè)副本位于不同機(jī)架的node上;最后一個(gè)副本位于同一遠(yuǎn)程機(jī)架的不同node上。 該策略減少了機(jī)架間的寫流量,提升了寫性能。機(jī)架故障的概率遠(yuǎn)小于節(jié)點(diǎn)故障的概率;此策略不會(huì)影響數(shù)據(jù)可靠性和可用性承諾。但是,在讀取數(shù)據(jù)時(shí),它確實(shí)減少了聚合帶寬,因?yàn)閴K存儲(chǔ)于兩個(gè)機(jī)柜而不是三個(gè)機(jī)柜內(nèi)。使用此策略,副本不會(huì)均勻的分布于機(jī)架上。1/3 副本 位于同一節(jié)點(diǎn), 2/3 副本位于同一機(jī)架, 另1/3副本位于其他機(jī)架。該策略提升了寫性能而不影響數(shù)據(jù)可靠性和讀性能。
如果復(fù)制因子大于3,那么第4個(gè)及以后的副本則隨機(jī)放置,只要滿足每個(gè)機(jī)架的副本在(replicas – 1) / racks + 2)之下。
因?yàn)?NameNode 不允許 DataNodes 擁有同一個(gè)塊的多個(gè)副本,所以副本的更大數(shù)就是DataNodes的數(shù)量。
在把對(duì) 存儲(chǔ)類型和存儲(chǔ)策略 的支持添加到 HDFS 后,除了上面介紹的rack awareness外, NameNode 會(huì)考慮其他副本排布的策略。NameNode 先基于rack awareness 選擇節(jié)點(diǎn),然后檢查候選節(jié)點(diǎn)有文件關(guān)聯(lián)的策略需要的存儲(chǔ)空間。 如果候選節(jié)點(diǎn)沒(méi)有該存儲(chǔ)類型, NameNode 會(huì)查找其他節(jié)點(diǎn)。如果在之一條路徑中找不到足夠的節(jié)點(diǎn)來(lái)放置副本,NameNode會(huì)在第二條路徑中查找具有回滾存儲(chǔ)類型的節(jié)點(diǎn)。 、
當(dāng)前,這里描述的默認(rèn)副本排布策略正在使用中。
為了最小化全局帶寬消耗和讀取延遲, HDFS 會(huì)嘗試從最靠近reader的副本響應(yīng)讀取請(qǐng)求。如果在reader節(jié)點(diǎn)的同一機(jī)架上上存在副本,則該副本有限響應(yīng)讀請(qǐng)求。如果HDFS集群跨多個(gè)數(shù)據(jù)中心,則本地?cái)?shù)據(jù)中心優(yōu)先。
啟動(dòng)時(shí),NameNode 會(huì)進(jìn)入一個(gè)稱為 Safemode 的特殊狀態(tài)。當(dāng)NameNode處于Safemode狀態(tài)時(shí),不會(huì)復(fù)制數(shù)據(jù)塊。NameNode從DataNodes接收Heartbeat和Blockreport消息。Blockreport包含DataNode托管的數(shù)據(jù)塊列表。每個(gè)塊都指定了最小副本數(shù)。當(dāng)數(shù)據(jù)塊的最小副本數(shù)已與NameNode簽入時(shí),該塊被認(rèn)為是安全復(fù)制的。在NameNode簽入安全復(fù)制數(shù)據(jù)塊的已配置百分比(加上額外的30秒)后,NameNode退出Safemode狀態(tài)。然后,它判斷列表內(nèi)的數(shù)據(jù)塊清單是否少于副本指定的數(shù)量。NameNode 然后復(fù)制這些塊給其他 DataNodes。
HDFS 命名空間由 NameNode 存儲(chǔ)。NameNode 使用事務(wù)日志 EditLog 來(lái)持久化的保存系統(tǒng)元數(shù)據(jù)的每次變更。比如,在HDFS創(chuàng)建一個(gè)新文件,NameNode會(huì)在 EditLog 插入一條記錄來(lái)指示該變更。類似的,變更文件的復(fù)制因子也會(huì)在 EditLog 插入一條新記錄。NameNode 以文件的形式,將 EditLog 保存在本地OS文件系統(tǒng)上。整個(gè)文件系統(tǒng)命名空間,包括塊到文件的映射、文件系統(tǒng)屬性,都存儲(chǔ)于名字為 FsImage 的文件內(nèi)。 FsImage 也以文件的形式,存儲(chǔ)在NameNode的本地文件系統(tǒng)上。
NameNode 將包含整個(gè)文件系統(tǒng)和塊映射的image保存在內(nèi)存中。當(dāng)NameNode啟動(dòng)時(shí),或檢查點(diǎn)被預(yù)先定義的閾值觸發(fā)時(shí),它會(huì)從磁盤讀取 FsImage 和 EditLog ,把 EditLog 內(nèi)的事物應(yīng)用到內(nèi)存中的FsImage,再將新版本刷新回磁盤的新 FsImage 。然后會(huì)截?cái)嗯f的 EditLog ,因?yàn)樗氖挛镆呀?jīng)應(yīng)用到了持久化的 FsImage 上。 這個(gè)過(guò)程稱為檢查點(diǎn) checkpoint 。檢查點(diǎn)的目的是通過(guò)對(duì)文件系統(tǒng)元數(shù)據(jù)進(jìn)行快照并保存到FsImage,來(lái)確保HDFS擁有文件系統(tǒng)元數(shù)據(jù)的一致性視圖。盡管讀取 FsImage 是高效的,但是對(duì) FsImage 直接增量修改是不高效的。不是對(duì)每次編輯修改 FsImage ,而是將每次編輯保存到 Editlog 。在檢查點(diǎn)期間,將 Editlog 的變更應(yīng)用到 FsImage 。一個(gè)檢查點(diǎn)可以在固定周期(dfs.namenode.checkpoint.period)(以秒為單位)觸發(fā),也可以文件系統(tǒng)事物數(shù)量達(dá)到某個(gè)值(dfs.namenode.checkpoint.txns)的時(shí)候觸發(fā)。
DataNode 在本地文件系統(tǒng)上以文件的形式存儲(chǔ) HDFS data 。DataNode 不知道 HDFS 文件。它將HDFS data 的每個(gè)塊以獨(dú)立的文件存儲(chǔ)于本地文件系統(tǒng)上。DataNode 不在同一目錄創(chuàng)建所有的文件。而是,使用heuristic來(lái)確定每個(gè)目錄的更佳文件數(shù)量,并適當(dāng)?shù)膭?chuàng)建子目錄。在一個(gè)目錄創(chuàng)建所有的本地文件是不好的,因?yàn)楸镜匚募到y(tǒng)可能不支持單目錄的海量文件數(shù)量。當(dāng)DataNode啟動(dòng)的時(shí)候,它掃描本地文件系統(tǒng),生成與本地文件系統(tǒng)一一對(duì)應(yīng)的HDFS數(shù)據(jù)塊列表,然后報(bào)告給NameNode。這個(gè)報(bào)告稱為 Blockreport。
所有的HDFS通信協(xié)議都在TCP/IP協(xié)議棧上??蛻舳伺cNameNode指定的端口建立連接。與NameNode以ClientProtocol 通信。DataNodes與NameNode以DataNode Protocol進(jìn)行通信。遠(yuǎn)程過(guò)程調(diào)用(RPC)封裝了Client Protocol 和 DataNode Protocol。設(shè)計(jì)上,NameNode從不啟動(dòng)任何RPCs。相反,它只應(yīng)答DataNodes or clients發(fā)出的RPC請(qǐng)求。
HDFS的主要目標(biāo)是可靠的存儲(chǔ)數(shù)據(jù),即使是在故障的情況下。常見(jiàn)故障類型有三種:
NameNode failures
,
DataNode failures
和
network partitions
。
每個(gè)DataNode都周期性的向NameNode發(fā)送心跳信息。 一個(gè)
network partition
可能導(dǎo)致DataNodes子集丟失與NameNode的連接。NameNode會(huì)基于心跳信息的缺失來(lái)偵測(cè)這種情況。NameNode將沒(méi)有心跳信息的DataNodes標(biāo)記為 dead ,并不再轉(zhuǎn)發(fā)任何IO請(qǐng)求給它們。任何注冊(cè)到dead DataNode的數(shù)據(jù)對(duì)HDFS將不再可用。DataNode death會(huì)導(dǎo)致某些塊的復(fù)制因子低于它們指定的值。NameNode不斷跟蹤需要復(fù)制的塊,并在必要時(shí)啟動(dòng)復(fù)制。很多因素會(huì)導(dǎo)致重新復(fù)制:DataNode不可用,副本損壞,DataNode上硬盤故障,復(fù)制因子增加。
標(biāo)記 DataNodes dead 的超時(shí)時(shí)間保守地設(shè)置了較長(zhǎng)時(shí)間 (默認(rèn)超過(guò)10分鐘) 以避免DataNodes狀態(tài)抖動(dòng)引起的復(fù)制風(fēng)暴。對(duì)于性能敏感的應(yīng)用,用戶可以設(shè)置較短的周期來(lái)標(biāo)記DataNodes為過(guò)期,讀寫時(shí)避免過(guò)期節(jié)點(diǎn)。
HDFS 架構(gòu)支持?jǐn)?shù)據(jù)再平衡schemes。如果一個(gè)DataNode的空余磁盤空間低于閾值,sheme就會(huì)將數(shù)據(jù)從一個(gè)DataNode 移動(dòng)到另外一個(gè)。在某些文件需求突然增長(zhǎng)的情況下,sheme可能會(huì)在集群內(nèi)動(dòng)態(tài)的創(chuàng)建額外的副本,并再平衡其他數(shù)據(jù)。這些類型的數(shù)據(jù)再平衡schemes還沒(méi)有實(shí)現(xiàn)。
有可能從DataNode獲取的數(shù)據(jù)塊,到達(dá)的時(shí)候損壞了。這種損壞可能是由于存儲(chǔ)設(shè)備故障、網(wǎng)絡(luò)故障、軟件bug。HDFS客戶端軟件會(huì)HDFS的內(nèi)容進(jìn)行校驗(yàn)。當(dāng)客戶端創(chuàng)建HDFS文件的時(shí)候,它計(jì)算文件每個(gè)塊的校驗(yàn)值,并以獨(dú)立的隱藏文件存儲(chǔ)在同一HDFS命名空間內(nèi)。當(dāng)客戶端檢索文件時(shí)候,它會(huì)校驗(yàn)從每個(gè)DataNode獲取的數(shù)據(jù),是否與關(guān)聯(lián)校驗(yàn)文件內(nèi)的校驗(yàn)值匹配。 如果不匹配,客戶端可以從另外擁有副本塊的DataNode檢索。
FsImage 和 EditLog 是HDFS的核心數(shù)據(jù)結(jié)構(gòu)。這些文件的損壞將導(dǎo)致HDFS實(shí)例異常。 因此,NameNode可以配置為支持多 FsImage 和 EditLog 副本模式。任何對(duì) FsImage or EditLog 的更新都會(huì)導(dǎo)致每個(gè) FsImages 和 EditLogs 的同步更新。 FsImage 和 EditLog 的同步更新會(huì)導(dǎo)致降低命名空間每秒的事物效率。但是,這種降級(jí)是可以接受的,因?yàn)镠DFS應(yīng)用是數(shù)據(jù)密集型,而不是元數(shù)據(jù)密集型。當(dāng)NameNode重啟的時(shí)候,它會(huì)選擇最新的一致的 FsImage 和 EditLog 。
另外一種提供故障恢復(fù)能力的辦法是多NameNodes 開(kāi)啟HA,以 shared storage on NFS or distributed edit log (called Journal)的方式。推薦后者。
Snapshots – 快照,支持在特定時(shí)刻存儲(chǔ)數(shù)據(jù)的副本??煺展δ艿囊粋€(gè)用法,可以回滾一個(gè)故障的HDFS實(shí)例到已知工作良好的時(shí)候。
HDFS被設(shè)計(jì)與支持超大的文件。與HDFS適配的軟件都是處理大數(shù)據(jù)的。這些應(yīng)用都只寫一次,但是它們會(huì)讀取一或多次,并且需要滿足流式讀速度。HDFS支持文件的
一次寫入-多次讀取
語(yǔ)義。 HDFS典型的塊大小是128 MB.。因此,HDFS文件被分割為128 MB的塊,可能的話每個(gè)塊都位于不同的DataNode上。
當(dāng)客戶端以復(fù)制因子3寫入HDFS文件時(shí),NameNode以
復(fù)制目標(biāo)選擇算法
replication target choosing algorithm 檢索DataNodes 列表。該列表包含了承載該數(shù)據(jù)塊副本的DataNodes清單。然后客戶端寫入到之一個(gè)DataNode。之一DataNode逐步接受數(shù)據(jù)的一部分,將每一部分內(nèi)容寫入到本地倉(cāng)庫(kù),并將該部分?jǐn)?shù)據(jù)傳輸給清單上的第二DataNode。第二DataNode,按順序接受數(shù)據(jù)塊的每個(gè)部分,寫入到倉(cāng)庫(kù),然后將該部分?jǐn)?shù)據(jù)刷新到第三DataNode。最終,第三DataNode將數(shù)據(jù)寫入到其本地倉(cāng)庫(kù)。
因此,DataNode從管道的前一個(gè)DataNode獲取數(shù)據(jù),同時(shí)轉(zhuǎn)發(fā)到管道的后一個(gè)DataNode。因此,數(shù)據(jù)是以管道的方式從一個(gè)DataNode傳輸?shù)较乱粋€(gè)的。
應(yīng)用訪問(wèn)HDFS有很多方式。原生的,HDFS 提供了 FileSystem Java API 來(lái)給應(yīng)用調(diào)用。還提供了 C language wrapper for this Java API 和 REST API 。另外,還支持HTTP瀏覽器查看HDFS實(shí)例的文件。 通過(guò)使用 NFS gateway ,HDFS還可以掛載到客戶端作為本地文件系統(tǒng)的一部分。
HDFS的用戶數(shù)據(jù)是以文件和目錄的形式組織的。它提供了一個(gè)命令行接口 FS shell 來(lái)提供用戶交互。命令的語(yǔ)法類似于其他shell (比如:bash, csh)。如下是一些范例:
FS shell 的目標(biāo)是向依賴于腳本語(yǔ)言的應(yīng)用提供與存儲(chǔ)數(shù)據(jù)的交互。
DFSAdmin 命令用于管理HDFS集群。這些命令僅給HDFS管理員使用。如下范例:
如果啟用了回收站配置,那么文件被 FS Shell 移除時(shí)并不會(huì)立即從HDFS刪除。HDFS會(huì)將其移動(dòng)到回收站目錄(每個(gè)用戶都有回收站,位于 /user//.Trash )。只要文件還在回收站內(nèi),就可以快速恢復(fù)。
最近刪除的文件大多數(shù)被移動(dòng)到 current 回收站目錄 ( /user//.Trash/Current ),在配置周期內(nèi),HDFS給 current目錄內(nèi)的文件創(chuàng)建檢查點(diǎn) checkpoints (位于 /user//.Trash/ ) ,并刪除舊的檢查點(diǎn)。參考 expunge command of FS shell 獲取更多關(guān)于回收站檢查點(diǎn)的信息。
在回收站過(guò)期后,NameNode從HDFS命名空間刪除文件。刪除文件會(huì)將文件關(guān)聯(lián)的塊釋放。注意,在用戶刪除文件和HDFS增加free空間之間,會(huì)有一個(gè)明顯的延遲。
如下范例展示了FS Shell如何刪除文件。我們?cè)赿elete目錄下創(chuàng)建兩個(gè)文件(test1 & test2)
我們刪除文件 test1。如下命令顯示文件被移動(dòng)到回收站。
現(xiàn)在我們嘗試以skipTrash參數(shù)刪除文件,該參數(shù)將不將文件發(fā)送到回收站。文件將會(huì)從HDFS完全刪除。
我們檢查回收站,只有文件test1。
如上,文件test1進(jìn)了回收站,文件test2被永久刪除了。
當(dāng)縮減文件的復(fù)制因子時(shí),NameNode選擇可以被刪除的多余副本。下一個(gè)Heartbeat會(huì)通報(bào)此信息給DataNode。DataNode然后會(huì)刪除響應(yīng)的塊,相應(yīng)的剩余空間會(huì)顯示在集群內(nèi)。同樣,在setReplication API調(diào)用完成和剩余空間在集群顯示之間會(huì)有一個(gè)時(shí)間延遲。
Hadoop JavaDoc API .
關(guān)于hdfs與linux文件系統(tǒng)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)(cdcxhl.com)提供穩(wěn)定的云服務(wù)器,香港云服務(wù)器,BGP云服務(wù)器,雙線云服務(wù)器,高防云服務(wù)器,成都云服務(wù)器,服務(wù)器托管。精選鉅惠,歡迎咨詢:028-86922220。
新聞名稱:HDFS與Linux文件系統(tǒng)的比較分析(hdfs與linux文件系統(tǒng))
標(biāo)題URL:http://www.dlmjj.cn/article/dpsdjcj.html


咨詢
建站咨詢
