HDFS詳解

認識HDFS

HDFS的特點:

高容錯性
高吞吐量
故障的檢測和自動快速恢復
流式的數(shù)據(jù)訪問
大數(shù)據(jù)集
一次寫入,多次讀寫

HDFS不適用的場景

不支持大量小文件的存儲
不適合隨機讀寫
不適合隨意修改

HDFS的組成

hdfs是一個主從結(jié)構(gòu)的體系,一個HDFS的集群由以下部分組成:
NameNode(名字節(jié)點):一個用來管理文件的名字空間和調(diào)節(jié)客戶端訪問文件的主服務器
DataNode(數(shù)據(jù)節(jié)點):一個或多個,用來管理存儲

HDFS的數(shù)據(jù)復制

HDFS能可靠的在大量集群中存儲非常大量的文件,它以塊序列的形式存儲每一個文件,文件中除了最后一個塊的其他塊都是相同的大小.屬于文件的塊為了故障容錯而被復制.塊的大小和復制數(shù)可以為每個文件配置.HDFS中的文件都是嚴格地要求任何時候只有一個寫操作.

名字節(jié)點(NameNode)來做所有的塊復制,它周期性地接收來自集群中數(shù)據(jù)節(jié)點(DataNode)的心跳和塊報告.一個心跳的收條表示這個數(shù)據(jù)節(jié)點是健康的,是渴望服務數(shù)據(jù)的.一個塊報告包括該數(shù)據(jù)節(jié)點上的所有塊列表.復制塊放置位置的選擇嚴重影響HDFS的可靠性和性能浙巫,因此機架的復制布局目的就是提高數(shù)據(jù)的可靠性搂漠、可用性和網(wǎng)絡帶寬的利用率

默認復制數(shù)為3的情況下芝发,HDFS放置方式是將第一個放在本地節(jié)點,將第二個復制放到本地機架上的另一個節(jié)點上霞掺,而將第三個復制到不同機架上的節(jié)點秘蛇。這種方式減少了機架內(nèi)的寫流量备燃,提高了寫的性能.機架的失效機會遠小于機器失效的機會

在復制數(shù)為3的情況下碉克,是備份在不同的機架上,而不是三個機架.文件的復制不是均勻地分布在機架上.1/3在同一個節(jié)點上,第二個1/3復制在同一個機架上,另外1/3是均勻地分布在其他機架上.

可在hdfs-site.xml中修改dfs.replication的個數(shù)即修改復制個數(shù)并齐,這種方案參數(shù)其實只在文件被寫入dfs時起作用,雖然更改了配置文件,但是不會改變之前寫入的文件的備份數(shù)漏麦,而且需要重啟HDFS系統(tǒng)才能生效

hadoop fs -setrep -R 1 /:這種方式可以改變整個HDFS里面的備份數(shù),不需要重啟HDFS系統(tǒng)

數(shù)據(jù)塊的復制是以pipeline的方式進行的

HDFS復制的選擇

HDFS嘗試滿足一個讀操作來自離它最近的復制况褪。如果在讀節(jié)點的同一個機架上有這個復制,則直接讀.如果HDFS集群是跨越多個數(shù)據(jù)的中心,那么本地數(shù)據(jù)中心的復制優(yōu)先于遠程的復制

HDFS的安全模式

在啟動的時候,NameNode會進入一個特殊的狀態(tài)叫做安全模式撕贞。
安全模式是不發(fā)生文件塊的復制的
NameNode接受DataNode的心跳和數(shù)據(jù)塊報告,一個塊報告包括數(shù)據(jù)節(jié)點向名字節(jié)點報告數(shù)據(jù)塊的列表
每一個塊有一個特定的最小復制數(shù),當NameNode檢查這個塊已經(jīng)大于最小的復制數(shù),就被認為是安全的復制了.當達到配置的塊安全復制比例時,NameNode就退出安全模式.它將檢測數(shù)據(jù)塊的列表,將小于特定的復制數(shù)的塊復制到其他的數(shù)據(jù)節(jié)點

