一臉懵逼學習Hdfs---動態增加節點和副本數量管理(Hdfs動態擴容)


1:按照上篇博客寫的,將各個進程都啟動起來:

集群規划:
    主機名          IP                  安裝的軟件                        運行的進程
   master     192.168.3.129      jdk、hadoop                        NameNode、DFSZKFailoverController(zkfc)
   slaver1    192.168.3.130      jdk、hadoop                        NameNode、DFSZKFailoverController(zkfc)
   slaver2    192.168.3.131      jdk、hadoop                        ResourceManager
   slaver3    192.168.3.132      jdk、hadoop                        ResourceManager
   slaver4    192.168.3.133      jdk、hadoop、zookeeper         DataNode、NodeManager、JournalNode、QuorumPeerMain
   slaver5    192.168.3.134      jdk、hadoop、zookeeper         DataNode、NodeManager、JournalNode、QuorumPeerMain
   slaver6    192.168.3.135      jdk、hadoop、zookeeper         DataNode、NodeManager、JournalNode、QuorumPeerMain

 2:開始測試動態增加節點和副本數量管理:

  首先將master節點的datanode掛掉(即少了一個保存文件的副本):

注意:hadoop datanode節點超時時間設置:

datanode進程死亡或者網絡故障造成datanode無法與namenode通信,
namenode不會立即把該節點判定為死亡,要經過一段時間,這段時間暫稱作超時時長。
HDFS默認的超時時長為10分鍾+30秒。如果定義超時時間為timeout,則超時時長的計算公式為:
    timeout  = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval。
    而默認的heartbeat.recheck.interval 大小為5分鍾,dfs.heartbeat.interval默認為3秒。
    需要注意的是hdfs-site.xml 配置文件中的:
      heartbeat.recheck.interval的單位為毫秒,
      dfs.heartbeat.interval的單位為秒。

所以,舉個例子,如果heartbeat.recheck.interval設置為5000(毫秒),dfs.heartbeat.interval設置為3(秒,默認),則總的超時時間為40秒。
    hdfs-site.xml中的參數設置格式:
<property>
<name>heartbeat.recheck.interval</name>
<value>2000</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>1</value>
</property>

 注意:HDFS冗余數據塊的自動刪除:

在日常維護hadoop集群的過程中發現這樣一種情況:
    某個節點由於網絡故障或者DataNode進程死亡,被NameNode判定為死亡,
    HDFS馬上自動開始數據塊的容錯拷貝;
    當該節點重新添加到集群中時,由於該節點上的數據其實並沒有損壞,
    所以造成了HDFS上某些block的備份數超過了設定的備份數。
    通過觀察發現,這些多余的數據塊經過很長的一段時間才會被完全刪除掉,
    那么這個時間取決於什么呢?
    該時間的長短跟數據塊報告的間隔時間有關。
    Datanode會定期將當前該結點上所有的BLOCK信息報告給Namenode,
    參數dfs.blockreport.intervalMsec就是控制這個報告間隔的參數。
    
    hdfs-site.xml文件中有一個參數:
<property>
<name>dfs.blockreport.intervalMsec</name>
<value>10000</value>
<description>Determines block reporting interval in milliseconds.</description>
</property>
    其中3600000為默認設置,3600000毫秒,即1個小時,也就是說,塊報告的時間間隔為1個小時,所以經過了很長時間這些多余的塊才被刪除掉。通過實際測試發現,當把該參數調整的稍小一點的時候(60秒),多余的數據塊確實很快就被刪除了。

 3:停止一下集群,配置一下hadoop datanode節點超時時間設置和HDFS冗余數據塊的自動刪除,停止集群如下所示:

依次查看一下各個節點的進程啟動情況:

 

然后將slaver5和slaver6的yarn進程停掉:

然后依次關掉zookeeper的進程:如master,slaver1和slaver2都一樣,這里不再重復了:

[root@master bin]# ./zkServer.sh stop

現在修改配置一下:hadoop datanode節點超時時間設置和HDFS冗余數據塊的自動刪除的配置文件hdfs-site.xml:

hadoop datanode節點超時時間設置
hdfs-site.xml中的參數設置格式:

<property>
<name>heartbeat.recheck.interval</name>
<value>2000</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>1</value>
</property>

HDFS冗余數據塊的自動刪除
hdfs-site.xml文件中有一個參數: <property> <name>dfs.blockreport.intervalMsec</name> <value>10000</value> <description>Determines block reporting interval in milliseconds.</description> </property>

操作如下所示:

[root@slaver3 hadoop]# vim hdfs-site.xml

 將修改的hdfs-site.xml復制到其他6個節點上面,如下所示:

4:將集群啟動起來:

   4.1:啟動zookeeper集群(分別在master、slaver1、slaver2上啟動zookeeper):

  4.2:啟動journalnode(分別在master、slaver1、slaver2上執行)

 

  4.3:千萬不要執行格式化HDFS,千萬不要執行格式化ZKFC(在slaver3上執行即可),不然還是報很多錯誤;

    4.4:然后在slaver3啟動start-dfs.sh

 

現在可以去其他節點看看,全部進程都可以正常啟動,如果你想啟動yarn進程,下面啟動yarn進程,slaver5節點和slaver6節點操作一樣,這里只貼slaver5即可:

如果你耐心十足,搞了一天,想吐,這里還是再貼一下jps查看的進程情況吧:

 

5:然后將master的namenode干掉,看看Live Nodes是否變化:

經過14s后,活着的node數目就由3變成了2:

 如何新加一個datanode,再搞一個虛擬機(我再新建一個虛擬機,不知道我的電腦撐住撐不住,試試吧先),然后將hadoop的安裝包復制過去,然后將datanode啟動起來:好吧,最后沒有弄出來,以后有機會好好補一下這點,動態增加節點和副本數量管理;

補充要點:

注意:hdfs動態擴容要點,將手動啟動節點:

  hadoop-daemon.sh start namenode 啟動namenode

  hadoop-daemon.sh start datanode 啟動datanode.  

即可以動態加入,只不過沒寫到slavers里面,下次重啟以后,手動加入即可完成動態擴容了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM