我正在阅读由 yahoo 在 https://developer.yahoo.com/hadoop/tutorial/module2.html 制作的 hadoop 模块这里提到“本地DataNode”我想知道到底什么是本地DataNode。我的猜测是一台既是 NameNode 又是 DataNode 的机器,但我想确定它到底是什么。
最佳答案
在 Hadoop 中,默认情况下,每个数据 block 被复制 3 次(复制因子为 3)。
为确保数据的可用性和持久性,Hadoop 将副本放置在 3 个不同的数据节点中:
- 本地数据节点:客户端发起写入的数据节点(例如使用
hadoop fs -cp
命令)。第一个副本放在这里。如果客户端正在从集群外部写入数据,则该节点是随机选择的。 这是写入第一个副本的节点。 - 机架外数据节点:位于另一个机架上的数据节点。第二个副本放在这里。
- 机架上数据节点:与第一个数据节点物理存在于同一机架上的数据节点。第三个副本放在这里
这确保了即使一个机架出现故障,数据在另一个机架中的数据节点上仍然可用。
因此在本教程中,本地数据节点是指发起写入操作的数据节点。
让我们举个例子。假设您正在尝试将文件 a.txt
复制到 HDFS。假设一个集群有 3 个机架并且是机架感知的:
Rack 1: Node 1, Node 2
Rack 2: Node 3, Node 4
Rack 3: Node 5, Node 6
Also, you have another Node: Node 7, which is outside the Hadoop cluster, but is connected
to the cluster and you can perform HDFS operations.
案例一:集群内的客户端
假设您从节点 1(在机架 1 上)执行 hadoop fs -copyFromLocal a.txt/tmp/
。然后 Hadoop 将尝试按如下方式放置副本:
- 第一个副本放在节点 1 上。这是客户端的本地数据节点
- 第二个副本放置在机架 2(节点 3 或节点 4)或机架 3(节点 5 或节点 6)上。这是机架外数据节点。
- 第三个副本放在节点 2 上。这是机架上数据节点。
案例二:集群外的客户端
假设您从节点 7(它不是集群的一部分,客户端在其上运行)执行 hadoop fs -copyFromLocal a.txt/tmp/
。然后 Hadoop 将尝试按如下方式放置副本:
- 它将随机选择一个节点(从节点 1 到节点 6 的任何节点)。那么这个节点就会成为Local Data Node。假设它选择了位于机架 3 上的节点 6。
- 现在,第二个副本放置在机架 1(节点 1 或节点 2)或机架 2(节点 3 或节点 4)上。这是机架外数据节点。
- 第三个副本放在节点 5 上。这是机架上数据节点
这是理想的副本放置方式。但是,这取决于不同机架和节点上的可用空间。
关于hadoop - 什么是本地DataNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34564231/