hadoop - 什么是本地DataNode?

标签 hadoop hadoop2 bigdata

我正在阅读由 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/

相关文章:

hadoop - Hive中的Count(*)和As

java - 如何正确理解 yarn 容器?

hadoop - Hadoop -getmerge 是如何工作的?

java - 尝试使用 spark shell 计算托管在本地 HDFS 上的文件中的行数时出现 HadoopRDD 错误

algorithm - 如何计算就地外部合并排序的时间?

hadoop - 在 map/reduce 之间共享资源

performance - 我如何评估我的 spark 应用程序

hive 0.13 msck 修复表仅列出不在 Metastore 中的分区

hadoop - Hbase错误:java.lang.ClassCastException:org.apache.hadoop.io.Text无法转换为org.apache.hadoop.hbase.client.Mutation

python - Postgres 无法在 Python 中获取数据