8

Hadoop动态添加/删除节点(datanode和tacktracker)

 3 years ago
source link: https://blog.csdn.net/yanxiangtianji/article/details/27694727
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

总的来说,正确的做法是优先通过配置文件,再在具体机器上进行相应进程的启动/停止操作。

网上一些资料说在调整配置文件的时候,优先使用主机名而不是IP进行配置。

总的来说添加/删除DataNode和TaskTracker的方法非常相似,只是操作的配置项和使用的命令有微小差异。

1. DataNode

1.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,添加:
如果不需要允许列表,就不要创建对应项了。
然后创建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,添加:
如果不需要允许列表,就不要创建对应项了。
然后创建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进程,需要先关闭再重新启动。

原载于http://blog.csdn.net/yanxiangtianji

转载请注明出处


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK