Decommission Datanode

Decommission Datanode就是把Datanode从HDFS集群中移除掉。那问题来了,HDFS在设计时就把诸如机器故障考虑进去了,能否直接把某台运行Datanode的机器关掉然后拔走呢?我认为理论上可行的,不过在实际的集群中,如果某份数据只有一份拷贝而且它就在这个机器上,那么直接关掉并拔走机器就会造成数据丢失。本文将介绍如何Decommission Datanode以及可能会遇到的一些问题及其解决办法。

Decommission Datanode都做了什么?

Datanode是存储实际数据的,因此在Decommission Datanode的时候需要把Datanode上的数据迁移到别的机器上。这就好比公司里面有人离职了,他需要把他负责的工作交接给别的同事。

那如何Decommission Datanode呢?这需要如下两个步骤:

  1. 在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和一个常见问题及其解决办法。

时间: 2024-10-18 01:35:49

Decommission Datanode的相关文章

HADOOP docker(十):hdfs 结构体系

1.简介2.namenode和datanode3.The File System Namespace 文件系统命名空间4.Data Replication 数据复制5.Replica Placement: The First Baby Steps 复制块放置:初步的想法6.Replica Selection 复制块的选择7.Safemode 安全模式8.The Persistence of File System Metadata 文件系统元数据的一致性9.The Communication P

07.HDFS Architecture

HDFS Architecture Introduction HDFS是分布式文件系统,它被设计为运行在普通商用硬件之上.它与已经存在的文件系统有很多相似性.但是,也有巨大的不同.HDFS有很高的容错,被设计为部署在低廉的硬件上.HDFS提供为应用程序的数据提供一个高通量的访问,适合有大量数据的应用程序.HDFS放松了一些POSIX的需求,以使可以用流的方式访问文件系统的数据.HDFS最初作为Apache Nutch web搜索引擎项目的基础设施.HDFS是Apache Hadoop核心项目.

【转载】Hadoop官方文档翻译——HDFS Architecture 2.7.3

HDFS Architecture HDFS Architecture(HDFS 架构) Introduction(简介) Assumptions and Goals(假设和目标) Hardware Failure(硬件失效是常态) Streaming Data Access(支持流式访问) Large Data Sets(大数据集) Simple Coherency Model(简单一致性模型) “Moving Computation is Cheaper than Moving Data”(

HDFS Architecture--官方文档

HDFS Architecture Introduction The Hadoop Distributed File System (HDFS) is a distributed file system designed to run on commodity hardware. It has many similarities with existing distributed file systems. However, the differences from other distribu

HDFS 实验 (一) 原理

原文在此 https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html hadoop 两大组件 mapreduce和hdfs 用HDFS的目标 避免硬件故障 硬件故障是常态,而不是例外.一个HDFS实例可能包括数百或数千个服务器,存储文件系统的部分数据.事实上,有大量的组件,每个组件都有一个非平凡的失效概率意味着HDFS的一些组件总是非功能.因此,故障的快速检测,从自动的恢复是HDFS的一个核心构架目标. 流式数据访问 应用程序运行在HDFS需要流

Hadoop 2.7.3 完全分布式维护-动态增加datanode篇

原有环境 http://www.cnblogs.com/ilifeilong/p/7406944.html  IP       host JDK linux hadop role 172.16.101.55 sht-sgmhadoopnn-01 1.8.0_111 CentOS release 6.5 hadoop-2.7.3 NameNode,SecondaryNameNode,ResourceManager 172.16.101.58 sht-sgmhadoopdn-01 1.8.0_111

自动实现Hadoop Decommission shell脚本版

介绍 之前我有篇博文是介绍如何用ansible的playbook来自动化Hadoop Decommission的,本文介绍用shell脚本来实现. 脚本都放在跳板机上,远端服务器调用本地脚本完成所有操作,不需要拷贝文件到远端服务器. 正文 主脚本:decom.sh #!/bin/bash iplist=/home/hadoop/shell_scripts/iplist #1. process iplist ,append them into exclude files  # call appen

Ansible实现自动decommission Hadoop node

介绍 如何用ansible的playbook实现自动decommission hadoop 的node ? 正文 对于如何部署安装ansible ,请看http://haohaozhang.blog.51cto.com/9176600/1610499 hadoop部署,请看http://haohaozhang.blog.51cto.com/9176600/1607089 使用hadoop用户创建目录ansible_decom,里面的目录结构如下: ansible_decom/ ansible_d

HDFS源码分析(四)-----节点Decommission机制

前言 在Hadoop集群中,按照集群规模来划分,规模可大可小,大的例如百度,据说有4000台规模大小的Hadoop集群,小的话,几十台机器组成的集群也都是存在的.但是不论说是大型的集群以及小规模的集群,都免不了出现节点故障的情况,尤其是超大型的集群,节点故障几乎天天发生,因此如何做到正确,稳妥的故障情况处理,就显得很重要了,这里提供一个在Hadoop集群中可以想到的办法,就是Decommission操作,节点下线操作,一般的情况是故障节点已经是一个dead节点,或是出现异常情况的节点.此时如若不