hadoop配置:为什么公共dns工作而不是公共ip?

zf9nrax1  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(401)

我正在ec2上安装hadoop。对于 fs.default.name , fs.defaultFS ,如果我使用dns作为名称节点,一切都正常。但是如果我使用公共ip,名称节点不能以except开头 Problem binding to [54.210.86.207:9000] java.net.BindException: Cannot assign requested address; . 有什么解释为什么公共dns有效而不是公共ip?

<property>
    <name>fs.default.name</name>
    <value>hdfs://54.210.86.207:9000</value>
    <!-- <value>hdfs://ec2-54-210-86-207.compute-1.amazonaws.com:9000</value> -->
  </property>

  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://54.210.86.207:9000</value>
    <!-- <value>hdfs://ec2-54-210-86-207.compute1.amazonaws.com:9000</value> -->
 </property>
8wtpewkr

8wtpewkr1#

在vpc内部,对示例的公共ip地址的公共主机名进行dns查询可以做一些有用的事情——并且有文档记录——但在其他方面可能是意外的:它解析为机器的私有ip地址。当然,来自外界的质疑,只能通过公共广播解决。
我们将公共dns主机名解析为示例网络外部示例的公共ipv4地址,并从示例网络内部解析为示例的私有ipv4地址。
http://docs.aws.amazon.com/amazonvpc/latest/userguide/vpc-dns.html
这正是为什么这是有效的。
ec2内部机器的公共ip地址实际上并没有绑定到示例os的ip堆栈——只有私有ip地址是。internet网关处理公共地址和私有地址之间的1:1转换,因为在进出示例的过程中,通信量通过它。
而且,这是一种可取的行为,因为您不希望示例与其他示例(或示例本身)对话使用他们的公共地址,因为你需要为通过互联网网关发送和返回的数据支付运输费。在单个可用性区域内,使用专用ip地址时,不需要为示例之间的流量付费。此外,当两个示例通过公共ip相互通信时,源安全组的标识必然丢失,这意味着您不能使用源安全组标识进行入口控制。

xesrikrc

xesrikrc2#

我已经有一段时间没有为hadoop工作了,但是当我使用它的时候,没有办法只使用一个ip来引用namenode或datanodes(我认为这与阻止用户在失败时使用硬编码ip地址有关,但是我可能错了)。使用原始ip地址是一种不好的做法,但是有了这个限制,使用hadoop就更难了。这是我能找到的最接近真实来源的东西:https://issues.apache.org/jira/browse/hadoop-685
为了避免这种情况,您可以托管您自己的dns服务器(dnsmasq)和我们,或者在所有计算机的/etc/hosts中添加条目以生成“假”名称,并在配置中使用这些名称。对不起,我没有更好的解决办法。。。

相关问题