HDFS的元數(shù)據(jù)持久化

HDFS的名字空間是由NameNode來存儲的。
NameNode用事務日志(EditsLog)來持久化每一個對文件系統(tǒng)的元數(shù)據(jù)的改變,即對元數(shù)據(jù)的每一步操作都會被記錄到EditsLog中.NameNode在本地文件系統(tǒng)中用一個文件來存儲這個EditsLog
完整的文件系統(tǒng)名字空間测垛、文件塊的映射和文件系統(tǒng)的配置都存在一個叫Fsimage的文件中,Fsimage也是在NameNode的本地文件系統(tǒng)中
CheckPoint(檢查點):當NameNode啟動的時候,它會從磁盤中讀取Fsimage和EditsLog文件,然后將新的元數(shù)據(jù)刷新到本地磁盤中,生成一個新的Fsimage文件,至此EditsLog文件已經(jīng)被處理并持久化的Fsimage中
任何對Fsimage和EditsLog的更新都會同步地更新每一個副本

HDFS架構(gòu)

HDFS架構(gòu)是一個典型的主從架構(gòu),包括一個NameNode(主節(jié)點)和多個DataNode(從節(jié)點)
架構(gòu)圖如下圖所示:

Paste_Image.png

NameNode是整個文件系統(tǒng)的管理節(jié)點,它負責文件系統(tǒng)名字空間(NameSpace)的管理與維護,同時負責客戶端文件操作的控制以及具體存儲任務的管理與分配
DataNode提供了真實文件數(shù)據(jù)的存儲服務

數(shù)據(jù)塊

Hadoop1.X默認的數(shù)據(jù)塊大小是64MB
Hadoop2.X默認的數(shù)據(jù)塊大小是128MB
HDFS上的文件系統(tǒng)也被劃分為塊大小的多個分塊(Chunk)作為獨立的存儲單元.但與其他文件系統(tǒng)不同的是,HDFS中小于一個塊大小的文件不會占據(jù)整個塊的空間

為什么HDFS默認的Block為128MB(64MB)?

HDFS的塊之所以這么大,主要是為了把尋道(Seek)時間最小化.如果一個塊足夠大,從硬盤傳輸數(shù)據(jù)的時間將遠遠大于尋找塊的起始位置的時間捏膨,這樣就使HDFS的數(shù)據(jù)傳輸速度和硬盤的傳輸速度更加接近.

分布式文件系統(tǒng)中的塊進行抽象帶來的好處:

一個文件系統(tǒng)的大小可以大于網(wǎng)絡中任意一個磁盤的容量
使用塊抽象而非整個文件作為存儲單元,大大簡化了存儲子系統(tǒng)的設計.

NameNode

NameNode是管理者,一個Hadoop集群有一個NameNode節(jié)點,是一個通常在HDFS實例中的單獨機器上運行的軟件.它負責管理文件系統(tǒng)名字空間和控制外部客戶機的訪問

NameNode決定是否將文件映射到DataNode的復制塊上.
實際的I/O事務并沒有經(jīng)過NameNode,只有表示DataNode和塊的文件映射的元數(shù)據(jù)經(jīng)過NameNode。當外部客戶機發(fā)送請求要求創(chuàng)建文件時,NameNode會以塊標識和該塊的第一個副本的DataNode IP地址作為響應.這個NameNode還會通知其他將要接收該塊的副本的DataNode

NameNode主要功能如下:

1:NameNode提供名稱查詢服務,它是一個Jetty服務器
2:NameNode保存metadata信息.具體包括:文件owership和permissons;文件包含哪些塊,Block保存在哪個DataNode(由DataNode啟動時上報)
3:NameNode的metadata信息在啟動后會加載在內(nèi)存

DataNode

Hadoop集群中包含一個NameNode和大量的DataNode,DataNode通常以機架的形式組織,機架通過一個交換機將所有系統(tǒng)連接起來

