【发布时间】:2019-01-12 13:10:15
【问题描述】:
我有 10 个数据节点和 2 个名称节点 Hadoop 集群配置了 3 个复制,我想知道如果其中一个数据节点出现故障,hadoop 会尝试在其他活动节点上生成丢失的复制吗?或者什么都不做(因为还剩下 2 个副本)。
补充,如果down数据节点过一会又回来了,hadoop能识别那个节点上的数据吗?谢谢!
【问题讨论】:
标签: hadoop
我有 10 个数据节点和 2 个名称节点 Hadoop 集群配置了 3 个复制,我想知道如果其中一个数据节点出现故障,hadoop 会尝试在其他活动节点上生成丢失的复制吗?或者什么都不做(因为还剩下 2 个副本)。
补充,如果down数据节点过一会又回来了,hadoop能识别那个节点上的数据吗?谢谢!
【问题讨论】:
标签: hadoop
hadoop 会尝试在其他活动节点上生成丢失的副本吗?或者什么都不做(因为还剩下 2 个副本)。
是的,Hadoop 会识别它并在其他一些节点上复制该数据。当 Namenode 停止接收来自数据节点的心跳时,它假定数据节点丢失。为了将所有数据的复制保持在定义的复制因子,它将在其他数据节点上制作副本。
补充一下,如果down数据节点过一会又回来了,hadoop能识别那个节点上的数据吗?
是的,当数据节点返回所有数据时,名称节点将删除/删除额外的数据副本。在数据节点的下一次心跳中,Name节点将发送指令删除多余的数据并释放磁盘空间。
来自 Apache HDFS 文档的片段:
每个 DataNode 都会定期向 NameNode 发送 Heartbeat 消息。网络分区会导致 DataNode 的一个子集失去与 NameNode 的连接。 NameNode 通过没有心跳消息来检测这种情况。 NameNode 将没有最近 Heartbeat 的 DataNode 标记为已死,并且不会向它们转发任何新的 IO 请求。任何注册到死 DataNode 的数据都不再可用于 HDFS。 DataNode 死亡可能会导致某些块的复制因子低于其指定值。 NameNode 不断跟踪需要复制的块,并在必要时启动复制。
The necessity for re-replication may arise due to many reasons: a DataNode may become unavailable, a replica may become corrupted, a hard disk on a DataNode may fail, or the replication factor of a file may be increased。
【讨论】:
rack 和 space。因为 Name 节点也尝试在每个数据节点上等量分布数据。