更改Hadoop HDFS数据节点服务器的IP地址,避免阻塞池错误

时间:2015-02-10 03:10:04

标签: hadoop hdfs cloudera cloudera-manager

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

2 个答案:

答案 0 :(得分:3)

在CLOUDERA 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
    

答案 1 :(得分:2)

最好的结果是:

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

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