为什么datanode会把块位置信息发给namenode呢?
Why datanode sends the block location information to namenode?
the DataNodes are configured with the location of both NameNodes, and send block location information and heartbeats to both.
但是为什么这个信息会被发送到namenode和它的fallback brother呢?我认为这些信息已经包含在namenode 的fs 图像中。名称节点应该知道他把块放在哪里。
数据节点不能直接从集群外部访问,它位于专用网络中。 Hadoop 集群很容易出现节点故障,而 NameNode 会跟踪不同 DataNode 上的所有数据。因此,对集群的任何查询都由 NN 处理,并提供 DN 上的块地址。
Name Node包含了整个集群的元数据。它包含每个文件夹、文件、复制因子、块名称等的详细信息。名称节点还在内存中存储有关每个文件的块位置的信息(此信息由数据节点发送的块报告构建) .
数据节点为每个块存储以下信息:
- 块中存储的实际数据
- 块中存储的数据的元数据。主要包含存储在块中的数据的校验和。
他们定期向名称节点发送心跳和阻止报告。
心跳:
- 心跳报告的间隔由配置参数
dfs.heartbeat.interval
决定(在hdfs-site.xml)。默认设置为 3 秒。
- 心跳中包含的一些信息是:
- Registration:数据节点注册信息
- 容量:数据节点可用的总存储容量
- dfsUsed:HDFS 使用的存储
- remaining:可用于 HDFS 的剩余存储空间
- blockPoolUsed:块池使用的存储
- xmitsInProgress:从这个数据节点到其他节点的传输次数
- xceiverCount:活动收发线程数
- xmitsInProgress:从这个数据节点到其他节点的传输次数
- cacheCapacity:数据节点可用的总缓存容量
- cacheUsed:已用缓存量
- 名称节点以下列方式使用此信息:
- 数据节点的健康状况:这个数据节点应该被标记为死的还是活的?
- 注册新的Data Node:如果是新添加的Data Node,则注册它的信息
- Update the metrics of the Data Node:心跳发送的信息用于更新节点的metrics
- 向数据节点发出命令:名称节点可以根据心跳中收到的信息向数据节点发出以下命令:
BlockRecoveryCommand
(恢复指定的块),BlockCommand
(用于将块传输到另一个数据节点,用于使某些块无效),Cache/Uncache
(用于缓存/取消缓存块的命令)
阻止报告:
- 块报告的间隔由配置决定
dfs.blockreport.intervalMsec
(在hdfs-site.xml)。默认设置为 21600000 毫秒。
- 块报告中包含的一些信息是:
- Registration:数据节点注册信息
- blocks:关于区块的信息,其中包含:区块ID,区块长度,区块生成时间戳,区块副本的状态(例如副本已完成或等待恢复等)
- Name Node 将此信息用于:
- 处理第一个区块报告:如果是新注册的Data Node的第一次报告,它只是添加所有有效的副本。它忽略所有无效块,直到下一个块报告。
- 用于更新有关块的信息: (Data Node -> Blocks) 映射在名称节点中更新。将新区块报告与旧报告进行比较,并更新有关成功区块、损坏区块、无效区块等的信息
the DataNodes are configured with the location of both NameNodes, and send block location information and heartbeats to both.
但是为什么这个信息会被发送到namenode和它的fallback brother呢?我认为这些信息已经包含在namenode 的fs 图像中。名称节点应该知道他把块放在哪里。
数据节点不能直接从集群外部访问,它位于专用网络中。 Hadoop 集群很容易出现节点故障,而 NameNode 会跟踪不同 DataNode 上的所有数据。因此,对集群的任何查询都由 NN 处理,并提供 DN 上的块地址。
Name Node包含了整个集群的元数据。它包含每个文件夹、文件、复制因子、块名称等的详细信息。名称节点还在内存中存储有关每个文件的块位置的信息(此信息由数据节点发送的块报告构建) .
数据节点为每个块存储以下信息:
- 块中存储的实际数据
- 块中存储的数据的元数据。主要包含存储在块中的数据的校验和。
他们定期向名称节点发送心跳和阻止报告。
心跳:
- 心跳报告的间隔由配置参数
dfs.heartbeat.interval
决定(在hdfs-site.xml)。默认设置为 3 秒。 - 心跳中包含的一些信息是:
- Registration:数据节点注册信息
- 容量:数据节点可用的总存储容量
- dfsUsed:HDFS 使用的存储
- remaining:可用于 HDFS 的剩余存储空间
- blockPoolUsed:块池使用的存储
- xmitsInProgress:从这个数据节点到其他节点的传输次数
- xceiverCount:活动收发线程数
- xmitsInProgress:从这个数据节点到其他节点的传输次数
- cacheCapacity:数据节点可用的总缓存容量
- cacheUsed:已用缓存量
- 名称节点以下列方式使用此信息:
- 数据节点的健康状况:这个数据节点应该被标记为死的还是活的?
- 注册新的Data Node:如果是新添加的Data Node,则注册它的信息
- Update the metrics of the Data Node:心跳发送的信息用于更新节点的metrics
- 向数据节点发出命令:名称节点可以根据心跳中收到的信息向数据节点发出以下命令:
BlockRecoveryCommand
(恢复指定的块),BlockCommand
(用于将块传输到另一个数据节点,用于使某些块无效),Cache/Uncache
(用于缓存/取消缓存块的命令)
阻止报告:
- 块报告的间隔由配置决定
dfs.blockreport.intervalMsec
(在hdfs-site.xml)。默认设置为 21600000 毫秒。 - 块报告中包含的一些信息是:
- Registration:数据节点注册信息
- blocks:关于区块的信息,其中包含:区块ID,区块长度,区块生成时间戳,区块副本的状态(例如副本已完成或等待恢复等)
- Name Node 将此信息用于:
- 处理第一个区块报告:如果是新注册的Data Node的第一次报告,它只是添加所有有效的副本。它忽略所有无效块,直到下一个块报告。
- 用于更新有关块的信息: (Data Node -> Blocks) 映射在名称节点中更新。将新区块报告与旧报告进行比较,并更新有关成功区块、损坏区块、无效区块等的信息