ブロック配置ポリシー

はじめに

デフォルトでは、HDFS は BlockPlacementPolicyDefault をサポートしています。これは、ローカルに1つのブロック、同じリモートラックの2つの異なるノードにコピーを配置します。これに加えて、HDFS はいくつかの異なるプラグ可能なブロック配置ポリシーをサポートしています。ユーザーは、インフラストラクチャとユースケースに基づいてポリシーを選択できます。このドキュメントでは、そのユースケースと設定を含む、各種ポリシーの詳細情報を説明します。

BlockPlacementPolicyRackFaultTolerant

BlockPlacementPolicyRackFaultTolerant は、複数のラックにわたってブロックの配置を分散するために使用できます。レプリケーションが3の場合、BlockPlacementPolicyDefault は、ライターがデータノード上にある場合はローカルマシンに1つのレプリカを配置し、それ以外の場合はライターと同じラック内のランダムなデータノードに配置し、別のレプリカを異なる(リモート)ラック内のノードに、最後のレプリカを同じリモートラック内の別のノードに配置します。したがって、合計で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は、同じハードウェア障害の影響を受けます。物理ホストをノードグループにマッピングすることで、このブロック配置は、同じノードグループ(物理ホスト)に複数のレプリカを配置しないことを保証します。ノードグループの障害が発生した場合、最大で1つのレプリカしか失われません。

設定

  • 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}のみを返す代わりに、/{rack}/{nodegroup}を返す点が異なります。以下は、トポロジマッピングテーブルの例です。

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に、2番目の位置にあるノードをアップグレードドメインud_02などに割り当てることができます。これにより、特定のブロックのレプリカが異なるアップグレードドメインのマシンに分散されるようになります。デフォルトでは、特定のブロックの3つのレプリカは3つの異なるアップグレードドメインに配置されます。これは、特定のアップグレードドメインに属するすべてのデータノードが、どのブロックについても1つ以上のレプリカをまとめて格納しないことを意味します。

詳細については、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 を参照してください。