动态添加一个DataNode
集群扩容需要添加新DataNode,通常是在需要增加存储的情况下,虽然有时也是为了增加IO总带宽或减小单台机器失效的影响。在运行中的HDFS集群上增加新的DataNode是一个在线操作或热操作。对于要使用HDFS主机及功能的用户,新主机的IP地址必须添加到include文件中,但主机列表可以动态更新而无需重新启动NameNode。
把DataNode的IP地址加入dfs.hosts参数指定的文件中。每个IP地址占用一行。(dfs.hosts参数是控制Datanode的白名单,仅仅在dfs.hosts文件中指定的Datanode有权限连接到Namenode上。如果该参数不指定,那么默认所有的Datanode都可以连接到Namenode上。)(如果需要连接yarn需要在yarn-site.xml文件中添加参数yarn.resourcemanager.nodes.include-path指定的文件中添加需要添加的NodeManager)
以HDFS超级用户或有类似权限的用户执行命令行
hdfs dfsadmin -refreshNodes
hdfs rmadmin -refreshNodes
- 1
- 2
如果使用机架感知机制,需要为新加入主机更新相关的机架信息。
启动DataNode进程。
hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager
- 1
- 2
- 3
通过NameNode的Web界面或命令hadoop dfsadmin -report的输出来确定新节点是否已连接。
仅当使用包含HDFS主机的功能时需要执行步骤1和2。
动态删除一个DataNode
DataNode可能被卸载以便把它从集群中安全移除,同时还要保持主机上所有块的复制因子。这个过程可能很漫长,取决于被卸载主机上的数据量、集群工作数以及网络速度等因素。因为卸载的时间太长,在操作系统重启或配置变化引发的重启所导致的短暂停机状态下不适合做卸载节点的操作。如果想保证所有数据块安全,就需要使用安全卸载功能。
把要删除DataNode的IP地址添加到(hdfs-site.xml)dfs.hosts.exclude参数指定的文件中,文件名必须采用绝对路径。每个IP地址占用一行。把要删除的DataNode的IP地址添加到(yarn-site.xml)yarn.resourcemanager.nodes.exclude-path参数指定的文件中。(如果删除的DataNode不是NodeManager,不用配置yarn文件)
以HDFS超级用户或拥有类似权限的用户执行
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes
- 1
- 2
监控NameNode的Web界面确保卸载(相对应的DataNode状态显示Decommission In Progress)正在进行。有时更新会滞后几秒。
因为DataNode上的数据较多,卸载有时会持续数小时甚至几天。卸载完成时,NameNode界面会把DataNode显示成已卸载。(如果一直处于卸载中,可能是由于文件副本数设置的问题,可对文件副本数进行调节,可以完成卸载)
停止DataNode进程与nodemanager进程。
如果不打算把机器放回集群,就需要在HDFS的include和exclude文件中去除DataNode,同时更新机架拓扑数据库。
执行
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