hadoop - NameNode如何识别特定文件复制是设置值,而不是配置的复制3?

标签 hadoop hdfs replication

hdfs-site.xml:

dfs.replication 值配置3


假设我将特定文件的复制设置为 2:

./bin/hadoop dfs -setrep -w 2/path/to/file.txt

  1. 当NameNode收到来自DataNode的心跳时,

NameNode是否会认为是指定文件 path/to/file.txt 是否正在根据配置的复制进行复制?

如果不是,会怎样?

最佳答案

首先,为了清楚起见,我想尝试重述您的问题,以确保我理解:

NameNode 是否会将手动设置为低于默认值 (dfs.replication) 的复制因子的文件视为复制不足?

没有。 NameNode 将每个文件的复制因子单独存储在其元数据中,即使复制因子未通过调用 -setrep 显式设置。默认情况下,每个文件的元数据将复制 dfs.replication 中指定的复制因子(在您的示例中为 3)。它可以被覆盖,例如通过调用 -setrep。当 NameNode 检查文件是否复制不足时,它会检查存储在该单个文件的元数据中的确切复制因子,而不是 dfs.replication。如果文件的复制因子是 2,并且它的每个 block 有 2 个副本,那么这很好,NameNode 不会认为它是复制不足的。

您的问题还提到了 DataNode 的心跳,我认为这意味着您对 DataNode 和 NameNode 之间的交互如何与复制相关感兴趣。 DataNode 和 NameNode 之间还有另一种通信形式,称为 block 报告。 block 报告是 DataNode 告诉 NameNode 它们存储了哪些 block 副本的方式。 NameNode 分析来自所有 DataNode 的 block 报告,以确定 block 是复制不足还是复制过度。如果一个 block 复制不足(例如复制因子为 2,但只有一个副本),那么 NameNode 会安排重新复制工作,以便另一个 DataNode 制作副本的副本。如果一个 block 被过度复制(例如复制因子为 3,但有 4 个副本),那么 NameNode 会安排删除其中一个副本,最终其中一个 DataNode 将在本地删除它。

关于hadoop - NameNode如何识别特定文件复制是设置值,而不是配置的复制3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44593637/

相关文章:

hadoop - YARN 和 MR2 之间有什么区别吗?

hadoop - 使用 S3 作为默认文件系统

hadoop - 不了解分布式路径中的路径

apache-spark - 数据如何从 S3 存储桶传输到 Spark 工作线程

mysql - Master-Master 复制 auto_increment_offset

Postgresql 9.0 流复制 - 进程未启动

sql-server - 报告数据库订阅服务器上的 SQL Server 2008 R2 分发服务器?

java - NoSuchMethodError : org. apache.hadoop.io.retry.RetryUtils.getDefaultRetryPolicy

azure - Azure 环境中 Hadoop 中的 Runtime.exec()

hadoop - 无法从给定路径 : hdfs://. 读取架构 ..avsc