DataNode響應來自HDFS客戶機的讀寫請求,它們還響應來自NameNode的創(chuàng)建食侮、刪除和復制塊的命令

DataNode的功能如下:
1:保存Block号涯,每一個塊對應一個元數(shù)據(jù)信息文件目胡。這個文件主要描述這個塊屬于哪個文件,第幾個塊等信息
2:啟動DataNode線程的時候會向NameNode匯報Block信息
3:通過向NameNode發(fā)送心跳保持其聯(lián)系(3秒一次),如果NameNode10分鐘沒有收到DataNode的心跳,則認為其已經(jīng)lost,并將其上的Block復制到其他DataNode

SecondaryNameNode

SecondaryNameNode(輔助元數(shù)據(jù)節(jié)點),會周期性地將EditsLog文件中記錄對HDFS的操作合并到一個Fsimage中文件中,然后清空EditsLog文件.NameNode的重啟會加載最新的一個Fsimage文件,并重新創(chuàng)建一個EditsLog文件來記錄HDFS操作,由于EditsLog中記錄的是從上一次Fsimage以后到現(xiàn)在的操作列表,所以會比較小

如果沒有SecondaryNameNode這個周期性的合并過程,當每次重啟NameNode的時候,就會花費很長的時間,而這樣周期性地合并就能減少重啟的時間,同時也能保證HDFS系統(tǒng)的完整性

Paste_Image.png

SecondaryNameNode合并Fsimage和EditsLog文件過程如下:

1:文件系統(tǒng)客戶端進行寫操作時,首先會把它記錄在EditsLog中
2:NameNode在內(nèi)存中保存了文件系統(tǒng)的元數(shù)據(jù)信息.在記錄修改日志后,NameNode修改內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)
3:每次的寫操作成功之前,修改日志都會同步(Sync)到文件系統(tǒng)中
4:Fsimage文件即名字空間映像文件,是內(nèi)存中的元數(shù)據(jù)在硬盤上的CheckPoint,它是一種序列化的格式,并不能夠在硬盤上直接修改
5:當NameNode失敗時,最新CheckPoint的元數(shù)據(jù)信息從Fsimage加載到內(nèi)存中,然后逐一重新執(zhí)行修改日志后的操作
6:SecondaryNameNode就是用來幫助NameNode將內(nèi)存中的元數(shù)據(jù)信息CheckPoint到硬盤上的.

CheckPoint過程如下:

1:SecondaryNameNode通知NameNode生成新的EditsLog,以后的日志都寫到新的日志文件中
2:SecondaryNameNode用Http Get從NameNode獲得Fsimage文件以及舊的日志文件
3:SecondaryNameNode將Fsimage文件加載到內(nèi)存中,并執(zhí)行日志文件中的操作,然后生成新的Fsimage文件
4:SecondaryNameNode將新的Fsimage文件用Http Post傳回NameNode
5:NameNode可以將舊的Fsimage以及舊的EditLog,換成新的Fsimage文件和新的EditLog(第一步生成的),然后更新fstime文件,寫入此次CheckPoint的時間
6:這樣NameNode中的Fsimage文件保存了最新的CheckPoint的元數(shù)據(jù)信息,日志文件也重新開始诚隙,不會變得很大了.

SecondaryNameNode會周期性地將EditsLog文件進行合并,合并前提條件如下:

EditsLog文件到達某一閥值時對其進行合并(默認為64MB,當文件大小超過64MB,就會觸發(fā)EditsLog與Fsimage文件的合并讶隐,修改core-site.xml配置文件中的fs.checkpoint.period選項)

每隔一段時間對其合并(默認為1小時合并一次,修改core-site.xml配置文件中的fs.checkpoint.size)

機架感知

默認情況下,Hadoop的機架感知是沒有啟用的.所以久又,通常情況下,Hadoop集群的HDFS在選擇機器的時候是隨機選擇的.

啟用Hadoop機架感知功能,配置非常簡單,在NameNode所在機器 的hadoop-site.xml文件中配置一個選項
<property>
<name>topology.script.file.name</name>
<value>/path/to/script</value>
</property>

