我目前正在四台机器上设置Hadoop集群。我有一个namenode和四个datanode在运行,它们通过docker swarm覆盖网络进行通信。
现在遇到的问题是: 当尝试从namenode外部写入HDFS时,namenode委托datanode执行操作。但是,namenode提供给HDFS客户端的datanode地址是来自docker swarm覆盖网络接口(在我的情况下是10.0.7.0/24),因此无法从外部访问。
是否有一种方法使namenode返回datanode地址,这些地址可以从外部访问?例如使用datanode所在服务器的公共IP地址?
提前感谢!
mode:global
让我有些困惑。如果这是 namenode,那不应该是replicated: 1
吗? - Snowendpoint_mode: dnsrr
的解决方案对我有效 :) 唯一的区别是我不使用 namenode 的全局模式。 - Snowmode: global
允许您在主机上公开一些端口,例如 8088 或 8080(Hadoop 和 Spark 的控制面板)。如果您不需要访问这些页面,则可以删除全局命名空间并使用replicas: 1
。 - Genaritoreplicas: 1
的情况下访问它们。我只需要添加hostname
关键字,就可以正常工作了。 - Snow