我遵循Apache“单节点设置”指令,在单节点上设置dfs.replication
。
但后来我跟着“群集设置”,但它没有提到这个属性,所以我不知道这是在Namenode上设置的属性,还是/只在Datanodes上设置..
我还读到在数据节点上设置dfs.datanode.data.dir
中的多个(逗号分隔)路径将在所有路径上复制数据。
所以我的问题是:dfs.replication
将在哪个节点上生效,如果设置了dfs.datanode.data.dir
的多个路径,那么这些额外的独立复制仅适用于每个Datanode,或者这些是也被dfs.replication
因素以某种方式联系在一起?
此外,当数据已经在其他节点上复制时,在Datanodes上使用这种额外的本地复制有什么用呢?
答案 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。它比我能给出的任何答案都要好,它可以帮助你更好地理解这些概念。