HDFS之DataNode动态添加与卸载

news/2024/5/20 2:31:53 标签: HDFS

动态添加一个DataNode


集群扩容需要添加新DataNode,通常是在需要增加存储的情况下,虽然有时也是为了增加IO总带宽或减小单台机器失效的影响。在运行中的HDFS集群上增加新的DataNode是一个在线操作或热操作。对于要使用HDFS主机及功能的用户,新主机的IP地址必须添加到include文件中,但主机列表可以动态更新而无需重新启动NameNode。

  1. 把DataNode的IP地址加入dfs.hosts参数指定的文件中。每个IP地址占用一行。(dfs.hosts参数是控制Datanode的白名单,仅仅在dfs.hosts文件中指定的Datanode有权限连接到Namenode上。如果该参数不指定,那么默认所有的Datanode都可以连接到Namenode上。)(如果需要连接yarn需要在yarn-site.xml文件中添加参数yarn.resourcemanager.nodes.include-path指定的文件中添加需要添加的NodeManager)

  2. HDFS超级用户或有类似权限的用户执行命令行

hdfs dfsadmin -refreshNodes
hdfs rmadmin -refreshNodes
  • 1
  • 2
  1. 如果使用机架感知机制,需要为新加入主机更新相关的机架信息。

  2. 启动DataNode进程。

hadoop-daemon.sh  start  datanode

yarn-daemon.sh  start  nodemanager
  • 1
  • 2
  • 3
  1. 通过NameNode的Web界面或命令hadoop dfsadmin -report的输出来确定新节点是否已连接。

      仅当使用包含HDFS主机的功能时需要执行步骤1和2。 
      

动态删除一个DataNode

DataNode可能被卸载以便把它从集群中安全移除,同时还要保持主机上所有块的复制因子。这个过程可能很漫长,取决于被卸载主机上的数据量、集群工作数以及网络速度等因素。因为卸载的时间太长,在操作系统重启或配置变化引发的重启所导致的短暂停机状态下不适合做卸载节点的操作。如果想保证所有数据块安全,就需要使用安全卸载功能。

  1. 把要删除DataNode的IP地址添加到(hdfs-site.xml)dfs.hosts.exclude参数指定的文件中,文件名必须采用绝对路径。每个IP地址占用一行。把要删除的DataNode的IP地址添加到(yarn-site.xml)yarn.resourcemanager.nodes.exclude-path参数指定的文件中。(如果删除的DataNode不是NodeManager,不用配置yarn文件)

  2. HDFS超级用户或拥有类似权限的用户执行

hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes
  • 1
  • 2
  1. 监控NameNode的Web界面确保卸载(相对应的DataNode状态显示Decommission In Progress)正在进行。有时更新会滞后几秒。

  2. 因为DataNode上的数据较多,卸载有时会持续数小时甚至几天。卸载完成时,NameNode界面会把DataNode显示成已卸载。(如果一直处于卸载中,可能是由于文件副本数设置的问题,可对文件副本数进行调节,可以完成卸载)

  3. 停止DataNode进程与nodemanager进程。

  4. 如果不打算把机器放回集群,就需要在HDFS的include和exclude文件中去除DataNode,同时更新机架拓扑数据库。

  5. 执行

hdfs dfsadmin -refreshNodes
yarn  rmadmin -refreshNodes
  • 1
  • 2

使NameNode进行节点更新。

后序

在添加或者删除DataNode后,可能会需要调节已上传文件的副本数:

hadoop fs -setrep -R replicationNumber /
  • 1

笔者已经完整操作过相关过程,如有任何疑问,可以留言进行询问!期待一起进行交流!

https://blog.csdn.net/it_dx/article/details/72863292


http://www.niftyadmin.cn/n/1039594.html

相关文章

Flume入门——Selector、Chanel等

1、selector (http://blog.csdn.net/looklook5/article/details/40430965) (http://blog.csdn.net/xiao_jun_0820/article/details/38116103#) 选择器可以工作在复制 多路复用(路由) 模式下 复制模式 属性说明&…

Flume-ng HDFS Sink “丢数据”

http://blog.51cto.com/boylook/1308188线上对Flume流入HDFS配置path:p1,每分钟切一个文件,定期从p1从move完成的(rename)文件到外部表进行计算分析,发现有“丢数据”现象:即在p1下经常看到几GB的.tmp文件&…

Redis(5)—— 字符串

2.2 字符串 字符串类型是Redis最基础的数据结构。 首先键都是字符串类型, 而且其他几种数据结构都是在字符串类型基础上构建的, 所以字符串类型能为其他四种数据结构的学习奠定基础。 如图2-7所示, 字符串类型的值实际可以是字符串&#xff0…

Redis(6)—— 哈希

几乎所有的编程语言都提供了哈希( hash) 类型, 它们的叫法可能是哈希、 字典、 关联数组。 在Redis中, 哈希类型是指键值本身又是一个键值对结构, 形如value{{field1, value1}, ...{fieldN&…

Redis(7)—— 列表

列表( list) 类型是用来存储多个有序的字符串, 如图2-18所示, a、b、 c、 d、 e五个元素从左到右组成了一个有序的列表, 列表中的每个字符串称为元素( element) , 一个列表最多可以存…

Redis()—— Pipeline

3.3.1 Pipeline概念 Redis客户端执行一条命令分为如下四个过程: 1) 发送命令 2) 命令排队 3) 命令执行 4) 返回结果 其中1) 4) 称为Round Trip Time( RTT, 往返时间&…

Redis(5.1)—— 持久化RDB

Redis支持RDB和AOF两种持久化机制, 持久化功能有效地避免因进程退出造成的数据丢失问题, 当下次重启时利用之前持久化的文件即可实现数据恢复。 RDB持久化是把当前进程数据生成快照保存到硬盘的过程, 触发RDB持久化过程分为手动触发和自动触…

Redis(6)—— 复制

在分布式系统中为了解决单点问题, 通常会把数据复制多个副本部署到其他机器, 满足故障恢复和负载均衡等需求。 Redis也是如此, 它为我们提供了复制功能, 实现了相同数据的多个Redis副本。 复制功能是高可用Redis的基础&#xff0c…