HDFS的RPC機制

一般我們所了解的RPC(Remote Procedure Call,遠程過程調(diào)用)機制都要面對兩個問題:
1對象調(diào)用方式;
2序列/反序列化機制
但Hadoop實現(xiàn)了自己簡單的RPC組件,依賴Hadoop Writable類型的支持
Hadoop Writable接口要求每個實現(xiàn)類都要確保將本類的對象正確序列化(writeObject)與反序列化(readObject)巫延。因此,Hadoop RPC使用java動態(tài)代理與反射實現(xiàn)對象調(diào)用方式

Paste_Image.png

RPC的實現(xiàn)流程

簡單的說,Hadoop RPC = 動態(tài)代理+定制的二進制流

實現(xiàn)流程如下:
遠程的對象擁有固定的接口,這個接口用戶也是可見的,只是真正的實現(xiàn)(Object)只在服務端.用戶如果想使用哪個實現(xiàn),調(diào)用過程是:
先根據(jù)那個接口動態(tài)代理生成一個代理對象,調(diào)用這個代理對象的時候,用戶的調(diào)用請求被RPC捕捉到,然后包裝成調(diào)用請求,序列化成數(shù)據(jù)流發(fā)送到服務端地消;服務端從數(shù)據(jù)流中解析出調(diào)用請求,然后根據(jù)用戶所希望調(diào)用的接口炉峰,調(diào)用真正的實現(xiàn)對象,再把調(diào)用結(jié)果返回給客戶端

RPC的實體模型

注意:用戶在調(diào)用代理對象時RPC是怎樣攔截這次調(diào)用請求的?

創(chuàng)建代理對象時需要為它關聯(lián)一個InvocationHandler,對代理對象的每次調(diào)用都會進入綁定的InvocationHandler中,RPC就從這里獲取用戶的請求

Listener:監(jiān)聽RPC Server的端口,如果客戶端有連接請求到達,它就接收連接姥芥,然后把連接轉(zhuǎn)發(fā)到某個Reader纫版,讓Reader讀取那個連接的數(shù)據(jù)。如果有多個Reader婆廊,當有新連接過來時,就在這些Reader間順序分發(fā)巫橄。注意Hadoop0.21版本在支持多Reader時有個bug(JIRA),如果有Reader在Server運行期間沒有被使用淘邻,Server進程不能正常關閉

Reader:從某個客戶端連接中讀取數(shù)據(jù)流,把它轉(zhuǎn)化成調(diào)用對象(Call),然后放到調(diào)用隊列(call queue)里

Handler:真正做事的實體,它從調(diào)用隊列中獲取調(diào)用信息,然后反射調(diào)用真正的對象,得到結(jié)果,再把此次調(diào)用放到響應隊列(response queue)里

>Responder:不斷地檢查響應隊列中是否有調(diào)用信息,如果有湘换,就把調(diào)用的結(jié)果返回給客戶端
Paste_Image.png

HDFS的文件讀取

Paste_Image.png

文件讀取的流程如下:

    1:使用HDFS提供的客戶度開發(fā)庫Client宾舅,向遠程的NameNode發(fā)起RPC請求
    2:NameNode會根據(jù)情況返回文件的部分或者全部Block列表,對于每個Block,NameNode都會返回有該Block副本的DataNode地址
    3:客戶端開發(fā)庫Client會選取離客戶端最接近的DataNode來讀取Block,如果客戶端本身就是DataNode彩倚,將從本地直接獲取數(shù)據(jù)
    4:讀取完當前Block的數(shù)據(jù)后,關閉與當前的DataNode連接筹我,并為讀取下一個Block尋找最佳的DataNode
    5:讀取完列表的Block后,且文件讀取還沒有結(jié)束,客戶端開發(fā)庫會繼續(xù)向NameNode獲取下一批Block列表
    6:讀取完一個Block都會進行CheckSum驗證,如果讀取DataNode時會出現(xiàn)錯誤,客戶端會通知NameNode帆离,然后從下一個擁有該Block復制的DataNode繼續(xù)讀

