hdfs 删除和新增节点

     最近发现hdfs的一个问题,每当集群开启的时候,有一个节点上的可用空间就一直在减少,并且速度很快,发现是data目录下的dncp_block_verification.log.curr文件在一直变大,查了日志没有发现什么可疑的原因,只在datanode的日志上发现有几条日志如下非常可疑:

2015-11-28 21:35:51,029 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetAsyncDiskService: Deleted BP-1219379569-1
92.168.1.50-1445090469366 blk_1073748736_7916 file /home/hadoop/hdfsdisk/data/current/BP-1219379569-192.168.1.50-1445090469366/curren
t/finalized/subdir0/subdir27/blk_1073748736
2015-11-28 21:35:51,062 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetAsyncDiskService: Deleted BP-1219379569-1
92.168.1.50-1445090469366 blk_1073846979_106183 file /home/hadoop/hdfsdisk/data/current/BP-1219379569-192.168.1.50-1445090469366/curr
ent/finalized/subdir1/subdir154/blk_1073846979

好像是namenode发出的删除请求,但是不知道在删除什么

由于暂时没有找出故障原因,所以打算将这个节点删除,然后将节点再添加回来,具体步骤如下:

1. 平滑删除节点

    1.1 修改hdfd-site.xml文件

         首先集群是开启的,然后添加代码如下:

<property>
    <name>dfs.hosts.exclude</name>
    <value>/home/hadoop/hadoop-2.6.0/etc/hadoop/excludes</value>
    <description> Names a file that contains a list of hosts that are not permitted to connect to the namenode.  The full pathnam
e of the file must be specified If the value is empty, no hosts are excluded. </description>
</property>

其中/home/hadoop/hadoop-2.6.0/etc/hadoop/excludes文件中为要删除的机器hostname,示例如下:

slave8.spark
slave9.spark

    1.2 然后执行命令刷新hdfs节点:

hadoop dfsadmin  -refreshNodes
更新hdfs节点状态,由于存在副本的原因,在后台会有块的移动

1.3 运行命令查看hdfs报告

hadoop dfsadmin -report

会显示如下状态
Live datanodes (8):

Name: 192.168.1.58:50010 (slave8.spark)
Hostname: slave8.spark
Decommission Status : Decommission in progress
Configured Capacity: 898359930880 (836.66 GB)
DFS Used: 844093001728 (786.12 GB)
Non DFS Used: 47660601344 (44.39 GB)
DFS Remaining: 6606327808 (6.15 GB)
DFS Used%: 93.96%
DFS Remaining%: 0.74%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Sun Nov 29 13:41:48 CST 2015

   说明该节点已经被移除,其实应该等到在hdfs内部块移动结束之后再结束集群,但是我没有等到,直接在显示如上状态后就关闭了集群,然后将slaves中的该节点hostname删除后启动了集群,启动后hdfs又开始了移动块,但是很慢,会等很长时间,但是如果集群一直要用无法关闭集群的话,这个过程是很重要的。

2. 添加节点

    添加新节点时需要在slaves配置文件中新增即将添加的节点,然后再进行集群平衡操作,如果不想进行平衡操作也可以(不推荐),这样做只是导致了集群中每个节点已占用空间大小不一致,添加节点也有两种方式,平滑添加和非平滑添加,具体操作如下:

    2.1 平滑添加,需要停止namenode
        1.停止namenode 
        2.修改slaves文件
        3.启动namenode 
        4.执行hadoop balance命令平衡集群节点

    2.2非平滑添加datanode,不需要停止namenode
        1.修改slaves文件,添加需要增加的节点
        2.启动datanode,hadoop-daemon.sh start datanode 
        3.执行hadoop balance命令平衡集群节点

    执行节点平衡命令为balance命令,使用示例如下:start-balancer.sh -threshold 8,具体详细使用方法请查阅。

posted @ 2015-11-29 15:30  prisoner  阅读(3200)  评论(0编辑  收藏  举报