2

我正在使用 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 地址并将其重新加入集群而不会丢失数据?

4

2 回答 2

3

在 CLODERA MANAGER 中更改主机 IP

  1. 更改所有节点上的主机 IP

    sudo nano /etc/hosts
    
  2. 如果主节点 ip 更改,则编辑所有节点上的 ip cloudera config.ini

    sudo nano /etc/cloudera-scm-agent/config.ini
    
  3. 更改 PostgreSQL 数据库中的 IP

  4. 对于密码 打开 PostgreSQL 密码

    cat /etc/cloudera-scm-server/db.properties
    
  5. 查找密码行

    Example. com.cloudera.cmf.db.password=gUHHwvJdoE
    
  6. 打开 PostgreSQL

    psql -h localhost -p 7432 -U scm
    
  7. 在 PostgreSQL 中选择表

    select name,host_id,ip_address from hosts;
    
  8. 更新表 IP

    update hosts set ip_address = 'xxx.xxx.xxx.xxx' where host_id=x;
    
  9. 退出工具

    \q
    
  10. 在所有节点上重新启动服务

    service cloudera-scm-agent restart
    
  11. 在主节点上重启服务

    service cloudera-scm-server restart
    
于 2015-03-10T16:49:31.890 回答
2

结果更好:

  1. 从集群中停用服务器,以确保所有块都复制到集群中的其他节点。
  2. 从集群中删除服务器
  3. 连接到服务器并更改IP地址然后重新启动cloudera代理
  4. 请注意,cloudera manager 现在显示此服务器的两个条目。删除旧IP和最长心跳时间的条目
  5. 将服务器添加到所需的集群并将所需的角色添加回服务器(例如 HDFS 数据节点、HBASE RS、Yarn)
  6. HDFS 会读取所有数据盘,识别块池和集群 ID,然后注册数据节点。

所有数据都将可用,并且该过程对任何客户都是透明的。

注意:如果您遇到来自 HDFS 客户端的名称解析错误,则应用程序可能已经缓存了旧 IP,并且很可能需要重新启动。特别是之前引用此服务器的 Java 客户端,例如 HBASE 客户端,由于 JVM 无限期地缓存 IP,必须重新启动。基于 Java 的客户端可能会抛出与更改 IP 的服务器的连接相关的错误,因为它们在重新启动之前缓存了旧 IP。

于 2015-04-14T06:33:03.177 回答