HDFS的文件寫入

Paste_Image.png

寫入文件的過程比讀取復雜,步驟如下:

  1:使用HDFS提供的客戶端開發(fā)庫Client蔬蕊,向遠程的NameNode發(fā)起RPC請求
  2:NameNode會檢查要創(chuàng)建的文件是否已經(jīng)存在,創(chuàng)建者是否有權限進行操作,成功后會為文件創(chuàng)建一個記錄,否則會讓客戶端拋出異常
  3:當客戶端開始寫入文件的時候,開發(fā)庫會將文件切分多個packet,并在內(nèi)部以數(shù)據(jù)隊列(data queue)的形式管理這些packet盯质,并向NameNode申請新的Block袁串,獲取用來存儲replicas的合適的DataNode列表,列表的大小根據(jù)在NameNode中對replication的設置而定
  4:開始以管道(pipeline)的形式將Packet寫入所有的replicas中呼巷。開發(fā)庫把packet以流的方式寫入第一個DataNode囱修,該DataNode把packet存儲之后,再把器傳遞給在此管道中的下一個DataNode,直到最后一個DataNode,這種寫數(shù)據(jù)的方式呈流水線的形式
  5:最后一個DataNode成功存儲之后會返回一個ack packet,在管道里傳遞給客戶端,在客戶端的開發(fā)庫內(nèi)部維護著ack queue王悍,成功收到DataNode返回的ack packet后會從ack queue移除相應的packet
  6: 如果傳輸過程中破镰,有某個DataNode出現(xiàn)了故障,當前的管道會被關閉,出現(xiàn)故障的DataNode會從當前的管道中移除,剩余的Block會繼續(xù)剩下的DataNode中繼續(xù)以管道的形式傳輸,同時NameNode會分配一個新的DataNode,保持replicas設定的數(shù)量 

HDFS的HA(High Availability,高可用性)機制

  Hadoop2.X版本之前,NameNode是HDFS集群的單點故障點(SPOF)
  
  影響HDFS集群不可用主要包括以下兩種情況:
        1:類似機器宕機這樣的意外情況將導致集群不可用,只有重啟NameNode之后才可使用
        2:計劃內(nèi)的軟件或硬件升級(NameNode節(jié)點)鲜漩,將導致集群在短時間范圍內(nèi)不可用
            
  一個典型的HA集群,兩個單獨的機器配置為NameNode源譬,在任何時候,一個NameNode處于活動狀態(tài),另一個處于待機狀態(tài),活動NameNode負責處理集群中所有客戶端的操作,待機時僅僅作為一個Slave,保持足夠的狀態(tài),如果有必要提供一個快速的故障轉(zhuǎn)移

   為了提供快速的故障轉(zhuǎn)移,必須保證備用節(jié)點有最新的集群中塊的位置信息孕似,為了達到這一點,DataNode節(jié)點需要配置兩個NameNode的位置,同時發(fā)送塊的位置信息和心跳信息到兩個NameNode

  為了防止"腦裂場景"的出現(xiàn),必須為共享存儲配置至少一個fencing方法踩娘。在宕機期間,如果不能確定之間的活動節(jié)點已經(jīng)放棄活動狀態(tài),fencing進程負責中斷以前的活動節(jié)點編輯存儲的共享訪問,這可以防止任何進一步的修改名字空間.允許新的活動節(jié)點安全地進行故障轉(zhuǎn)移
Paste_Image.png

HA架構(gòu)解釋如下:

只有一個NameNode是Active,并且只有這個ActiveNameNode能提供服務,改變NameSpace喉祭。以后可以考慮讓StandbyNameNode提供讀服務

提供手動Failover养渴,在升級過程中,Failover在NameNode-DataNode之間寫不變的情況下才能生效

在之前的NameNode重新恢復之后,不能提供failback
  
數(shù)據(jù)一致性比Failover更重要

