平衡器在 HDFS 中如何工作?

How does balancer work in HDFS?

Balancer 迭代地将副本从利用率较高的 DataNode 移动到利用率较低的 DataNode。

这会影响机架意识的概念吗?

例如 我把三台机器放在两个机架上,按照机架意识的概念来放置数据。

如果我向集群添加一台新机器并运行平衡器命令会发生什么?

机架感知和数据本地化是一个 YARN 概念。 HDFS 平衡器只关心平衡数据节点的使用。

如果你有 3 台机器,默认有 3 个副本,那么每台机器都可以保证有 1 个副本,因此有 2 个机架,你几乎可以保证有机架局部性。

无论如何,节点局部性比机架感知更高效。

如果节点之间的集群内速度为 10 GB,则数据局部性是一个有争议的问题。这就是为什么 AWS 仍然可以合理地处理 S3 中的数据,例如,在数据本地化处理不可用的地方

如果您的问题是如何使用负载平衡:负载平衡有助于在节点负载超过其阈值水平时在空闲节点之间平均分配负载。

现在一个集群被认为是平衡的 如果对于每个数据节点,节点上使用的 space 与节点总容量的比率(称为利用率)节点的)与集群上使用的space占集群总容量(集群的利用率)的比率不超过阈值。

当你在运行时应用负载平衡时,它被称为动态负载平衡,这可以根据执行节点选择以直接或迭代的方式实现:

  • 在迭代方法中,最终目标节点是通过几个迭代步骤确定的。
  • 在直接方法中,一步选择最终目标节点。

机架意识

机架感知可防止在整个机架发生故障时丢失数据,并允许在读取文件时利用多个机架的带宽。

在多机架集群上,块复制的维护策略是在一个节点上放置不超过一个副本,在同一机架中放置不超过两个副本,并限制用于块的机架数量复制应始终小于块副本的总数。

例如,

  1. 创建新块时,第一个副本放在本地节点上,第二个放在不同的机架上,第三个放在本地机架上的不同节点上。
  2. 重新复制块时,如果现有副本的数量是一个,则将第二个放在不同的机架上。
  3. 当现有副本数为两个时,如果两个副本在同一个机架上,则将第三个副本放在不同的机架上;
  4. 对于读取,名称节点首先检查客户端计算机是否位于集群中。如果是,则块位置从关闭的数据节点返回给客户端。

它最大限度地降低了写入成本并提高了读取速度。