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

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

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

与同一问题相关的大多数问题都归结为名称节点上的数据节点的名称parsing,通过etc/hosts文件或通过使用dns静态。 docker的静态parsing不是一个选项,因为我不知道名称节点容器创build时的数据节点。 我想避免创build和维护额外的DNS服务。 理想情况下,我想用--link特性来连接所有的东西。

有没有一种方法来configurationHDFS,使它只使用IP地址工作?

我发现这个属性,并设置为false,但它并没有诀窍:

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

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

我会考虑重新configuration您的Docker镜像以使用不同的hosts文件[1]。 尤其是:

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

希望这对你有用!

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