模拟节点故障时,Hadoop群集中是否出现NoRouteToHostException?

时间:2018-12-28 14:42:08

标签: hadoop hdfs

我有一个hadoop集群,需要对它执行一些容错测试。在测试期间,当Hadoop(HDFS)群集中的某个节点关闭(以模拟故障)并且其IP地址不再存在于网络中时-其余节点上的HDFS无限期挂起,并带有NoRouteToHostExceptions-有没有办法解决此问题?

顺便说一句,如果我杀死节点上的hadoop进程但保持节点运行(IP地址在网络上仍然有效),则容错功能正常,没有挂起,一切正常。

我已经在这里看到了对此异常的解释: https://wiki.apache.org/hadoop/NoRouteToHost

如果无法解决此问题-我认为Hadoop集群应该能够容错节点故障?

谢谢

根据第一个答案进行更新: 是的,服务已在所有节点上完全复制以实现高可用性-这是设计的故意部分。

(1)如果我实际上只是杀死了该节点上的Hadoop服务,但让该节点处于运行状态(其IP地址在网络上仍然有效),则不会发生此问题,并且其余节点将继续正常运行而不会丢失数据(因为数据已在所有节点上完全复制)。

(2)当我关闭节点并且其IP在网络上不再可用,其余节点无法再与其建立TCP连接(由于IP不再存在)时,就会出现问题,因此它们只是挂起无限期出现NoRouteToHostExceptions-这是我要解决的问题

再次具有讽刺意味的是,如果IP地址仍然有效但Hadoop服务已关闭,则不会发生此挂起的问题-(1)以上-其余节点仍可以建立与“模拟失败”节点的TCP连接,但是Hadoop服务中断。

这不是网络问题-这是模拟群集中节点故障的受控测试。 当节点关闭以模拟故障时,很明显IP地址在网络上将不再有效。我们遇到的问题是,当节点的IP地址不再存在时,Hadoop集群似乎无法处理这种情况。我们所期望的(或者也许希望是一个更好的词),当Hadoop集群中的其余节点遇到NoRouteToHostException时,他们会认为该节点发生了故障,如果没有该节点,它将继续正常运行。如果这不可能,那没关系,我只需要确定就可以确定我没有错过任何东西。再次感谢

1 个答案:

答案 0 :(得分:0)

  

我认为Hadoop集群应该能够容错节点故障?

一点

  • 如果您有一个NameNode,但它发生故障,则无用。您无法读取/写入/处理数据。
  • 如果HDFS块副本的所有DataNode都已关闭,则无法读取该数据。
  • 如果ResourceManager关闭,则无法运行MapReduce,Spark等作业。

尚不清楚您关闭了哪台计算机,但是我建议您查看NameNode和ResourceManager HA配置,并将DataNodes的默认复制因子设置为至少3。

但是,“没有通往主机的路由”不是Hadoop问题,也不是在应用程序级别要解决的问题。如Wiki所述,

  

这些都是网络配置/路由器问题。由于是您的网络, 只有您 可以发现并找出问题所在。

这基本上意味着您需要确保路由表和DNS服务器或主机文件知道服务器IP的位置。