hdfs集群迁移、换ip、重命名
迁移方案
目标:
datanode 迁移后对集群不造成较大的影响,服务可用数据不丢失。
主要涉及:
- 主机名、ip 变化
- 主机、ip 不变化
相关知识:
在 datanode 迁移时,必然导致节点停止心跳,如果超过心跳检测超时的时间,会被 nn 认定为死节点,为满足副本数要求造成集群内大量块复制现象。如果想短时间内不使节点变成 dead 节点,需要人工把超时时间设置加大(心跳检测默认下判定死亡时间为 630s),修改参数:dfs.namenode.heartbeat.recheck-interval = 10800000.
此时超时时间为 3h。
1,更新 standby namenode 的 hdfs-site 配置重启,而后进行 ha 切换,更新配置重启。此时适用于 datanode 不涉及主机名、ip 变化的情况
2,更换主机名、ip 地址的迁移。对于更换主机名、ip 的迁移,在可控时间内(心跳超时)恢复 datanode 服务即可,对集群没什么影响。见下:
关于主机名、ip 变更
停止集群服务
修改:
- VIM etc/hosts #配置 ip 和主机名的对应关系并使生效
- 节点重启
注:此处需要重点检查的是配置文件中是绑定的 ip 还是主机名,需检查手动改正。
改变 hostname 和 ip,不会导致 DN 端的 StorageID、ClusterID、BlockPoolID 发生变化,会首先出现 WrapException 异常,之后 DN 会重新和 NN 握手、注册,接收 NN 返回的命令
hdfs 集群重命名
1,停止服务(必须)
2,修改 hdfs 集群名称相关配置
- core-site
fs.defaultFS = hdfs://clusterA 。 hdfs://clusterA 改成 hdfs://clusterB - hdfs-site
dfs.nameservices = clusterA
dfs.ha.namenodes.clusterA = nn1,nn2
dfs.ha.namenode.rpc-address.clusterA.nn1=nn1:9000
dfs.ha.namenode.rpc-address.clusterA.nn2=nn2:9000
dfs.ha.namenode.http-address.clusterA.nn1=nn1:50070
dfs.ha.namenode.http-address.clusterA.nn2=nn2:50070
dfs.client.filover.proxy.provider.clusterA=...
这里的 clusterA 全改成 clusterB - 格式化 hdfs 依赖的 znode
因为 hdfs 在第一次启动时会在关联的 znode 中注册存放信息,包括 active namenode 主机信息等,因而在修改主机名时需要修改。
hdfs zkfc -formatZK
3,重启相关服务
另外,如果有使用 yarn,也需要在 hdfs 集群重命名的时候对 yarn 完成相同操作更改。