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里面,下次重啟以后,手動加入即可完成動態擴容了。