Hadoop: YARN リソース設定

概要

YARNは拡張可能なリソースモデルをサポートしています。デフォルトでは、YARNはすべてのノード、アプリケーション、およびキューのCPUとメモリを追跡しますが、リソース定義は任意の「カウント可能な」リソースを含むように拡張できます。カウント可能なリソースとは、コンテナの実行中に消費され、その後解放されるリソースです。 CPUとメモリはどちらもカウント可能なリソースです。その他の例としては、GPUリソースやソフトウェアライセンスなどがあります。

さらに、YARNは「リソースプロファイル」の使用もサポートしています。これにより、ユーザーはAmazon Web Services Elastic Compute Clusterインスタンスタイプと同様に、単一のプロファイルを通じて複数のリソース要求を指定できます。たとえば、「大」は8つの仮想コアと16GBのRAMを意味する場合があります。

設定

以下の設定プロパティがサポートされています。詳細は以下をご覧ください。

yarn-site.xml

設定プロパティ 説明
yarn.resourcemanager.resource-profiles.enabled リソースプロファイルのサポートが有効かどうかを示します。デフォルトはfalseです。

resource-types.xml

設定プロパティ 説明
yarn.resource-types 追加リソースのカンマ区切りリスト。 memorymemory-mb、またはvcoresを含めることはできません
yarn.resource-types.<resource>.units 指定されたリソースタイプのデフォルト単位
yarn.resource-types.<resource>.minimum-allocation 指定されたリソースタイプの最小要求量
yarn.resource-types.<resource>.maximum-allocation 指定されたリソースタイプの最大要求量

node-resources.xml

設定プロパティ 説明
yarn.nodemanager.resource-type.<resource> ノードマネージャーから利用可能な指定されたリソースの数

resource-types.xmlおよびnode-resources.xmlファイルを使用する場合は、yarn-site.xmlと同じ設定ディレクトリに配置する必要があることに注意してください。 あるいは、プロパティを代わりにyarn-site.xmlファイルに配置することもできます。

YARN リソースモデル

リソースマネージャー

リソースマネージャーは、クラスタ内のどのリソースが追跡されるかの最終的な決定者です。リソースマネージャーは、XML設定ファイルからリソース定義を読み込みます。たとえば、CPUとメモリに加えて新しいリソースを定義するには、次のプロパティを設定する必要があります

<configuration>
  <property>
    <name>yarn.resource-types</name>
    <value>resource1,resource2</value>
    <description>
    The resources to be used for scheduling. Use resource-types.xml
    to specify details about the individual resource types.
    </description>
  </property>
</configuration>

有効なリソース名は、文字で始まり、文字、数字、および「.」、「_」、または「-」のみを含む必要があります。有効なリソース名の前に、名前空間とスラッシュを付けることもできます。有効な名前空間は、ピリオドで区切られた文字、数字、およびダッシュのグループで構成されます。たとえば、以下は有効なリソース名です

  • myresource
  • my_resource
  • My-Resource01
  • com.acme/myresource

以下は無効なリソース名の例です

  • 10myresource
  • my resource
  • com/acme/myresource
  • $NS/myresource
  • -none-/myresource

定義された新しいリソースタイプごとに、オプションの単位プロパティを追加して、リソースタイプのデフォルト単位を設定できます。有効な値は次のとおりです

単位名 意味
p ピコ
n ナノ
u マイクロ
m ミリ
デフォルト、つまり単位なし
k キロ
M メガ
G ギガ
T テラ
P ペタ
Ki バイナリキロ、つまり1024
Mi バイナリメガ、つまり1024^2
Gi バイナリギガ、つまり1024^3
Ti バイナリテラ、つまり1024^4
Pi バイナリペタ、つまり1024^5

プロパティの名前はyarn.resource-types.<resource>.unitsである必要があります。定義された各リソースには、オプションの最小値と最大値のプロパティを設定することもできます。プロパティの名前は、yarn.resource-types.<resource>.minimum-allocationおよびyarn.resource-types.<resource>.maximum-allocationである必要があります。

