如何在没有DNS的情况下运行HDFS集群

时间:2014-05-01 15:08:41

标签: hadoop dns hdfs docker

我正在构建一个本地HDFS开发环境(实际上是hadoop + mesos + zk + kafka),以简化Spark作业的开发并促进本地集成测试。 所有其他组件都运行正常,但我遇到了HDFS问题。当数据节点尝试连接到名称节点时,我得到DisallowedDataNodeException

org.apache.hadoop.hdfs.server.protocol.DisallowedDatanodeException: Datanode denied communication with namenode

与同一问题相关的大多数问题归结为名称节点上的数据节点的名称解析,无论是通过etc/hosts文件还是使用dns,都是静态的。静态分辨率不是docker的选项,因为在创建名称节点容器时我不知道数据节点。我想避免创建和维护其他DNS服务。理想情况下,我想使用docker的--link功能连接所有内容。

有没有办法以只使用IP地址工作的方式配置HDFS?

我找到了这个属性并设置为false,但它没有做到这一点:

dfs.namenode.datanode.registration.ip-hostname-check(默认值:true)

有没有办法让多节点本地HDFS集群只使用IP地址而不使用DNS?

1 个答案:

答案 0 :(得分:4)

我会考虑重新配置你的Docker镜像以使用不同的主机文件[1]。特别是:

  1. 在Dockerfile中,执行switch-a-roo [1]
  2. 打开主节点
  3. 打开数据节点,链接
  4. 在启动datanode之前,将/ etc / hosts复制到新位置/ tmp / hosts
  5. 将主节点的名称和主节点ip附加到新的主机文件
  6. 希望这适合你!

    [1] https://github.com/dotcloud/docker/issues/2267#issuecomment-40364340