認識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)圖如下圖所示:
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)的完整性
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)用方式
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é)果返回給客戶端
HDFS的文件讀取
文件讀取的流程如下:
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的文件寫入
寫入文件的過程比讀取復雜,步驟如下:
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)移
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ù)共享和訪問
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)建組或用戶憑證等功能