我正在尝试在 2 节点集群上的亚马逊实例上设置 hadoop。每个实例都有一个公共(public) DNS,我用它来引用它们。因此,在两台机器上的/etc/hosts 文件中,我附加如下行:
{public dns of 1st instance} node1
{public dns of 2st instance} node2
我还可以通过简单地执行以下操作从另一个实例 ssh 进入每个实例:
ssh {public dns of the other instance}
在第一个实例文件的 hadoop/conf/slaves 中我有:
localhost
node2
当我启动脚本 bin/start-dfs.sh 时 它能够在主节点上启动名称节点、数据节点和辅助名称节点,但它显示:
node2: ssh: Could not resolve hostname node2: Name or service not known
如果我尝试打印出来的结果是一样的:
ssh node2
我想问题是如何告诉它将 node2 与第二个实例的公共(public) dns 相关联。追加一下还不够吗
{public dns of 2st instance} node2
到/etc/hosts 文件的行? 我必须重新启动实例吗?
最佳答案
当您没有与 IP 地址关联的真实 DNS 时,
/etc/hosts
的作用类似于本地 DNS。
如果您可以直接在从属文件和主文件中使用 {public dns of 1st instance},您真的需要 {public dns of 1st instance} node1
映射吗?
此外,最好使用亚马逊实例的私有(private)IP地址,而不是使用公共(public)IP地址。您可以在每个实例的终端中执行 ifconfig
并确定它们的私有(private) 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
而且,这是为了让 Amazon 实例(机器)能够相互解析(如果您无论如何都计划映射它们)。
关于hadoop - ssh:无法解析主机名。名称或服务未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18134231/