我目前正在尝试使用Hadoop 2.3.0构建的遗留应用程序(我知道......不要问)。只要我在与单节点hadoop部署相同的机器上运行客户端,一切都工作正常。现在我将客户端应用程序转移到本地网络上的另一台机器上,我无法连接到数据节点。
localhost/127.0.0.1:50010
进一步..
HADOOP_URL
现在我能够从客户端的网络浏览器监控hadoop部署,一切似乎都在那里工作正常。
我已经阅读了答案here和here,但我仍然遇到同样的错误。我无法让客户端停止查找/etc/hosts
而不是数据节点的正确IP地址(或主机名)。
我的首先关注是我是否遗漏了一些要在客户端应用程序上完成的配置。我的应用程序使用名为localhost/127.0.0.1
的变量连接到数据库,其值正确设置为群集的主机名,而后者又解析为{{1}}中的远程IP。可能是我错过了在客户端设置的更多配置。很高兴在这里有一些想法。
但是,this answer表明Namenode会通知客户端Datanode的主机名。这支持我的客户端能够连接到Namenode的可能性,因此,客户端配置工作正常。
最后,我需要找到一种方法让Namenode返回我设置的主机名,而不是返回{{1}}。 我该如何解决这个问题?
答案 0 :(得分:1)
因此,最后,我需要找到一种方法,使Namenode返回我设置的主机名,而不是返回localhost / 127.0.0.1。我该如何解决这个问题?
=>根据this article,也许here是您需要的配置
默认情况下,HDFS客户端使用NameNode提供的IP地址连接到DataNodes。根据网络配置,客户端可能无法访问此IP地址。该修补程序使客户端可以执行自己的DataNode主机名的DNS解析。以下设置启用了此行为。
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
<description>Whether clients should use datanode hostnames when
connecting to datanodes.
</description>
</property>
答案 1 :(得分:0)
注意:如果您使用的是虚拟机-将VM设置更改为仅主机 并重新启动计算机
为了确保,请确保两台计算机之间设置的连接是无密码的ssh。这里有一篇不错的文章:SSH passwordless
在使用spark命令时,请确保使用user @ HDFS-hostname
示例:
lines=sc.textFile("hdfs://jack@192.xxx.xx.1xx:8020/user/jack/ulysses10.txt")