yarn.resource-typesプロパティ、および単位、最小値、または最大値のプロパティは、通常のyarn-site.xmlファイルまたはresource-types.xmlという名前のファイルで定義できます。たとえば、次のいずれかのファイルに記述できます

<configuration>
  <property>
    <name>yarn.resource-types</name>
    <value>resource1, resource2</value>
  </property>

  <property>
    <name>yarn.resource-types.resource1.units</name>
    <value>G</value>
  </property>

  <property>
    <name>yarn.resource-types.resource2.minimum-allocation</name>
    <value>1</value>
  </property>

  <property>
    <name>yarn.resource-types.resource2.maximum-allocation</name>
    <value>1024</value>
  </property>
</configuration>

ノードマネージャー

各ノードマネージャーは、そのノードから利用可能なリソースを個別に定義します。リソース定義は、利用可能なリソースごとにプロパティを設定することによって行われます。プロパティの名前はyarn.nodemanager.resource-type.<resource>である必要があり、通常のyarn-site.xmlファイルまたはnode­resources.xmlという名前のファイルに配置できます。プロパティの値は、ノードによって提供されるそのリソースの量である必要があります。例えば

<configuration>
 <property>
   <name>yarn.nodemanager.resource-type.resource1</name>
   <value>5G</value>
 </property>

 <property>
   <name>yarn.nodemanager.resource-type.resource2</name>
   <value>2m</value>
 </property>

</configuration>

これらのリソースに使用される単位は、リソースマネージャーが保持する定義と一致する必要はないことに注意してください。単位が一致しない場合、リソースマネージャーは自動的に変換を行います。

MapReduceでのリソースの使用

MapReduceは、YARNから3種類のコンテナを要求します。アプリケーションマスターコンテナ、マップコンテナ、および縮小コンテナです。コンテナタイプごとに、要求されるリソースを設定するために使用できる対応するプロパティのセットがあります。

MapReduceでリソース要求を設定するためのプロパティは次のとおりです

