“dfs.replication”和“dfs.datanode.data.dir”配置如何在集群中运行?

时间:2015-09-23 04:25:40

标签: hadoop hdfs replication

我遵循Apache“单节点设置”指令,在单节点上设置dfs.replication

但后来我跟着“群集设置”,但它没有提到这个属性,所以我不知道这是在Namenode上设置的属性,还是/只在Datanodes上设置..

我还读到在数据节点上设置dfs.datanode.data.dir中的多个(逗号分隔)路径将在所有路径上复制数据。

所以我的问题是:dfs.replication将在哪个节点上生效,如果设置了dfs.datanode.data.dir的多个路径,那么这些额外的独立复制仅适用于每个Datanode,或者这些是也被dfs.replication因素以某种方式联系在一起?

此外,当数据已经在其他节点上复制时,在Datanodes上使用这种额外的本地复制有什么用呢?

1 个答案:

答案 0 :(得分:4)

是的,首先让我们从docs看到这些配置标志的描述:

配置选项: dfs.replication

  

默认块复制。创建文件时,可以指定实际的复制数。如果未在创建时指定复制,则使用默认值。

直观地说,这告诉我们可以使用此选项指定要存储的数据块的复制因子。此属性已预先配置为等于3.

问:它会影响哪些节点?

答案: 从存储角度来看 ,它主要影响数据节点,因为它们是存储块的数据节点。当然,技术上,它确实会影响Namenode,特别是 FsImage (文件系统映像)文件,其中包含Datanodes的所有映射 - 存储块。

来自'''''透视 它主要影响名称节点,因为它们决定了存储这些块的位置。对此的一般 - 默认策略是:

  

Hadoop的默认策略是将第一个副本放在与客户端相同的节点上(对于在外部运行的客户端)   虽然系统尝试不选择太满或太忙的节点,但是随机选择一个节点。该   第二个副本放置在与第一个(机架外)不同的机架上,随机选择。第三个复制品放在上面   与第二个机架相同的机架,但在随机选择的不同节点上。进一步的副本放在随机节点上   虽然系统试图避免在同一个机架上放置太多副本,但是集群仍然存在。

单模式 伪分布式 模式下,此选项设置为等于1,原因很明显,你只有一台机器。在多机器 - 群集 设置中,建议使用默认值3。

配置选项: datanode.data.dir

  

确定DFS数据节点应在本地文件系统中存储块的位置。 如果这是逗号分隔的目录列表,则数据将存储在所有已命名的目录中,通常位于不同的设备上。不存在的目录将被忽略。

问:这些额外的独立复制仅适用于Datanode,还是以某种方式与 dfs.replication 因素绑定?

答案:根据我的阅读,指定datanode.data.dir并不意味着会有更多的块复制。它只是在运行datanode实例的机器上指定目录,并在其中存储块。

看看这个PDF on HDFS Design。它比我能给出的任何答案都要好,它可以帮助你更好地理解这些概念。