BlockPlacementPolicies

簡介

預設情況下,HDFS 支援 BlockPlacementPolicyDefault。其中一個區塊在本地,副本在同一個遠端機架的 2 個不同節點上。除了這個之外,HDFS 還支援多種不同的可插入區塊配置政策。使用者可以根據其基礎架構和使用案例選擇政策。本文檔詳細說明了政策類型及其使用案例和設定的詳細資訊。

BlockPlacementPolicyRackFaultTolerant

BlockPlacementPolicyRackFaultTolerant 可用於將區塊配置分割到多個機架。預設情況下,使用 3 個副本的 BlockPlacementPolicyDefault 會將一個副本放在本地機器上(如果寫入器在資料節點上),否則放在與寫入器同一個機架上的隨機資料節點上,另一個副本放在不同(遠端)機架上的節點上,最後一個副本放在同一個遠端機架上的不同節點上。因此總共會使用 2 個機架,在 2 個機架同時發生故障的情況下,會導致資料無法使用,而使用 BlockPlacementPolicyRackFaultTolerant 將有助於將 3 個區塊放在 3 個不同的機架上。

如需更多詳細資訊,請查看 HDFS-7891

Rack Fault Tolerant Policy

設定

  • hdfs-site.xml
<property>
  <name>dfs.block.replicator.classname</name>
  <value>org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyRackFaultTolerant</value>
</property>

BlockPlacementPolicyWithNodeGroup

有了新的 3 層階層拓撲,引入了節點群組層級,它很適合基於虛擬化環境的基礎架構。在虛擬化環境中,多個 VM 會在同一台實體機器上執行。同一實體主機上的 VM 會受到相同的硬體故障影響。因此,將實體主機對應到節點群組,這個區塊配置保證它絕不會在同一節點群組(實體主機)上配置多個複本,在節點群組發生故障時,最多只會遺失一個複本。

設定

  • core-site.xml
<property>
  <name>net.topology.impl</name>
  <value>org.apache.hadoop.net.NetworkTopologyWithNodeGroup</value>
</property>
<property>
  <name>net.topology.nodegroup.aware</name>
  <value>true</value>
</property>
  • hdfs-site.xml
<property>
  <name>dfs.block.replicator.classname</name>
  <value>
    org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyWithNodeGroup
  </value>
</property>
  • 拓撲腳本

拓撲腳本與上述範例相同,唯一的差別是,腳本應該傳回 /{rack}/{nodegroup},而不是只傳回 /{rack}。以下是拓撲對應表的範例

192.168.0.1 /rack1/nodegroup1
192.168.0.2 /rack1/nodegroup1
192.168.0.3 /rack1/nodegroup2
192.168.0.4 /rack1/nodegroup2
192.168.0.5 /rack2/nodegroup3
192.168.0.6 /rack2/nodegroup3

有關更多詳細資訊,請查看 HDFS-8468

BlockPlacementPolicyWithUpgradeDomain

為了解決區塊配置原則在滾動升級上的限制,已透過新的區塊配置原則將升級網域的概念新增到 HDFS。這個構想是將資料節點分組到一個新的維度,稱為升級網域,除了現有的機架式分組之外。例如,我們可以將任何機架第一個位置的所有資料節點指定到升級網域 ud_01,第二個位置的節點指定到升級網域 ud_02,以此類推。它將確保任何特定區塊的複本會分散在來自不同升級網域的機器上。預設情況下,任何特定區塊的 3 個複本會配置在 3 個不同的升級網域上。這表示屬於特定升級網域的所有資料節點加起來不會儲存任何區塊的複本超過一個。

有關更多詳細資訊,請查看 HDFS-9006

有關配置的詳細資訊,請參閱 升級網域原則

AvailableSpaceBlockPlacementPolicy

AvailableSpaceBlockPlacementPolicy 是一個空間平衡的區塊配置原則。它類似於 BlockPlacementPolicyDefault,但會為新的區塊選擇使用率較低的資料節點,機率稍微高一些。

設定

  • hdfs-site.xml
<property>
  <name>dfs.block.replicator.classname</name>
  <value>org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceBlockPlacementPolicy</value>
</property>

<property>
  <name>dfs.namenode.available-space-block-placement-policy.balanced-space-preference-fraction</name>
  <value>0.6</value>
  <description>
    Special value between 0 and 1, noninclusive.  Increases chance of
    placing blocks on Datanodes with less disk space used.
  </description>
</property>

<property>
<name>dfs.namenode.available-space-block-placement-policy.balanced-space-tolerance</name>
<value>5</value>
<description>
    Special value between 0 and 20, inclusive. if the value is set beyond the scope,
    this value will be set as 5 by default, Increases tolerance of
    placing blocks on Datanodes with similar disk space used.
</description>
</property>

<property>
  <name>
    dfs.namenode.available-space-block-placement-policy.balance-local-node
  </name>
  <value>false</value>
  <description>
    If true, balances the local node too.
  </description>
</property>

有關更多詳細資訊,請查看 HDFS-8131

AvailableSpaceRackFaultTolerantBlockPlacementPolicy

AvailableSpaceRackFaultTolerantBlockPlacementPolicy 是一個空間平衡的區塊配置原則,類似於 AvailableSpaceBlockPlacementPolicy。它延伸了 BlockPlacementPolicyRackFaultTolerant,並將區塊分佈在最多數量的機架上,同時會嘗試選擇使用率較低的資料節點,機率較高。

設定

  • hdfs-site.xml
<property>
  <name>dfs.block.replicator.classname</name>
  <value>org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceRackFaultTolerantBlockPlacementPolicy</value>
</property>

<property>
  <name>dfs.namenode.available-space-rack-fault-tolerant-block-placement-policy.balanced-space-preference-fraction</name>
  <value>0.6</value>
  <description>
    Only used when the dfs.block.replicator.classname is set to
    org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceRackFaultTolerantBlockPlacementPolicy.
    Special value between 0 and 1, noninclusive.  Increases chance of
    placing blocks on Datanodes with less disk space used. More the value near 1
    more are the chances of choosing the datanode with less percentage of data.
    Similarly as the value moves near 0, the chances of choosing datanode with
    high load increases as the value reaches near 0.
  </description>
</property>

<property>
  <name>dfs.namenode.available-space-rack-fault-tolerant-block-placement-policy.balanced-space-tolerance</name>
  <value>5</value>
  <description>
    Only used when the dfs.block.replicator.classname is set to
    org.apache.hadoop.hdfs.server.blockmanagement.AvailableSpaceRackFaultTolerantBlockPlacementPolicy.
    Special value between 0 and 20, inclusive. if the value is set beyond the scope,
    this value will be set as 5 by default, Increases tolerance of
    placing blocks on Datanodes with similar disk space used.
  </description>
</property>

有關更多詳細資訊,請查看 HDFS-15288