HA的設置和Failover都應該保證在兩者操作錯誤或者配置錯誤的時候,不得導致數(shù)據(jù)損壞

NameNode的短期垃圾回收不應該觸發(fā)Failover

DataNode會同時向NameNode Active和NameNode Standary匯報塊的信息。NameNode Active和NameNode Standby 通過NFS備份MetaData信息到一個磁盤上面

HDFS的federation機制

 簡單的說,HDFS Federation就是使得HDFS支持多個名字空間,并且允許在HDFS中同時存在多個NameNode

 引入Federation的最主要原因是對HDFS系統(tǒng)中文件的隔離,Federation能夠快速解決大部分單NameNode HDFS的問題

HDFS Federation使用了多個獨立的NameNode/NameSpace使得HDFS的命名服務能夠水平擴展


HDFS Federation中的NameNode之間是聯(lián)盟關系,它們之間相互獨立且不需要相互協(xié)調(diào)泛烙。HDFS Federation中的NameNode提供了名字空間和塊關聯(lián)功能.HDFS Federation中的DataNode被所有的NameNode用作公共存儲塊的地方.每一個DataNode都會向所在集群中所有的NameNode注冊理卑,并周期性的發(fā)送心跳和塊信息報告,同時處理來自NameNode的指令

塊池(Block Pool)就是屬于單個名字空間的一組Block

Federation HDFS中有多組獨立的塊,同一個DataNode中可以存儲屬于多個塊池的多個塊蔽氨。

塊池允許一個名字空間在不通知其他名字空間的情況下,為一個新的Block創(chuàng)建Block ID.同時,一個NameNode失效不會影響其下的DataNode為其他NameNode的服務

在HDFS中藐唠,所有的更新、回滾都是以NameNode和BlockPool為單元發(fā)生的.即同HDFS Federation中不同的NameNode/BlockPool之間沒有什么關系

多個名字空間的管理問題

  在一個集群中需要唯一的名字空間還是多個名字空間,核心問題是名字空間中數(shù)據(jù)的共享和訪問問題鹉究。

  使用全局唯一的名字空間是解決數(shù)據(jù)共享和訪問的一種方法

  在多個名字空間下宇立,還可以使用Client Side Mount Table方式做到數(shù)據(jù)共享和訪問
Paste_Image.png

HDFS Federation中名字空間管理的基本原理:

      將各個名字空間掛載到全局mount-table中,就可以將數(shù)據(jù)到全局共享自赔;
      同樣,名字空間掛載到個人的mount-table中泄伪,就成為應用程序可見的名字空間視圖

維護HDFS
追加數(shù)據(jù)

    1.Client調(diào)用fs的append操作
    2.向流對象寫數(shù)據(jù)
    3.關閉流對象

并行復制

  distcp(分布式復制)是用于大規(guī)模集群內(nèi)部和集群之間復制的工具。它使用MapReduce實現(xiàn)文件分發(fā)匿级、錯誤處理和恢復,以及報告生成。它把文件和目錄的列表作為Map任務的輸入,每個任務會完成源列表中部分文件的復制
    
  操作命令:
    hadoop distcp -overwrite -delete -i dir1 dir2
 
  參數(shù)如下:
        -delete:刪除已經(jīng)存在的目標文件,不會刪除源文件染厅。這個刪除是通過FS Shell實現(xiàn)的痘绎。所以如果垃圾回收機制啟動,刪除的目標文件會進入trash

        -i:忽略失敗.這個選項會比默認情況提供關于復制的更精確的統(tǒng)計,同時它還將保留失敗復制操作的日志肖粮。這些日志信息可以用于調(diào)試
  
        -overwrite:覆蓋目標孤页。如果一個Map失敗并且沒有使用-i選項,那些復制失敗的文件涩馆,以及這個分塊任務中的所有文件都會被重新復制

升級與回滾

    Hadoop升級分為兩種:
            一種是集群布局不發(fā)生任何變化的行施,這種升級非常簡單,類似安裝一次新的Hadoop程序魂那。
            另外一種是集群布局發(fā)送變化的

