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

-- ::, INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetAsyncDiskService: Deleted BP--
92.168.1.50- blk_1073748736_7916 file /home/hadoop/hdfsdisk/data/current/BP--192.168.1.50-/curren
t/finalized/subdir0/subdir27/blk_1073748736
-- ::, INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetAsyncDiskService: Deleted BP--
92.168.1.50- blk_1073846979_106183 file /home/hadoop/hdfsdisk/data/current/BP--192.168.1.50-/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./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 ():

Name: 192.168.1.58: (slave8.spark)
Hostname: slave8.spark
Decommission Status : Decommission in progress
Configured Capacity: (836.66 GB)
DFS Used: (786.12 GB)
Non DFS Used: (44.39 GB)
DFS Remaining: (6.15 GB)
DFS Used%: 93.96%
DFS Remaining%: 0.74%
Configured Cache Capacity: ( B)
Cache Used: ( B)
Cache Remaining: ( B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers:
Last contact: Sun Nov :: CST

说明该节点已经被移除,其实应该等到在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,具体详细使用方法请查阅。

hdfs 删除和新增节点的更多相关文章

  1. redis 集群新增节点,slots槽分配,删除节点, [ERR] Calling MIGRATE ERR Syntax error, try CLIENT (LIST | KILL | GET...

    redis reshard 重新分槽(slots) https://github.com/antirez/redis/issues/5029 redis 官方已确认该bug redis 集群重新(re ...

  2. hadoop 集群 加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令

    加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令 方式1:静态添加datanode,停止namenode方式 1.停止namenode 2.修改slaves文件,并更新到各个节点3.启动na ...

  3. 实验-hadoop新增节点

    关于hadoop新增节点网上的说法都有些差别,自己来实践一把 1.建立一个namenode一个datanode的集群 master:192.168.126.130 slave1:192.168.126 ...

  4. CDH5.16.1集群新增节点

    如果是全新安装集群的话,可以参考<Ubuntu 16.04上搭建CDH5.16.1集群> 下面是集群新增节点步骤: 1.已经存在一个集群,有两个节点 192.168.100.19 hado ...

  5. k8s节点简介、移除节点、新增节点

    简介 Node是Pod真正运行的主机,可以是物理机也可以是虚拟机. Node本质上不是Kubernetes来创建的, Kubernetes只是管理Node上的资源. 为了管理Pod,每个Node节点上 ...

  6. k8s系列--node(k8s节点介绍,新增节点,移除节点)

    一.简介 Node是Pod真正运行的主机,可以是物理机也可以是虚拟机. Node本质上不是Kubernetes来创建的, Kubernetes只是管理Node上的资源. 为了管理Pod,每个Node节 ...

  7. [LeetCode] Delete Node in a Linked List 删除链表的节点

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...

  8. 试验删除RAC(ORA10G)节点

    1.环境概述 2.删除一个节点 本实验中以删除第二个节点为示例. 2.1删除数据库实例 在第一个节点上(存活的节点)上使用DBCA删除第二个节点的实例. 执行完以上操作可以看下crs_stat –t  ...

  9. [CareerCup] 2.3 Delete Node in a Linked List 删除链表的节点

    2.3 Implement an algorithm to delete a node in the middle of a singly linked list, given only access ...

随机推荐

  1. js网页拉起支付宝支付

    js网页唤起支付宝进行支付 在做uni-app项目中,打包成 ios App的时候,为了绕过苹果支付的审核,所以用的 webview 加载支付宝的网页支付,进行付款 具体实现流程: 前端通过 url ...

  2. Day3-O-Median POJ3579

    Given N numbers, X1, X2, ... , XN, let us calculate the difference of every pair of numbers: ∣Xi - X ...

  3. oracle,mysql,SqlServer三种数据库的分页查询

    MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如 ...

  4. java文件相关(文件追加内容、文件内容清空、文件内容读取)

    https://blog.csdn.net/xnz0616/article/details/39137177 1.文件内容追加 // 在已有的文件后面追加信息 public static void a ...

  5. C++面试常见问题——17类模板的使用

    类模板的使用 注意在每次类模板函数时都需要声明一个类模板 #include<iostream> using namespace std; template <class T,int ...

  6. 微信公众号sdk

    微信公众号开发 能享用微信公众号的API,比如分享给好友,分享到朋友圈,禁止菜单功能,选择图片,获取地址,以及支付 微信的功能有两种执行方式 一种是 wx.xx 一种是 WeixinJSBridge. ...

  7. 018、Java中除法的是用,解决除法计算精度问题

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  8. gem5-gpu 选项解释

    ‘--split’ ,该项用于模拟独立显卡,GPU与CPU不在同一芯片上,两者的内存物理上隔绝,使用PCI-Express连接. ‘--access-host-pagetable’,该项用于模拟集成显 ...

  9. 10 MySQL索引选择与使用

    索引概述     每种存储引擎对每个表至少支持16个索引,总索引长度至少256字节.     MyISAM和InnoDB的表默认创建BTREE索引.MEMORY引擎默认使用HASH索引,但也支持BTR ...

  10. L2d插件

    <script src="https://blog-static.cnblogs.com/files/yyhh/L2Dwidget.min.js"></scrip ...