Article
hadoop安全的关闭datanode节点
hadoop默认就有冗余(dfs.replication)的机制,所以一般情况下,一台机器挂了也没所谓。集群会自动的进行复制均衡处理。
作为测试,如果dfs.replication设置为1的情况下,怎么安全的把datanode节点服务关闭呢?例如说,刚刚开始搭建环境是把namenode、datanode放在一台机器上,后面增加了机器如何把datanode分离出来呢?
借助于dfs.hosts.exclude即可完成顺序的完成此项任务。
修改hdfs-site.xml配置。我操作的时刻仅修改了master1上的hdfs-site.xml。把master1值写入到对应的文件中。
[hadoop@master1 hadoop]$ cat hdfs-site.xml
...
<property>
<name>dfs.hosts.exclude</name>
<value>/home/hadoop/hadoop-2.2.0/etc/hadoop/exclude</value>
</property>
</configuration>
[hadoop@master1 hadoop]$ cat /home/hadoop/hadoop-2.2.0/etc/hadoop/exclude
master1
修改完成后,刷新节点即可(完全没有必要重启集dfs)。
hadoop dfsadmin -refreshNodes
可以通过dfsadmin -report或者网页查看master1已经变成Decommission In Progress了。

注:
问题一: 在新建节点是slaver1的防火墙没关闭,由于master1已经被exclude,而slaver1不能提供服务,上传文件时报错:
[hadoop@master1 hadoop]$ hadoop fs -put slaves /
14/07/29 15:18:21 WARN hdfs.DFSClient: DataStreamer Exception
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /slaves._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 2 datanode(s) running and no node(s) are excluded in this operation.
at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget(BlockManager.java:1384)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:2477)
关闭防火墙一样再次上传,还是报同样的错误。此时,也可以通过刷新节点hadoop dfsadmin -refreshNodes来解决。
问题二: 设置备份数量
[hadoop@master1 hadoop]$ hadoop fs -setrep 3 /slaves
Replication 3 set: /slaves
问题三: 新增节点
拷贝程序到新增节点,然后启动
[hadoop@master1 ~]$ tar zc hadoop-2.2.0 --exclude=logs | ssh slaver2 'cat | tar zx'
[hadoop@slaver2 ~]$ cd hadoop-2.2.0/
[hadoop@slaver2 hadoop-2.2.0]$ sbin/hadoop-daemon.sh start datanode
也可以修改master上的slavers文件再sbin/start-dfs.sh启动。
–END
Related
Related posts
-
杀鸡焉用牛刀:DuckDB 正取代部分 Spark 场景
2026-02-16
-
基于对象存储的 Spark 数据读写实战:从末尾追加到任意更新
2025-10-28
-
认真的博客
2021-12-08
-
视频自动翻译
2018-08-25