兩種升級升級都簡單分為以下幾步:

      1.在執(zhí)行新一輪的升級前蛾号,要確保前一次升級已經(jīng)完成
                hadoop dfsadmin -upgradeProgress status
      2.進行數(shù)據(jù)的備份,以方便升級后對照涯雅,如果有問題可發(fā)現(xiàn)然后回滾版本
              hadoop fs -lsr / > ~/namenode.log
              hadoop fsck / >> ~/namenode.log
              cp -r ${dfs.name.dir} ~/namenode_backup
    
      3.使用stop-all.sh關閉hadoop集群
      4.把${dfs.name.dir}目錄下的所有內(nèi)容復制到新配置的路徑下鲜结,這是集群布局有變化的操作,如果沒有新配置布局就不用這個操作了,單獨啟動新的主節(jié)點NameNode的hdfs進行更新操作
            ${NEW_HADOOP}/bin/start-dfs.sh -upgrade
        使用如下命令進行監(jiān)控,查看是否升級完成
             ${NEW_HADOOP}/bin/hadoop dfsadmin -upgradeProgress status

      5.把新版本的Hadoop程序和配置文件一起分發(fā)給集群里所有的機器,根據(jù)情況看是不是需要進行個別修改,沒有特別的就不用改了精刷。修改/etc/profile中的Hadoop環(huán)境變量,改成新版本Hadoop的指向∞质ぃ現(xiàn)在使用啟動集群的start-all.sh命令來啟動集群就行了
      6.使用fs -lsr 和fsck與namenode.log文件進行核對前后信息變化,如果沒有問題,數(shù)據(jù)塊體驗也通過,就順利完成升級怒允,這時需要執(zhí)行如下命令來最終確定升級完成和清理前版本數(shù)據(jù)
        hadoop dfsadmin -finalizeUpgrade
        rm -r ~/namenode_backup ~/namenode.log
      至此升級完成,不能再進行回滾操作,如果升級后發(fā)現(xiàn)數(shù)據(jù)不符,可以使用如下命令回滾版本
            stop-all.sh
            start-dfs.sh -rollback

添加節(jié)點

    1.修改host埂软。和普通的DataNode一樣,添加NameNode的IP
    2.修改NameNode的配置文件conf/slaves纫事。添加新增節(jié)點的Ip或主機名
    3.在新節(jié)點的機器上啟動服務
        bin/hadoop-daemon.sh start datanode
        bin/hadoop-daemon.sh start tasktracker
    4.均衡Block
        bin/start-balancer.sh 

    為什么要執(zhí)行start-balancer.sh操作呢勘畔?
    如果不執(zhí)行start-balancer.sh操作.cluster會把新的數(shù)據(jù)都存放在新的節(jié)點上,這樣會降低MapReduce的工作效率

  執(zhí)行start-balancer.sh操作的優(yōu)化如下
    1.設置平衡閥值,默認是10%,值越低各節(jié)點越平衡,但消耗時間也更長
    bin/start-balancer.sh -threshold 5
    2.設置balancer的帶寬,默認只有1M/s.編輯hdfs-site.xml文件
    <property>
                <name>dfs.balance.bandwidthPerSec</name>
                <value>10485760</value>
    </property>

刪除節(jié)點

  1.集群配置
        修改conf/hdfs-site.xml文件
            <property>
                    <name>dfs.hosts.exclude</name>
                    <value>/data/soft/hadoop/conf/excludes</value>
            </property>
  2.確定要下架的機器
          dfs.hosts.exclude定義的文件內(nèi)容為每個需要下線的機器儿礼,一行一個咖杂。這將阻止它們連接NameNode.
          例如/data/soft/hadoop/conf/excludes的內(nèi)容如下:
                          ubuntu4
          這樣就把ubuntu4這臺設備從hadoop集群中刪除了。還有一種方法可以實現(xiàn)ubuntu4設備從hadoop集群中刪除蚊夫,配置如下:
            <property>
                  <name>dfs.hosts.exclude</name>
                  <value>ubuntu4</value>
            </property>
            
  3.強制重新加載配置
        bin/hadoop dfsadmin -refreshNode
  它會在后臺進行Block塊的移動
  4.關閉節(jié)點
      bin/hadoop dfsadmin -report
    可以查看到現(xiàn)有集群上連接的節(jié)點信息
  5.再次編輯excludes文件
          一旦完成機器下架诉字,下架的設備就可以從excludes文件移除了。登錄要下架的機器知纷,會發(fā)現(xiàn)DataNode進程沒有了壤圃,但是TaskTracker依然存在,需要手動關閉

