我试图在我的亚马逊实例上,在2节点集群上设置hadoop。每个实例都有一个公共dns,我用它来引用它们。所以在两台机器上的/ etc / hosts文件中我都附加了这样的行:
{public dns of 1st instance} node1
{public dns of 2st instance} node2
我也可以通过以下方式从另一个实例中进入每个实例:
ssh {public dns of the other instance}
在第一个实例文件的hadoop / conf / slaves中我有:
localhost
node2
当我启动脚本bin / start-dfs.sh时 它能够在master上启动namenode,datanode和secondary namenode,但它说:
node2: ssh: Could not resolve hostname node2: Name or service not known
如果我尝试的话就打印出来了:
ssh node2
我想问题是如何告诉它将node2与第二个实例的公共DNS关联起来。
附加是不够的{public dns of 2st instance} node2
到/ etc / hosts文件的行? 我是否必须重启实例?
答案 0 :(得分:2)
/etc/hosts
类似于本地DNS。
如果你可以直接在slave和master文件中使用{1st dns of 1st instance},你真的需要{public dns of 1st instance} node1
映射吗?
此外,最好使用亚马逊实例的私有IP地址,而不是使用公共IP地址。您可以在每个实例的终端中执行ifconfig
并确定其私有IP地址(如果有)。他们可能基本上将从10.x.x.x / 172.x.x.x / 192.x.x.x开始?然后,您可以将它们映射到每个亚马逊实例的/ etc / hosts中。
因此,每台机器中的/ etc / hosts应该看起来像 -
机-1:
{IP_address_1st_instance} node1
{IP_address_2st_instance} node2
机2:
{IP_address_1st_instance} node1
{IP_address_2st_instance} node2
并且,如果您无论如何计划映射它们,那么亚马逊实例(机器)可以相互解决。