国产精品chinese,色综合天天综合精品网国产在线,成午夜免费视频在线观看,清纯女学生被强行糟蹋小说

    <td id="ojr13"><tr id="ojr13"><label id="ojr13"></label></tr></td>
        • <source id="ojr13"></source>
            <td id="ojr13"><ins id="ojr13"><label id="ojr13"></label></ins></td>

            Article / 文章中心

            HDFS 架構(gòu)

            發(fā)布時(shí)間:2021-12-07 點(diǎn)擊數(shù):719

            前段時(shí)間搭建了一套Hadoop集群的測(cè)試環(huán)境,因?yàn)榉?wù)器故障,廢了。這幾天閑來(lái)無(wú)事,想著把Storm用Yarn管理起來(lái),于是再來(lái)一遍,同時(shí)也梳理下Hadoop組件中的一些概念。所謂書(shū)讀百遍其義自見(jiàn),不熟的系統(tǒng)多搭幾遍,總會(huì)熟悉了,也就是所謂的刻意練習(xí)吧。


            先簡(jiǎn)單的說(shuō)下。


            Hadoop文件存儲(chǔ)的基礎(chǔ)是HDFS(Hadoop Distributed File System),HDFS的實(shí)現(xiàn)依賴(lài)于NameNode和DataNode,DataNode用來(lái)存儲(chǔ)具體數(shù)據(jù),NameNode用來(lái)管理多個(gè)DataNode中分別存儲(chǔ)的是什么。


            理解起來(lái)也不難,因?yàn)镠DFS是分布式的文件系統(tǒng),也就是有很多機(jī)器用來(lái)存儲(chǔ)數(shù)據(jù),一個(gè)大文件可能分布在多個(gè)機(jī)器上,也可能是一臺(tái)機(jī)器上,具體分布在哪些或哪個(gè)機(jī)器上,每塊數(shù)據(jù)塊的副本在哪,得需要一個(gè)總管來(lái)管理,這個(gè)總管就是NameNode,具體存儲(chǔ)機(jī)器的就是DataNode。


            簡(jiǎn)單的說(shuō)完了,接下來(lái)就復(fù)雜的說(shuō)。


            1. HDFS架構(gòu)

            HDFS是主/從架構(gòu),一個(gè)HDFS只有一個(gè)NameNode(這里的一個(gè)是指起作用的只有一個(gè),在NameNode的HA狀態(tài)下,也是只有一個(gè)NameNode起作用,其他的NameNode節(jié)點(diǎn)只是備份,家有千口,主事一人嘛)。這個(gè)NameNode管理整個(gè)文件系統(tǒng)的命名空間(The File System Namespace),并且調(diào)節(jié)客戶(hù)端對(duì)文件的訪問(wèn)。DataNode用來(lái)存儲(chǔ)數(shù)據(jù),還有一些DataNode用來(lái)管理連接到運(yùn)行節(jié)點(diǎn)的存儲(chǔ)。HDFS公開(kāi)文件系統(tǒng)的命名空間,允許用戶(hù)在文件系統(tǒng)中存儲(chǔ)數(shù)據(jù)。


            在HDFS內(nèi)部,一個(gè)文件被分割為一個(gè)或多個(gè)數(shù)據(jù)塊,這些數(shù)據(jù)塊存儲(chǔ)在一組DataNode上。NameNode負(fù)責(zé)文件系統(tǒng)的命名空間操作,比如對(duì)文件或文件夾執(zhí)行打開(kāi)、關(guān)閉,以及重命名操作,同時(shí),也負(fù)責(zé)將數(shù)據(jù)塊映射到DataNode上。DataNode負(fù)責(zé)向客戶(hù)端提供對(duì)文件系統(tǒng)的讀取和寫(xiě)入請(qǐng)求的處理。DataNode還能根據(jù)NameNode的指示,執(zhí)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制操作。


            image.png


            NameNode和DataNode通常運(yùn)行在普通商用服務(wù)器上(這里是針對(duì)小型機(jī)這種又貴很又特別貴的機(jī)器說(shuō)的),這些機(jī)器一般裝的是Linux。HDFS使用Java實(shí)現(xiàn)的,而且Java號(hào)稱(chēng)是一處編譯到處運(yùn)行,也就是只要有Java環(huán)境,就能運(yùn)行NameNode和DataNode。典型的部署方式是,一臺(tái)機(jī)器運(yùn)行NameNode,其他機(jī)器運(yùn)行DataNode,每臺(tái)機(jī)器一個(gè)進(jìn)程。(當(dāng)然也可能一臺(tái)機(jī)器上有多個(gè)DataNode,但是生產(chǎn)環(huán)境應(yīng)該不會(huì)有這種情況,畢竟沒(méi)有任何好處)


            HDFS的這種主從架構(gòu)保證了,所有的數(shù)據(jù)都會(huì)從NameNode經(jīng)過(guò),這樣也簡(jiǎn)化了系統(tǒng)的體系結(jié)構(gòu),NameNode就是老大,所有數(shù)據(jù)都經(jīng)過(guò)他。當(dāng)然老大也可能出現(xiàn)意外,就得需要其他HA的部署方式(找?guī)讉€(gè)小弟時(shí)刻準(zhǔn)備接替老大),這個(gè)后面再說(shuō)。


            2. 文件系統(tǒng)

            HDFS文件系統(tǒng)設(shè)計(jì)與傳統(tǒng)分層文件系統(tǒng)類(lèi)似,有文件夾,文件夾里可以有文件夾或文件??蛻?hù)端可以對(duì)這些文件夾或文件進(jìn)行操作,比如創(chuàng)建、刪除、移動(dòng)、重命名等。不過(guò)目前還不支持軟連接和硬連接,后面可能會(huì)支持。


            如前面所說(shuō),這個(gè)命名空間由NameNode維護(hù)。所有的文件/文件夾的名字、屬性、復(fù)制因子都由NameNode記錄。


            3. 數(shù)據(jù)復(fù)制

            HDFS設(shè)計(jì)用于在大型集群中存儲(chǔ)非常大的文件,它將每個(gè)文件存儲(chǔ)為一組數(shù)據(jù)塊塊中,除了最后一塊外,所有文件塊大小相同(默認(rèn)是64MB),HDFS通過(guò)復(fù)制數(shù)據(jù)塊塊進(jìn)行容錯(cuò),每個(gè)文件的數(shù)據(jù)塊大小、復(fù)制因子都是可配的??蛻?hù)端可以指定文件的副本數(shù),可以在創(chuàng)建時(shí)指定,也可以在之后修改。HDFS中的文件是一次寫(xiě)入的,并且在任何時(shí)候都有一個(gè)明確的作者。


            NameNode來(lái)管理所有數(shù)據(jù)塊復(fù)制操作,它定期與集群中每個(gè)DataNode進(jìn)行心跳和文件塊報(bào)告。收到心跳意味著DataNode正常運(yùn)行,文件塊報(bào)告是DataNode上所有文件塊的列表。


            image.png


            3.1 副本存儲(chǔ)

            副本存儲(chǔ)的位置對(duì)于HDFS的可靠性和性能是至關(guān)重要的,優(yōu)化副本存儲(chǔ)是HDFS與大多數(shù)其他分布式文件系統(tǒng)區(qū)分開(kāi)來(lái)的優(yōu)點(diǎn)之一,這是一個(gè)經(jīng)過(guò)大量調(diào)整和體驗(yàn)的功能。機(jī)架感知副本存儲(chǔ)策略的目的是提高數(shù)據(jù)可靠性、可用性和網(wǎng)絡(luò)帶寬的高利用率。目前的副本存儲(chǔ)策略是朝這個(gè)方向努力的第一步。實(shí)施這一政策的短期目標(biāo)是對(duì)生產(chǎn)系統(tǒng)進(jìn)行驗(yàn)證,更多的了解其行為,并為更加復(fù)雜的策略進(jìn)行測(cè)試和研究奠定基礎(chǔ)。


            大型的HDFS實(shí)例通常運(yùn)行在多個(gè)機(jī)架上,不同機(jī)架中的兩個(gè)節(jié)點(diǎn)之間通信必須通過(guò)交換機(jī)。通產(chǎn),同一機(jī)架上的機(jī)器之間的網(wǎng)絡(luò)速率會(huì)優(yōu)于不同機(jī)架間的速率。


            NameNode通過(guò)Hadoop 機(jī)架感知中介紹的方式確定每個(gè)DataNode所屬的機(jī)架ID。一個(gè)簡(jiǎn)單但不是最優(yōu)策略是將副本存儲(chǔ)在不同的機(jī)架上,這樣可以防止整個(gè)機(jī)架故障導(dǎo)致數(shù)據(jù)丟失,并允許讀取數(shù)據(jù)時(shí)使用多個(gè)機(jī)架的帶寬。該策略保證可以在集群中均勻分配副本,可以輕松平衡組件故障時(shí)的負(fù)載。但是,這種策略會(huì)因?yàn)樾枰獙⒏北緮?shù)據(jù)寫(xiě)到多個(gè)機(jī)架,而增加寫(xiě)入成本。


            常見(jiàn)情況中,復(fù)制因子是3,HDFS的副本存儲(chǔ)策略是將一個(gè)副本放置在當(dāng)前機(jī)架上的一個(gè)節(jié)點(diǎn)上,另一個(gè)位于另一個(gè)機(jī)架上的某個(gè)節(jié)點(diǎn)上,最后一個(gè)放置第二個(gè)機(jī)架上的另一個(gè)節(jié)點(diǎn)上。這種策略減少了機(jī)架間的通信,從而提高寫(xiě)入性能。機(jī)架故障的概率遠(yuǎn)小于節(jié)點(diǎn)故障的概率,這種策略不會(huì)影響數(shù)據(jù)可靠性和可用性。但是,它會(huì)降低讀取數(shù)據(jù)的網(wǎng)絡(luò)帶寬,因?yàn)閿?shù)據(jù)塊放置在兩個(gè)機(jī)架上,而不是三個(gè)。使用這種策略,副本不會(huì)均勻的分布在機(jī)架中。還有一種比較好的策略,就是三分之一的副本在一個(gè)節(jié)點(diǎn)上,三分之一的副本在另一個(gè)機(jī)架上,其余的均勻分布在其他機(jī)器上,這種方式可以改善寫(xiě)入策略,不會(huì)影響數(shù)據(jù)可靠性或讀取性能。不過(guò)這種方式還在開(kāi)發(fā)中。


            3.2 副本選擇

            為了最大限度的減少全局帶寬消耗和讀取延遲,HDFS嘗試讓讀取器讀取最接近的副本。如果在同一機(jī)架上存在副本,就優(yōu)先讀取該副本。如果HDFS跨越多個(gè)數(shù)據(jù)中心,則優(yōu)先讀取當(dāng)前數(shù)據(jù)中心的副本。


            3.3 安全模式(SafeMode)

            在啟動(dòng)的時(shí)候,NameNode進(jìn)入一個(gè)成為安全模式的特殊狀態(tài)。NameNode處于安全模式時(shí),不會(huì)復(fù)制數(shù)據(jù)塊。NameNode從DataNode節(jié)點(diǎn)接收心跳和數(shù)據(jù)塊報(bào)告,數(shù)據(jù)塊報(bào)告包含DataNode存儲(chǔ)的數(shù)據(jù)塊列表信息。每個(gè)數(shù)據(jù)塊有指定的最小數(shù)量副本。當(dāng)使用NameNode檢入該數(shù)據(jù)塊的最小副本數(shù)量時(shí),數(shù)據(jù)塊被認(rèn)為是安全復(fù)制的。在NameNode檢查數(shù)據(jù)塊的安全復(fù)制結(jié)束后(可配的時(shí)間段,再加上30秒),NameNode退出安全模式。然后它開(kāi)始檢查是否有少于指定數(shù)量的數(shù)據(jù)塊列表,將這些數(shù)據(jù)塊復(fù)制到其他DataNode。


            4. 文件系統(tǒng)元數(shù)據(jù)

            HDFS由NameNode存儲(chǔ)命名空間信息,NameNode使用名為EditLog的事務(wù)日志持續(xù)記錄文件系統(tǒng)元數(shù)據(jù)發(fā)生的每個(gè)更改。比如,在HDFS中創(chuàng)建一個(gè)新的文件會(huì)導(dǎo)致NameNode在EditLog中插入一條記錄,用于記錄該操作。同樣的,修改文件的復(fù)制因子也會(huì)新增一條記錄。NameNode使用本機(jī)文件系統(tǒng)存儲(chǔ)EditLog文件。整個(gè)文件系統(tǒng)命名空間(包括塊映射文件和文件系統(tǒng)屬性等信息)存儲(chǔ)在一個(gè)名為FsImage的文件中,該文件也是存儲(chǔ)在NameNode所在的本機(jī)文件系統(tǒng)中。


            NameNode在內(nèi)存中存儲(chǔ)整個(gè)文件系統(tǒng)的命名空間和文件數(shù)據(jù)塊映射關(guān)系,這個(gè)元數(shù)據(jù)存儲(chǔ)模塊設(shè)計(jì)為緊湊存儲(chǔ),可以在4GB內(nèi)存的NameNode中可以支持大量的文件和文件夾。在NameNode啟動(dòng)時(shí),它從磁盤(pán)讀取FsImage和EditLog,將所有從EditLog的事務(wù)應(yīng)用到FsImage的內(nèi)存表示中,并將這個(gè)新版本的FsImage文件中。該操作會(huì)截?cái)嗯f的EditLog,因?yàn)槠渲械氖聞?wù)操作已經(jīng)應(yīng)用到FsImage文件中。這個(gè)過(guò)程成為檢查點(diǎn)(checkpoint)。在當(dāng)前版本中,檢查點(diǎn)操作只會(huì)發(fā)生在NameNode啟動(dòng)時(shí),正在增加定期檢查點(diǎn)檢查操作。


            DataNode將HDFS數(shù)據(jù)存儲(chǔ)在其本地文件系統(tǒng)的文件中,DataNode不知道HDFS的文件數(shù)據(jù),它只是將HDFS文件數(shù)據(jù)的數(shù)據(jù)塊存儲(chǔ)在本地文件系統(tǒng)中的單獨(dú)文件中。DataNode不會(huì)存儲(chǔ)同一文件夾下的所有文件,相反,它會(huì)確定每個(gè)文件夾的最佳文件數(shù)量,并適當(dāng)?shù)膭?chuàng)建子文件夾。在同一文件夾中創(chuàng)建所有本地文件是不合適的,因?yàn)楸镜匚募到y(tǒng)可能無(wú)法在單個(gè)文件夾中有效支持存儲(chǔ)大量文件。當(dāng)DataNode啟動(dòng)時(shí),它會(huì)掃描其本地文件系統(tǒng),生產(chǎn)與每個(gè)文件對(duì)應(yīng)的所有HDFS數(shù)據(jù)塊數(shù)控報(bào)告,并發(fā)送給NameNode。


            5. 通信協(xié)議

            所有HDFS的通信協(xié)議是基于TCP/IP協(xié)議的??蛻?hù)端通過(guò)客戶(hù)端協(xié)議與NameNode建立連接,并通信。DataNode通過(guò)DataNode協(xié)議與NameNode通信。NameNode從不發(fā)起通信請(qǐng)求,它只響應(yīng)客戶(hù)端和DataNode發(fā)出的請(qǐng)求。


            6. 穩(wěn)健性

            HDFS的主要目標(biāo)是可靠性存儲(chǔ),即使發(fā)生故障,也能夠很好的支撐存儲(chǔ)。比較常見(jiàn)的故障類(lèi)型有:NameNode故障、DataNode故障、網(wǎng)絡(luò)分區(qū)異常。


            6.1 數(shù)據(jù)磁盤(pán)故障,心跳和重新復(fù)制

            每個(gè)DataNode會(huì)定期向NameNode發(fā)送心跳請(qǐng)求。網(wǎng)絡(luò)分區(qū)可能導(dǎo)致一部分DataNode與NameNode失去連接,NameNode通過(guò)心跳檢測(cè)這種情況,如果發(fā)現(xiàn)長(zhǎng)時(shí)間沒(méi)有心跳的DataNode,則標(biāo)記為丟棄,而且不再轉(zhuǎn)發(fā)任何新的IO請(qǐng)求,這些DataNode的數(shù)據(jù)也不在作用于HDFS。DataNode的死亡可能導(dǎo)致某些數(shù)據(jù)塊的復(fù)制因子低于設(shè)定值,NameNode會(huì)不斷掃描哪些數(shù)據(jù)塊需要復(fù)制,并在必要的時(shí)候進(jìn)行復(fù)制。重復(fù)復(fù)制可能是因?yàn)镈ataNode不可用、副本文件損壞、DataNode硬盤(pán)損壞,或者文件復(fù)制因子增加。


            6.2 集群重新平衡

            HDFS架構(gòu)與數(shù)據(jù)重新平衡方案兼容,如果DataNode上的可用空間低于閥值,數(shù)據(jù)會(huì)從一個(gè)DataNode移動(dòng)到另一個(gè)DataNode。在對(duì)特定文件的需求突然增加的情況下,可能會(huì)動(dòng)態(tài)創(chuàng)建其他副本來(lái)重新平衡集群中的數(shù)據(jù)。(這種類(lèi)型的數(shù)據(jù)重新平衡還未實(shí)現(xiàn))。


            6.3 數(shù)據(jù)的完整性

            DataNode存儲(chǔ)的數(shù)據(jù)塊可能會(huì)被破壞,這可能是因?yàn)榇鎯?chǔ)設(shè)備故障、網(wǎng)絡(luò)故障或軟件錯(cuò)誤導(dǎo)致的。HDFS客戶(hù)端會(huì)對(duì)HDFS文件內(nèi)容進(jìn)行校驗(yàn)和檢查。當(dāng)客戶(hù)端創(chuàng)建一個(gè)HDFS文件時(shí),它會(huì)計(jì)算文件的每個(gè)塊的檢驗(yàn)碼,然后將該校驗(yàn)碼存儲(chǔ)在同一HDFS命名空間中的隱藏文件中。當(dāng)客戶(hù)端操作文件時(shí),會(huì)將從DataNode接收到的數(shù)據(jù)與存儲(chǔ)的校驗(yàn)文件進(jìn)行校驗(yàn)和匹配。如果沒(méi)有成功,客戶(hù)端會(huì)從該數(shù)據(jù)塊的其他副本讀取數(shù)據(jù)。


            6.4 元數(shù)據(jù)磁盤(pán)故障

            FsImage和EditLog是HDFS的核心數(shù)據(jù)結(jié)構(gòu),如果這些文件被損壞,可能導(dǎo)致HDFS實(shí)例不可用。因此,NameNode可以配置維護(hù)FsImage和EditLog的多個(gè)副本。對(duì)FsImage或EditLog的任何更新,這些副本也跟著更新。當(dāng)時(shí)這樣可能會(huì)導(dǎo)致NameNode的TPS。但是,這種性能的降低是可以接受的,因?yàn)榧词笻DFS應(yīng)用程序本質(zhì)上是數(shù)據(jù)密集型,但卻不是元數(shù)據(jù)密集型的。當(dāng)NameNode重啟時(shí),它會(huì)選擇最新的FsImage和EditLog使用。


            比較常見(jiàn)的多備份存儲(chǔ)是一份存在本地文件系統(tǒng)中,一份存儲(chǔ)在遠(yuǎn)程網(wǎng)絡(luò)文件系統(tǒng)中。


            因?yàn)镹ameNode單點(diǎn)的,所以可能會(huì)出現(xiàn)HDFS集群的單點(diǎn)故障,需要手動(dòng)干預(yù)。這個(gè)時(shí)候就需要NameNode的HA方案,這個(gè)后面再說(shuō)。


            6.5 Secondary NameNode

            前面說(shuō)過(guò),NameNode是單點(diǎn)的,如果NameNode宕機(jī),系統(tǒng)中的文件會(huì)丟失,所以Hadoop提供還提供了一種機(jī)制:Secondary NameNode。


            Secondary NameNode比較有意思,它并不能直接作為NameNode使用,它只是定期將FsImage和EditLog合并,防止EditLog文件過(guò)大。通常Secondary NameNode也是運(yùn)行在單獨(dú)的機(jī)器上,因?yàn)槿罩竞喜⒉僮餍枰加么罅康膬?nèi)存和CPU。Secondary NameNode會(huì)保存合并后的元數(shù)據(jù),一旦NameNode宕機(jī),而且元數(shù)據(jù)不可用,就可以使用Secondary NameNode備份的數(shù)據(jù)。


            但是,Secondary NameNode總是落后與NameNode,所以在NameNode宕機(jī)后,數(shù)據(jù)丟失是不可避免的。一般這種情況就會(huì)使用元數(shù)據(jù)的遠(yuǎn)程備份與Secondary NameNode中的合并數(shù)據(jù)共同作為NameNode的元數(shù)據(jù)文件。


            6.6 快照

            快照功能支持在特定時(shí)刻存儲(chǔ)數(shù)據(jù)副本,可以在出現(xiàn)數(shù)據(jù)損壞的情況下,將HDFS回滾到之前的時(shí)間點(diǎn)。(目前還不支持,之后會(huì)增加)


            7 數(shù)據(jù)

            7.1 數(shù)據(jù)塊

            HDFS是為了存儲(chǔ)大文件的。與HDFS兼容的程序是處理大型數(shù)據(jù)集的,這些應(yīng)用通常是一次寫(xiě)入,多次讀取,并且要求在讀取速率上滿足要求。HDFS恰好滿足“一次寫(xiě)入、多次讀取”的要求。在HDFS中,數(shù)據(jù)塊大小默認(rèn)是64MB。所以,大文件在HDFS內(nèi)存切成64MB的數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊會(huì)存儲(chǔ)在不同的DataNode上。


            7.2 階段

            客戶(hù)端創(chuàng)建文件的請(qǐng)求不會(huì)立即到達(dá)NameNode。一開(kāi)始,客戶(hù)端將文件緩存到臨時(shí)文件中,寫(xiě)入操作透明的重定向到該臨時(shí)文件中。當(dāng)臨時(shí)文件超過(guò)一個(gè)HDFS數(shù)據(jù)塊的大小時(shí),客戶(hù)端將連接NameNode,NameNode會(huì)把文件名插入到文件系統(tǒng)中,為其分配一個(gè)數(shù)據(jù)塊。NameNode使用DataNode和目標(biāo)數(shù)據(jù)塊響應(yīng)客戶(hù)端請(qǐng)求。然后客戶(hù)端將數(shù)據(jù)塊信息從本地臨時(shí)文件刷新到指定的DataNode中。關(guān)閉文件時(shí),臨時(shí)文件中剩余的未刷新數(shù)據(jù)將傳輸?shù)紻ataNode,然后,客戶(hù)端通知NameNode文件關(guān)閉,此時(shí),NameNode將文件創(chuàng)建操作提交到持久存儲(chǔ)。如果NameNode在文件關(guān)閉前宕機(jī), 則文件丟失。


            HDFS采用上述方式是經(jīng)過(guò)仔細(xì)考慮的,這些應(yīng)用需要流式寫(xiě)入文件,如果客戶(hù)端寫(xiě)入遠(yuǎn)程文件時(shí)沒(méi)有使用客戶(hù)端緩沖,網(wǎng)速和網(wǎng)絡(luò)情況將會(huì)大大影響吞吐率。這種做法也是有先例的,早起的分布式文件系統(tǒng)也是采用這種方式,比如ASF。POSIX要求已經(jīng)放寬,以便實(shí)現(xiàn)高性能的數(shù)據(jù)上傳。


            7.3 復(fù)制流水線

            如上所述,當(dāng)客戶(hù)端數(shù)據(jù)寫(xiě)入HDFS時(shí),首先將數(shù)據(jù)寫(xiě)入本地緩存文件。如果HDFS文件的復(fù)制因子是3,當(dāng)本地緩存文件大小累積到數(shù)據(jù)塊大小時(shí),客戶(hù)端從NameNode查詢(xún)寫(xiě)入副本的DataNode列表。然后,客戶(hù)端將數(shù)據(jù)塊刷新到第一個(gè)DataNode中,這個(gè)DataNode以小數(shù)據(jù)(4KB)接收數(shù)據(jù),將數(shù)據(jù)寫(xiě)入本地存儲(chǔ)庫(kù),并將該部分?jǐn)?shù)據(jù)傳輸?shù)降诙€(gè)DataNode,第二個(gè)DataNode存儲(chǔ)后,將數(shù)據(jù)發(fā)送給第三個(gè)DataNode。因此,DataNode可以在流水線中接收來(lái)自前一個(gè)的數(shù)據(jù),同時(shí)將數(shù)據(jù)發(fā)送給流水線的下一個(gè),以此類(lèi)推。


            8 易使用

            可以以多種方式訪問(wèn)HDFS,HDFS提供了一個(gè)Java API,C語(yǔ)言包裝器也可用。也可以使用瀏覽器瀏覽HDFS實(shí)例文件。(目前正在通過(guò)使用WebDAV協(xié)議公開(kāi)HDFS)。


            8.1 FS Shell

            HDFS允許以文件和文件夾的形式組織數(shù)據(jù),提供了一個(gè)名為“FS shell”的命令行界面,可讓用戶(hù)與HDFS中的數(shù)據(jù)進(jìn)行交互。該命令集語(yǔ)法類(lèi)似與用戶(hù)熟悉的其他shell(比如bash,csh)。以下是一些實(shí)例:


            操作 命令

            創(chuàng)建/foodir文件夾 bin/hadoop dfs -mkdir /foodir

            刪除/foodir文件夾 bin/hadoop fs -rm -R /foodir

            查看文件/foodir/myfile.txt的內(nèi)容 bin/hadoop dfs -cat /foodir/myfile.txt

            FS shell針對(duì)需要腳本語(yǔ)言與存儲(chǔ)數(shù)據(jù)進(jìn)行交互的應(yīng)用場(chǎng)景。


            8.2 DFSAdmin

            DFSAdmin命令集用于管理HDFS集群,這些應(yīng)該是由HDFS管理員使用的命令,以下是一些實(shí)例:


            操作 命令

            集群置為安全模式 bin/hadoop dfsadmin -safemode enter

            生成DataNode列表 bin/hadoop dfsadmin -report

            啟動(dòng)或停止DataNode bin/hadoop dfsadmin -refreshNodes

            8.3 瀏覽器接口

            典型的HDFS安裝會(huì)配置web服務(wù)器,以配置TCP端口公開(kāi)HDFS命名空間,這允許用戶(hù)瀏覽HDFS命名空間,并使用web瀏覽器查看文件內(nèi)容。


            9 空間復(fù)用

            9.1 文件刪除

            如果回收站功能可用,通過(guò)FS Shell刪除的文件不會(huì)立馬刪除,而是移動(dòng)到回收站中(每個(gè)用戶(hù)的回收文件夾不同,是在各自的用戶(hù)目錄的.Trash中,即/user//.Trash)。只要文件還保留在回收站中,就可以很快恢復(fù)。


            大多數(shù)的刪除文件會(huì)移動(dòng)到回收站的current目錄(即/user//.Trash/Current)中,在配置的時(shí)間內(nèi),HDFS創(chuàng)建會(huì)創(chuàng)建檢查點(diǎn)(/user//.Trash/),并在舊的檢查點(diǎn)過(guò)期后刪除。具體可以查看刪除操作。


            文件在回收站的時(shí)間過(guò)期后,NameNode會(huì)從HDFS命名空間中刪除文件,同時(shí),釋放相關(guān)聯(lián)的數(shù)據(jù)塊空間。


            文件刪除后,客戶(hù)端可以取消刪除??梢酝ㄟ^(guò)瀏覽/trash文件夾,查找文件。/trash文件夾中包含被刪除文件的最新副本。目前HDFS會(huì)從/trash刪除超過(guò)6小時(shí)的文件。(/trash類(lèi)似于文件系統(tǒng)中的回收站、垃圾桶等功能)。


            下面是使用FS Shell刪除文件的操作:


            在當(dāng)前目錄中創(chuàng)建兩個(gè)文件:test1、test2


            $ hadoop fs -mkdir -p delete/test1 $ hadoop fs -mkdir -p delete/test2 $ hadoop fs -ls delete/ Found 2 items drwxr-xr-x   - hadoop hadoop          0 2015-05-08 12:39 delete/test1 drwxr-xr-x   - hadoop hadoop          0 2015-05-08 12:40 delete/test2

            刪除test1:


            $ hadoop fs -rm -r delete/test1 Moved: hdfs://localhost:8020/user/hadoop/delete/test1 to trash at: hdfs://localhost:8020/user/hadoop/.Trash/Current

            使用skipTrash選項(xiàng)刪除test2:

            $ hadoop fs -rm -r -skipTrash delete/test2 Deleted delete/test2

            查看回收站中的文件只有test1:


            $ hadoop fs -ls .Trash/Current/user/hadoop/delete/ Found 1 items\ drwxr-xr-x   - hadoop hadoop          0 2015-05-08 12:39 .Trash/Current/user/hadoop/delete/test1

            也就是test1進(jìn)入回收站,test2之間刪除了。


            9.2 減少?gòu)?fù)制因子

            當(dāng)文件的復(fù)制因子減少后,NameNode選擇可以刪除的多余副本,在下一個(gè)心跳時(shí)將信息傳輸給DataNode,DataNode刪除相應(yīng)的數(shù)據(jù)塊,并釋放空間。調(diào)用setReplication API和集群使用可用空間可能會(huì)有延遲。