我正在使用HA名称节点配置Hadoop 2.2.0稳定版本,但我不知道如何配置对集群的远程访问。
我配置了手动故障转移的 HA 名称节点,并定义了dfs.nameservices
并且我可以从集群中包含的所有节点访问带有名称服务的 hdfs,但不能从外部访问。
我可以通过直接联系活动名称节点在 hdfs 上执行操作,但我不想这样,我想联系集群,然后重定向到活动名称节点。我认为这是 HA 群集的正常配置。
现在有人怎么做吗?
(提前感谢...
您必须向 hdfs 站点添加更多值:
<property>
<name>dfs.ha.namenodes.myns</name>
<value>machine-98,machine-99</value>
</property>
<property>
<name>dfs.namenode.rpc-address.myns.machine-98</name>
<value>machine-98:8100</value>
</property>
<property>
<name>dfs.namenode.rpc-address.myns.machine-99</name>
<value>machine-145:8100</value>
</property>
<property>
<name>dfs.namenode.http-address.myns.machine-98</name>
<value>machine-98:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.myns.machine-99</name>
<value>machine-145:50070</value>
</property>
您需要联系其中一个 Name 节点(就像您当前所做的那样) - 没有要联系的群集节点。
Hadoop客户端代码知道两个名称节点的地址(在core-site.xml中),并且可以识别哪个是活动的,哪个是备用的。可能有一种方法可以询问仲裁中的 zookeeper 节点以识别活动/备用节点(也许,我不确定),但您也可以检查其中一个名称节点 - 你有 50/50 的机会它是活动节点。
我必须检查,但如果你只是从 HDFS 读取,你也许可以查询。
对于活动名称节点,您可以随时询问Zookeeper。您可以从下面的 Zk 路径获取活动名称节点。
/hadoop-ha/namenodelogicalname/ActiveStandbyElectorLock
有两种方法可以解决这种情况(使用 java 编写代码)
-
在代码中使用 core-site.xml 和 hdfs-site.xml
通过添加资源加载会议
-
在代码中使用 conf.set
通过 conf.set 设置 Hadoop conf
使用示例 conf.set