Hadoop增加和刪除節點

yanke_shanghai發表於2016-05-06

1. DataNode

1.0 配置檔案

在master/namenode下修改配置檔案conf/mapred-site.xml。關鍵引數dfs.hosts和dfs.hosts.exclude。
注意:不同hadoop版本的配置檔案規劃不太一致!具體參考相關版本的hadoop官方文件的cluster setup部分。 點選相同或相近版本。

上面的說法是在hadoop 1.x中的,後面也以該版本舉例;在hadoop 0.x中上述配置存放在檔案conf/hadoop-site.xml中;在hadoop 2.x中變化很大,檔案為conf/hdfs-site.xml中,引數名為:dfs.namenode.hosts和fs.namenode.hosts.exclude。
引數作用: dfs.hosts: 允許接入為DataNode的機器列表,如果不配置或所指定的列表檔案為空則預設允許所有主機成為DataNode dfs.hosts.exclude: 拒絕接入為DataNode的機器列表,如果一臺機器同時出現在兩個列表中,則拒絕。它們的本質作用拒絕某些節點上的datanode程式連線,而不是排程這些節點上datanode程式的允許和關閉。
用法舉例:修改conf/mapred-site.xml,新增:
	<property>
		<name>dfs.hosts</name>
		<value>/opt/hadoop/conf/datanode-allow.list</value>
	</property>
	<property>
		<name>dfs.hosts.exclude</name>
		<value>/opt/hadoop/conf/datanode-deny.list</value>
	</property>
如果不需要允許列表,就不要建立對應項了。然後建立value所指定的檔案。一行寫一個主機名。

1.1 新增

1,在新slave上進行相關配置。

2,在master上的slave列表加入該slave(非必須,方便以後重啟cluster用)

3,(若有)在datanode-allow.list中加入該slave

4,在slave上啟動datanode程式:

執行:hadoop-daemon.sh start datanode

PS:可以用jps命令檢視機器上的java程式的pid和程式名。

1.2 刪除

極端不建議直接在slave上透過: hadoop-daemon.sh stop datanode 命令關掉datanode,這會導致hdfs中出現missing block。

1,在master上修改datanode-deny.list,新增相應機器 2,在master上重新整理節點配置情況: hadoop dfsadmin -refreshNodes
此時在Web UI上立即就可以看到該節點變為Decommissioning狀態,過一會就變為Dead了。也可以透過:hadoop dfsadmin -report命令檢視。 3,在slave上關閉datanode程式(非必須):執行:hadoop-daemon.sh stop datanode

1.2.1 重新加入各個刪除的節點

1,在master的datanode-deny.list刪除相應機器 2,在master上重新整理節點配置情況: hadoop dfsadmin -refreshNodes
3,在slave上重啟datanode程式: hadoop-daemon.sh start datanode
PS:如果之前沒有關閉該slave上的datanode程式,需要先關閉再重新啟動。

2. TackTracker

2.0 配置檔案

hadoop 1.x下在master/namenode下修改配置檔案conf/mapred-site.xml。關鍵引數mapred.hosts和mapred.hosts.exclude。
對於hadoop 0.x需要修改配置檔案conf/hadoop-site.xml;對於hadoop 2.x還沒有搞清楚,先不說。
引數作用:和datanode的對應項一樣。
用法舉例:修改conf/mapred-site.xml,新增:
	<property>
		<name><span style="font-family: Arial, Helvetica, sans-serif;">mapred<span style="font-family: Arial, Helvetica, sans-serif;">.hosts</name>
		<value>/opt/hadoop/conf/tasktracker-allow.list</value>
	</property>
	<property>
		<name><span style="font-family: Arial, Helvetica, sans-serif;">mapred.hosts.exclude</name>
		<value>/opt/hadoop/conf/tasktracker-deny.list</value>
	</property>
如果不需要允許列表,就不要建立對應項了。然後建立value所指定的檔案。一行寫一個主機名。

2.1 新增

1,在新slave上進行相關配置。

2,在master上的slave列表加入該slave(非必須,方便以後重啟cluster用)

3,(若有)在tasktracker-allow.list中加入該slave

4,在slave上啟動tasktracker程式:

執行:hadoop-daemon.sh start tasktracker

PS:可以用jps命令檢視機器上的java程式的pid和程式名。

2.2 刪除

不建議直接在slave上透過: hadoop-daemon.sh stop tasktracker 命令關掉tasktracker,這會導致namenode認為這些機器暫時失聯,在一個超時時間內(預設10min+30s)依然假設它們是正常的還會將任務傳送給它們。

1,在master上修改tasktracker-deny.list,新增相應機器 2,在master上重新整理節點配置情況: hadoop mradmin -refreshNodes
此時在Web UI上立即就可以看到Nodes的數量減少了,而Exclude Nodes的數量增加了。可以點進去具體檢視。 3,在slave上關閉tasktracker程式(非必須):執行:hadoop-daemon.sh stop tasktracker

2.2.1 重新加入各個刪除的節點

1,在master的tasktracker-deny.list刪除相應機器 2,在master上重新整理節點配置情況: hadoop mradmin -refreshNodes
3,在slave上重啟tasktracker程式: hadoop-daemon.sh start tasktracker
PS:如果之前沒有關閉該slave上的tasktracker程式,需要先關閉再重新啟動。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30316686/viewspace-2094927/,如需轉載,請註明出處,否則將追究法律責任。

相關文章