1. 程式人生 > >Hadoop學習筆記—13.分布式集群中節點的動態添加與下架

Hadoop學習筆記—13.分布式集群中節點的動態添加與下架

情況 好的 當前 每次 原因 修改 輸入 task tle

開篇:在本筆記系列的第一篇中,我們介紹了如何搭建偽分布與分布模式的Hadoop集群。現在,我們來了解一下在一個Hadoop分布式集群中,如何動態(不關機且正在運行的情況下)地添加一個Hadoop節點與下架一個Hadoop節點。

一、實驗環境結構

  本次試驗,我們構建的集群是一個主節點,三個從節點的結構,其中三個從節點的性能配置各不相同,這裏我們主要在虛擬機中的內存設置這三個從節點分別為:512MB、512MB與256MB。首先,我們暫時只設置兩個從節點,另外一個作為動態添加節點的時候使用。主節點與從節點所扮演的角色如下所示:

  主節點(1個,主機名:hadoop-master):NameNode、JobTracker、SecondaryNameNode

  從節點(3個,主機名:hadoop-slave1、hadoop-slave2、hadoop-slave3):DataNode、TaskTracker

技術分享

TIPS:當然,我們也可以將SecondaryNameNode作為一個獨立的節點分離出去,只需要增加一臺服務器,並在主節點中修改hadoop中的配置文件:masters,將新節點的主機名添加進去即可。

二、動態添加節點

  在實際生產應用中,很多時候因為現有集群的性能問題需要增加服務器節點以提高整體性能(一般是增加從節點,在Hadoop2.x之後解決了主節點的單點問題,可以增加主節點以保持HA高可用性),這就涉及到動態添加節點的問題。還好,Hadoop早就提供了很好的解決方法,我們只需要如下幾步就可以輕松地添加一個節點:

  (1)準備工作:配置新節點的各種環境

  主要包括:設置IP地址、主機名、綁定IP地址與主機名的映射、生成SSH與各節點之間的無密碼登錄、安裝JDK與Hadoop、設置配置文件;當然,都可以通過復制解決;

  (2)在主節點中的slaves配置文件中添加要新加入的節點的主機名hadoop-slave3(在hadoop目錄下/conf/slaves)

技術分享

  (3)在新節點hadoop-slave3中,通過Hadoop Shell啟動datanode與tasktracker進程:

技術分享

  這兩句shell命令分別是:

  hadoop-daemon.sh start datanode
  hadoop-daemon.sh start tasktracker

  (4)在主節點中通過Hadoop Shell刷新從節點列表,獲取新加入的節點信息:hadoop dfsadmin -refreshNodes

技術分享

  (5)在主節點的Web接口中查看Live Nodes數量變為了3,代表動態添加從節點成功

技術分享

三、動態下架節點

  在實際生產應用中,也會存在某個節點或某些節點因為某種原因而停止服務或者宕機的情況,Hadoop會通知一定的感知機制得到這些停止服務的節點的信息,從而通過其他節點獲取文件(前提是我們所設置的副本數量>=2,默認為3)。

  (1)通過關閉hadoop-slave3的電源或者輸入一個shell命令停止datanode進程:hadoop-daemon.sh stop datanode

  ->這裏我們可以通過後者,這個shell命令來看看

  (2)我們現在再通過主節點的Web接口來看看運行情況:

技術分享

PS:停止hadoop-slave3的datanode進程後發現,NameNode的Web接口上hadoop-slave節點的LastContact字段的值會不斷地增大。這是因為DataNode每次啟動時都會向NameNode匯報,NameNode會記錄下它的訪問時間,然後NameNode用當前訪問時間減去上次訪問時間,就得出LastContact的值,也就是多長時間未訪問。又由於實際環境中經常存在網絡問題造成短暫掉線,所以NameNode會等待一段時間(默認等10分鐘)之後,才會將它視為死節點。所以,為了防止數據丟失所以在實際中副本數一般會設為2以上(默認為3),當某個節點死掉以後,可以通過副本找回數據。

  (3)重新啟動hadoop-slave3的datanode進程:hadoop-daemon.sh start datanode

  (4)現在再次通過主節點的Web接口來看看運行情況:變為了0

技術分享

四、Hadoop中的安全模式

  當Hadoop的NameNode節點啟動時,會進入安全模式階段。

  (1)在此階段,DataNode會向NameNode上傳它們數據塊的列表,讓 NameNode得到塊的位置信息,並對每個文件對應的數據塊副本進行統計。當最小副本條件滿足時,即一定比例的數據塊都達到最小副本數,系統就會退出安全模式,而這需要一定的延遲時間。

  (2)當最小副本條件未達到要求時,就會對副本數不足的數據塊安排DataNode進行復制,直至達到最小副本數。而在安全模式下,系統會處於只讀狀態,NameNode不會處理任何塊的復制和刪除命令。

  那麽,如何判斷HDFS是否處於安全模式呢?hadoop dfsadmin -safemode get

技術分享

  如何手動進入和離開安全模式呢?hadoop dfsadmin -safemode enter/leave

技術分享

  進入安全模式後,再向HDFS上傳或修改文件會出現什麽情況?一個提示“正在處於安全模式”的異常

技術分享

 org.apache.hadoop.dfs.SafeModeException: Cannotdelete/user/hadoop/input. Name node is in safe mode.從字面上來理解:“Name nodeis in safe mode.”hadoop的namenode處於安全模式。

參考資料

(1)吳超,《Hadoop深入淺出》:http://www.superwu.cn

(2)Suddenly,《Hadoop日記Day19-分布式安裝》:http://www.cnblogs.com/sunddenly/p/4011455.html

(3)michael_zhu,《Hadoop安全模式的理解》:http://blog.csdn.net/michael_zhu_2004/article/details/8268728

原文鏈接:http://www.cnblogs.com/edisonchou/

Hadoop學習筆記—13.分布式集群中節點的動態添加與下架