Decommission Datanode
Decommission Datanode就是把Datanode从HDFS集群中移除掉。那问题来了,HDFS在设计时就把诸如机器故障考虑进去了,能否直接把某台运行Datanode的机器关掉然后拔走呢?我认为理论上可行的,不过在实际的集群中,如果某份数据只有一份拷贝而且它就在这个机器上,那么直接关掉并拔走机器就会造成数据丢失。本文将介绍如何Decommission Datanode以及可能会遇到的一些问题及其解决办法。
Decommission Datanode都做了什么?
Datanode是存储实际数据的,因此在Decommission Datanode的时候需要把Datanode上的数据迁移到别的机器上。这就好比公司里面有人离职了,他需要把他负责的工作交接给别的同事。
那如何Decommission Datanode呢?这需要如下两个步骤:
- 在Namenode上,把需要Decommission的Datanode的机器名加入到dfs.hosts.exclude(该配置项在hdfs-site.xml)所指定文件中,也就是告诉Namenode哪些Datanode要被Decommission。
如果hdfs-site.xml没有找到dfs.hosts.exclude,那么就手动把下面内容加入到hdfs-site.xml中,然后把需要Decommission的机器写到文件/etc/hadoop/conf/dfs.exclude中去。
<property>
<name>dfs.hosts.exclude</name>
<value>/etc/hadoop/conf/dfs.exclude</value>
</property>
2 . 用如下命令启动Decommission:
sudo -u hdfs hdfs dfsadmin -refreshNodes
注意:通常需要用hdfs用户来执行这个命令。
接下来就可以在Namenode的UI(http://<namenode_fqdn>:50070)上看到对应Datanode会处在Decommissioning状态。完成后,对应的Datanode会处在Decommissioned状态。
常见问题
我们知道HDFS上的文件默认replica factor是3,也就是文件要存储3份。Decommission Datanode的时候需要保证在该Datanode移除以后,HDFS上的文件还能满足replica factor的最低要求。
比如,一个只有3个Datanode的HDFS集群,文件默认replica factor是3,那么移除任何一个Datanode都会导致某些文件不能满足replica factor的最低要求。当试图移除一个Datanode的时候,会一直处在Decommissioning的状态,因为它找不到别的机器来迁移它的数据了。这个问题通常容易出现在小集群上。
一个解决办法就是临时把相应文件的replica factor调低。
1. 用如下命令来查看HDFS中所有文件的replica factor
sudo -u hdfs hdfs fsck / -files -blocks
比如在我的测试集群上,一部分输出如下:
/user/oozie/share/lib/sqoop/sqoop-1.4.4.phd.3.0.0.0-1.jar 756504 bytes, 1 block(s): OK
0. BP-1770424924-192.168.64.102-1412922647084:blk_1073741898_1074 len=756504 repl=1
其中repl=1表示该文件的该block的replica factor为1。通过这个命令就可以找到那些replica factor比较高的文件了。
2 . 调整文件的replica factor
我们需要注意的是,replica factor是文件的属性,而不是集群的属性,也就是说同一个集群中的文件可以有不同的replica factor。因此,我们需要针对文件修改replica factor。对应的命令是:
hdfs dfs -setrep [-R] [-w] <rep> <path>
其中
- -R表示recursive,可以对一个目录及其子目录设置replica factor,
- 表示需要设置的replica factor的值
- 表示需要设置的replica factor的文件或目录路径
小结
Decommission Datanode就有点类似于在拔掉移动硬盘的时候先将其弹出。本文简要介绍了如何Decommission Datanode和一个常见问题及其解决办法。
Decommission Datanode的更多相关文章
- Hadoop官方文档翻译——HDFS Architecture 2.7.3
HDFS Architecture HDFS Architecture(HDFS 架构) Introduction(简介) Assumptions and Goals(假设和目标) Hardware ...
- HDFS Architecture--官方文档
HDFS Architecture Introduction The Hadoop Distributed File System (HDFS) is a distributed file syste ...
- HDFS概述(1)————HDFS架构
概述 Hadoop分布式文件系统(HDFS)是一种分布式文件系统,用于在普通商用硬件上运行.它与现有的分布式文件系统有许多相似之处.然而,与其他分布式文件系统的区别很大.HDFS具有高度的容错能力,旨 ...
- Hadoop学习笔记一(HDFS架构)
介绍 Hadoop分布式文件系统(HDFS)设计的运行环境是商用的硬件系统.他和现存的其他分布式文件系统存在很多相似点.不过HDFS和其他分布式文件系统的区别才是他的最大亮点,HDFS具有高容错的特性 ...
- 【转载】Hadoop官方文档翻译——HDFS Architecture 2.7.3
HDFS Architecture HDFS Architecture(HDFS 架构) Introduction(简介) Assumptions and Goals(假设和目标) Hardware ...
- [HDFS Manual] CH1 HDFS体系结构
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- HDFS架构设计
原文:http://hadoop.apache.org/docs/r2.6.4/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html 介绍 HDFS是个分布式 ...
- HADOOP docker(十):hdfs 结构体系
1.简介2.namenode和datanode3.The File System Namespace 文件系统命名空间4.Data Replication 数据复制5.Replica Placemen ...
- Hadoop集群datanode磁盘不均衡的解决方案
一.引言: Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点,节点与节点之间磁盘大小不一样等等.当hdfs出现不平衡状况的时候,将引发很多问题,比 ...
随机推荐
- javaScript基础-02 javascript表达式和运算符
一.原始表达式 原始表达式是表达式的最小单位,不再包含其他表达式,包含常量,直接量,关键字和变量. 二.对象和数组的初始化表达式 对象和数组初始化表达式实际上是一个新创建的对象和数组. 三.函数表达式 ...
- ASP.NET CORE 2.* 利用集成测试框架覆盖HttpClient相关代码
ASP.NET CORE 集成测试官方介绍 我的asp.net core 项目里面大部分功能都是去调用别人的API ,大量使用HttpClient,公司单元测试覆盖率要求95%以上,很难做到不mock ...
- Mysql的B+ Tree索引
为什么要使用索引? 最简单的方式实现数据查询:全表扫描,即将整张表的数据全部或者分批次加载进内存,由于存储的最小单位是块或者页,它们是由多行数据组成,然后逐块逐块或者逐页逐页地查找,这样查找的速度非常 ...
- 集合中Iterator迭代器的使用以及实现原理。
collection集合元素通用的获取方式,在取之前先要判断集合中有没有元素,如果有就把这个元素取出来,继续在判断,如果还有就再取出来,一直把集合中的元素全取出来,这种去出方式叫做迭代. 迭代器的作用 ...
- React 多副本问题
Element ref was specified as a string (MySider) but no owner was set. This could happen for one of t ...
- Python模块之ncclient
一.简介 此模块是是netconf协议的客户端,可与netconf服务端进行交互 二.实验环境 1.操作系统:win10 2.python版本:python3.6.6 3.ncclient模块版本:0 ...
- Spring Boot 与 Mybatis、Mysql整合使用的例子
第一步: 创建一个SpringBoot的工程,在其中的Maven依赖配置中添加对JDBC.MyBatis.Mysql Driver的依赖具体如下: <!-- JDBC --> <de ...
- 10.源码分析---SOFARPC内置链路追踪SOFATRACER是怎么做的?
SOFARPC源码解析系列: 1. 源码分析---SOFARPC可扩展的机制SPI 2. 源码分析---SOFARPC客户端服务引用 3. 源码分析---SOFARPC客户端服务调用 4. 源码分析- ...
- keras+ ctpn 原理流程图
- Spring数据库连接
1.C3P0数据库连接 2.DBCP数据库连接 3.Druid数据库连接 C3P0数据库连接: 1.先到(http://www.mvnrepository.com/)Maven网址找到C3P0的数据源 ...