更改 Hadoop HDFS 数据节点服务器的 IP 地址并避免块池错误
Change IP address of a Hadoop HDFS data node server and avoid Block pool errors
我正在使用 Hadoop 的 cloudera 发行版,最近不得不更改集群中几个节点的 IP 地址。更改后,在其中一个节点(旧IP:10.88.76.223,新IP:10.88.69.31)上尝试启动数据节点服务时出现以下错误。
Initialization failed for block pool Block pool BP-77624948-10.88.65.174-13492342342 (storage id DS-820323624-10.88.76.223-50010-142302323234) service to hadoop-name-node-01/10.88.65.174:6666
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.protocol.DisallowedDatanodeException): Datanode denied communication with namenode: DatanodeRegistration(10.88.69.31, storageID=DS-820323624-10.88.76.223-50010-142302323234, infoPort=50075, ipcPort=50020, storageInfo=lv=-40;cid=cluster25;nsid=1486084428;c=0)
at org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager.registerDatanode(DatanodeManager.java:656)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.registerDatanode(FSNamesystem.java:3593)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.registerDatanode(NameNodeRpcServer.java:899)
at org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolServerSideTranslatorPB.registerDatanode(DatanodeProtocolServerSideTranslatorPB.java:91), I was unable to start the datanode service due to the following error:
有没有人成功更改 hadoop 数据节点的 IP 地址并将其重新加入集群而不会丢失数据?
在 CLOUDERA MANAGER 中更改主机 IP
更改所有节点上的主机 IP
sudo nano /etc/hosts
如果主节点 ip 发生变化,则在所有节点上编辑 ip cloudera config.ini
sudo nano /etc/cloudera-scm-agent/config.ini
在 PostgreSQL 数据库中更改 IP
密码为Open PostgreSQL密码
cat /etc/cloudera-scm-server/db.properties
找到密码行
Example. com.cloudera.cmf.db.password=gUHHwvJdoE
打开 PostgreSQL
psql -h localhost -p 7432 -U scm
Select table PostgreSQL
select name,host_id,ip_address from hosts;
更新tableIP
update hosts set ip_address = 'xxx.xxx.xxx.xxx' where host_id=x;
退出工具
\q
重启所有节点的服务
service cloudera-scm-agent restart
在主节点上重启服务
service cloudera-scm-server restart
结果更好:
- 从集群中停用服务器以确保所有块都被复制到集群中的其他节点。
- 从集群中删除服务器
- 连接服务器,修改IP地址,重启cloudera agent
- 请注意,cloudera 管理器现在显示该服务器的两个条目。删除旧IP和心跳时间最长的条目
- 将服务器添加到所需的集群并将所需的角色添加回服务器(例如 HDFS datanode、HBASE RS、Yarn)
- HDFS会读取所有数据盘,识别块池和集群ID,然后注册datanode。
所有数据都可用,过程对任何客户都是透明的。
注意: 如果您 运行 来自 HDFS 客户端的名称解析错误,应用程序可能缓存了旧 IP并且 很可能 需要重新启动。特别是 Java 以前引用此服务器的客户端,例如由于 JVM 无限期地缓存 IP,必须重新启动 HBASE 客户端。基于 Java 的客户端可能会抛出与更改 IP 的服务器的连接相关的错误,因为它们在重新启动之前缓存了旧 IP。
我正在使用 Hadoop 的 cloudera 发行版,最近不得不更改集群中几个节点的 IP 地址。更改后,在其中一个节点(旧IP:10.88.76.223,新IP:10.88.69.31)上尝试启动数据节点服务时出现以下错误。
Initialization failed for block pool Block pool BP-77624948-10.88.65.174-13492342342 (storage id DS-820323624-10.88.76.223-50010-142302323234) service to hadoop-name-node-01/10.88.65.174:6666
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.protocol.DisallowedDatanodeException): Datanode denied communication with namenode: DatanodeRegistration(10.88.69.31, storageID=DS-820323624-10.88.76.223-50010-142302323234, infoPort=50075, ipcPort=50020, storageInfo=lv=-40;cid=cluster25;nsid=1486084428;c=0)
at org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager.registerDatanode(DatanodeManager.java:656)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.registerDatanode(FSNamesystem.java:3593)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.registerDatanode(NameNodeRpcServer.java:899)
at org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolServerSideTranslatorPB.registerDatanode(DatanodeProtocolServerSideTranslatorPB.java:91), I was unable to start the datanode service due to the following error:
有没有人成功更改 hadoop 数据节点的 IP 地址并将其重新加入集群而不会丢失数据?
在 CLOUDERA MANAGER 中更改主机 IP
更改所有节点上的主机 IP
sudo nano /etc/hosts
如果主节点 ip 发生变化,则在所有节点上编辑 ip cloudera config.ini
sudo nano /etc/cloudera-scm-agent/config.ini
在 PostgreSQL 数据库中更改 IP
密码为Open PostgreSQL密码
cat /etc/cloudera-scm-server/db.properties
找到密码行
Example. com.cloudera.cmf.db.password=gUHHwvJdoE
打开 PostgreSQL
psql -h localhost -p 7432 -U scm
Select table PostgreSQL
select name,host_id,ip_address from hosts;
更新tableIP
update hosts set ip_address = 'xxx.xxx.xxx.xxx' where host_id=x;
退出工具
\q
重启所有节点的服务
service cloudera-scm-agent restart
在主节点上重启服务
service cloudera-scm-server restart
结果更好:
- 从集群中停用服务器以确保所有块都被复制到集群中的其他节点。
- 从集群中删除服务器
- 连接服务器,修改IP地址,重启cloudera agent
- 请注意,cloudera 管理器现在显示该服务器的两个条目。删除旧IP和心跳时间最长的条目
- 将服务器添加到所需的集群并将所需的角色添加回服务器(例如 HDFS datanode、HBASE RS、Yarn)
- HDFS会读取所有数据盘,识别块池和集群ID,然后注册datanode。
所有数据都可用,过程对任何客户都是透明的。
注意: 如果您 运行 来自 HDFS 客户端的名称解析错误,应用程序可能缓存了旧 IP并且 很可能 需要重新启动。特别是 Java 以前引用此服务器的客户端,例如由于 JVM 无限期地缓存 IP,必须重新启动 HBASE 客户端。基于 Java 的客户端可能会抛出与更改 IP 的服务器的连接相关的错误,因为它们在重新启动之前缓存了旧 IP。