HDFS權限管理

hadoop分布式文件系統(tǒng)實現(xiàn)了一個和POSIX系統(tǒng)類似的文件和目錄的權限模型。每個文件和目錄有一個所有者(owner)和一個組(group)

 總的來說,文件或目錄的權限就是它的模式琅轧。HDFS采用了UNIX表示和顯示模式的習慣伍绳,包括使用八進制數(shù)來表示權限。當新建一個文件或目錄,所有者即客戶進程的用戶,它的所屬組是父目錄的組

 HDFS并不提供創(chuàng)建用戶身份乍桂、創(chuàng)建組或用戶憑證等功能
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冲杀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子睹酌,更是在濱河造成了極大的恐慌权谁,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憋沿,死亡現(xiàn)場離奇詭異旺芽,居然都是意外死亡,警方通過查閱死者的電腦和手機辐啄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門采章,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壶辜,你說我怎么就攤上這事悯舟。” “怎么了士复?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵图谷,是天一觀的道長翩活。 經(jīng)常有香客問我,道長便贵,這世上最難降的妖魔是什么菠镇? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮承璃,結(jié)果婚禮上利耍,老公的妹妹穿的比我還像新娘。我一直安慰自己盔粹,他們只是感情好隘梨,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舷嗡,像睡著了一般轴猎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上进萄,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天捻脖,我揣著相機與錄音,去河邊找鬼中鼠。 笑死可婶,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的援雇。 我是一名探鬼主播矛渴,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惫搏!你這毒婦竟也來了具温?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤筐赔,失蹤者是張志新(化名)和其女友劉穎桂躏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體川陆,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年蛮位,在試婚紗的時候發(fā)現(xiàn)自己被綠了较沪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡失仁,死狀恐怖尸曼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萄焦,我是刑警寧澤控轿,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布冤竹,位于F島的核電站,受9級特大地震影響茬射,放射性物質(zhì)發(fā)生泄漏鹦蠕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一在抛、第九天 我趴在偏房一處隱蔽的房頂上張望钟病。 院中可真熱鬧,春花似錦刚梭、人聲如沸肠阱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屹徘。三九已至,卻和暖如春衅金,著一層夾襖步出監(jiān)牢的瞬間噪伊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工典挑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留酥宴,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓您觉,卻偏偏與公主長得像拙寡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子琳水,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 首先肆糕,我們在使用前先看看HDFS是什麼?這將有助于我們是以后的運維使用和故障排除思路的獲得在孝。 HDFS采用mast...
    W_Bousquet閱讀 4,194評論 0 2
  • Hadoop2.X后可以劃分為三部分:HDFS诚啃、MapReduce和Yarn,本篇主要看一下HDFS私沮。 架構(gòu)圖 進...
    忘凈空閱讀 1,047評論 1 0
  • 目錄 HDFS的工作機制 概述 HDFS 寫數(shù)據(jù)流程 HDFS 讀數(shù)據(jù)流程 NameNode的工作機制 NameN...
    Singer_Au閱讀 9,864評論 0 5
  • 一直覺得自己是重感情的人仔燕,慢慢才發(fā)現(xiàn)造垛,原來自己其實是不折不扣的寡淡之人。三兩個好閨蜜而已晰搀,不是說自己朋友少五辽,而...
    北極光的秘密閱讀 349評論 0 0