名称节点不使用具有 HDFS 联合的完全分布式 hadoop 集群中的所有数据节点

Namenodes don't use all datanodes in a fully distributed hadoop cluster with HDFS Federation

实际上,作为最终项目任务从事大数据项目的工作,我一直在寻找在完全分布式集群上实现 运行 HDFS 联合的方法。

我的集群规格是:

使用一个namenode,集群(1个namenode + 2个datanode)工作正常,所有配置似乎都是正确的。

即使在 Apache Hadoop 的官方文档中,我也找不到那么多解释如何完全配置 HDFS Federation(针对 运行 共享所有数据节点的两个名称节点)的教程。 我用的是下面的Fully Distributed Hadoop Federation Cluster


我尝试 运行 有效地实现 HDFS 联合失败,即使 dfs 守护进程已成功启动,但数据节点并未被所有名称节点使用。

实际情况:

当我启动 dfs 服务时(使用 start-dfs.sh),Namednode1 使用所有数据节点,Namenode2 使用 none。 或者每个namenode只使用一个唯一的datanode(Namenode1使用Datanode1,Namenode2使用Datanode2)。

数据节点的使用似乎是随机的,但它们从来没有被两个名称节点同时使用过(我的objective)

如果有人知道如何 运行 具有多个名称节点的 HDFS 联合,欢迎您提供帮助 =P 谢谢。

我终于找到问题并改正了。

它在namenodes的hdfs-site.xml配置文件中。您可以在 hadoop 安装目录中找到它:在我的例子中,它位于 ~/hadoop-2.7.2/etc/hadoop/

除了标准配置,确保dfs.name.dir属性指的是每个namenode的元数据目录的位置。 就我而言,对于所有名称节点,我为此目的创建了 /hdfs/name 目录并具有适当的所有权(专门为使用 hadoop 创建的用户)

因此,您必须在集群的所有名称节点的 hdfs-site.xml 中添加以下行 il 添加其他配置:

<property>
<name>dfs.name.dir</name>
<value>file:///hdfs/name,file:///hdfs/name</value>
</property>

现在我集群的两个名称节点都使用了所有的数据节点。 希望它会有所帮助。 我也推荐阅读这本书,这本书对纠正我遇到的问题非常有用 Hadoop Operations - Eric Sammer (O'Reilly)