プロパティ 説明
yarn.app.mapreduce.am.resource.mb アプリケーションマスターコンテナに要求されるメモリをMB単位の値に設定します。推奨されなくなりました。代わりにyarn.app.mapreduce.am.resource.memory-mbを使用してください。デフォルトは1536です。
yarn.app.mapreduce.am.resource.memory アプリケーションマスターコンテナに要求されるメモリをMB単位の値に設定します。推奨されなくなりました。代わりにyarn.app.mapreduce.am.resource.memory-mbを使用してください。デフォルトは1536です。
yarn.app.mapreduce.am.resource.memory-mb アプリケーションマスターコンテナに要求されるメモリをMB単位の値に設定します。デフォルトは1536です。
yarn.app.mapreduce.am.resource.cpu-vcores アプリケーションマスターコンテナに要求されるCPUを値に設定します。推奨されなくなりました。代わりにyarn.app.mapreduce.am.resource.vcoresを使用してください。デフォルトは1です。
yarn.app.mapreduce.am.resource.vcores アプリケーションマスターコンテナに要求されるCPUを値に設定します。デフォルトは1です。
yarn.app.mapreduce.am.resource.<resource> アプリケーションマスターコンテナの<resource>の要求量を値に設定します。単位が指定されていない場合、リソースのデフォルト単位が想定されます。上記の単位に関するセクションを参照してください。
mapreduce.map.memory.mb すべてのマップタスクコンテナに要求されるメモリをMB単位の値に設定します。推奨されなくなりました。代わりにmapreduce.map.resource.memory-mbを使用してください。デフォルトは1024です。
mapreduce.map.resource.memory すべてのマップタスクコンテナに要求されるメモリをMB単位の値に設定します。推奨されなくなりました。代わりにmapreduce.map.resource.memory-mbを使用してください。デフォルトは1024です。
mapreduce.map.resource.memory-mb すべてのマップタスクコンテナに要求されるメモリをMB単位の値に設定します。デフォルトは1024です。
mapreduce.map.cpu.vcores すべてのマップタスクコンテナに要求されるCPUを値に設定します。推奨されなくなりました。代わりにmapreduce.map.resource.vcoresを使用してください。デフォルトは1です。
mapreduce.map.resource.vcores すべてのマップタスクコンテナに要求されるCPUを値に設定します。デフォルトは1です。
mapreduce.map.resource.<resource> すべてのマップタスクコンテナの<resource>の要求量を値に設定します。単位が指定されていない場合、リソースのデフォルト単位が想定されます。上記の単位に関するセクションを参照してください。
mapreduce.reduce.memory.mb すべての縮小タスクコンテナに要求されるメモリをMB単位の値に設定します。推奨されなくなりました。代わりにmapreduce.reduce.resource.memory-mbを使用してください。デフォルトは1024です。
mapreduce.reduce.resource.memory すべての縮小タスクコンテナに要求されるメモリをMB単位の値に設定します。推奨されなくなりました。代わりにmapreduce.reduce.resource.memory-mbを使用してください。デフォルトは1024です。
mapreduce.reduce.resource.memory-mb all reduce タスクコンテナに要求されるメモリをMB単位の値に設定します。デフォルトは1024です。
mapreduce.reduce.cpu.vcores all reduce タスクコンテナに要求されるCPUを値に設定します。もはや推奨されていません。代わりに mapreduce.reduce.resource.vcores を使用してください。デフォルトは1です。
mapreduce.reduce.resource.vcores all reduce タスクコンテナに要求されるCPUを値に設定します。デフォルトは1です。
mapreduce.reduce.resource.<resource> all reduce タスクコンテナに要求される<resource> の量を値に設定します。単位が指定されていない場合は、リソースのデフォルト単位が想定されます。上記の単位に関するセクションを参照してください。

これらのリソース要求は、設定された最小および最大リソース値を満たすため、または設定された増分の倍数にするために、YARNによって変更される場合があることに注意してください。YARNスケジューラ設定の yarn.scheduler.maximum-allocation-mbyarn.scheduler.minimum-allocation-mbyarn.scheduler.increment-allocation-mbyarn.scheduler.maximum-allocation-vcoresyarn.scheduler.minimum-allocation-vcores、および yarn.scheduler.increment-allocation-vcores プロパティを参照してください。

リソースプロファイル

リソースプロファイルは、ユーザーが単一のプロファイルでリソースのセットを要求するための簡単な方法と、管理者がリソースの消費方法を規制するための手段を提供します。

リソースタイプを設定するには、管理者はリソースマネージャーの yarn-site.xml ファイルで yarn.resourcemanager.resource-profiles.enabledtrue に設定する必要があります。このファイルは、サポートされているプロファイルを定義します。例えば

{
    "small": {
        "memory-mb" : 1024,
        "vcores" : 1
    },
    "default" : {
        "memory-mb" : 2048,
        "vcores" : 2
    },
    "large" : {
        "memory-mb": 4096,
        "vcores" : 4
    },
    "compute" : {
        "memory-mb" : 2048,
        "vcores" : 2,
        "gpu" : 1
    }
}

この例では、ユーザーは異なるリソース設定を持つ4つのプロファイルにアクセスできます。 compute プロファイルでは、管理者が上記のように追加のリソースを設定していることに注意してください。

プロファイルの要求

分散シェルは、現在リソースプロファイルをサポートする唯一のクライアントです。分散シェルを使用すると、ユーザーはリソースプロファイル名を指定できます。これは、適切なリソース要求のセットに自動的に変換されます。

例えば

hadoop job $DISTSHELL -jar $DISTSHELL -shell_command run.sh -container_resource_profile small