總的來說,正確的做法是優先通過設定檔,再在具體機器上進行相應進程的啟動/停止操作。
網上一些資料說在調整設定檔的時候,優先使用主機名稱而不是IP進行配置。
總的來說添加/刪除DataNode和TaskTracker的方法非常相似,只是操作的配置項和使用的命令有微小差異。
1. DataNode1.0 設定檔在master/namenode下修改設定檔conf/mapred-site.xml。關鍵參數dfs.hosts和dfs.hosts.exclude。
注意:不同hadoop版本的設定檔規劃不太一致!具體參考相關版本的hadoop官方文檔的cluster setup部分。 http://hadoop.apache.org/docs/ 點擊相同或相近版本。
上面的說法是在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 datanode1.2.1 重新加入各個刪除的節點1,在master的datanode-deny.list刪除相應機器 2,在master上重新整理節點配置情況: hadoop dfsadmin -refreshNodes
3,在slave上重啟datanode進程: hadoop-daemon.sh start datanode
PS:如果之前沒有關閉該slave上的datanode進程,需要先關閉再重新啟動。2. TackTracker2.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><span style="font-family: Arial, Helvetica, sans-serif;">.hosts</name></span><value>/opt/hadoop/conf/tasktracker-allow.list</value></property><property><name><span style="font-family: Arial, Helvetica, sans-serif;">mapred</span>.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 tasktracker2.2.1 重新加入各個刪除的節點1,在master的tasktracker-deny.list刪除相應機器 2,在master上重新整理節點配置情況: hadoop mradmin -refreshNodes
3,在slave上重啟tasktracker進程: hadoop-daemon.sh start tasktracker
PS:如果之前沒有關閉該slave上的tasktracker進程,需要先關閉再重新啟動。
原載於http://blog.csdn.net/yanxiangtianji
轉載請註明出處