Hadoop で YARN リソース割り当てを最適化する方法

HadoopHadoopBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Hadoop の YARN (Yet Another Resource Negotiator) は強力なリソース管理システムであり、Hadoop クラスターのパフォーマンスと効率を最適化する上で重要な役割を果たします。このチュートリアルでは、YARN のリソース割り当てを構成し最適化するプロセスを案内し、Hadoop ワークロードが最高の状態で実行されるようにします。

YARN リソース割り当てのはじめに

YARN (Yet Another Resource Negotiator) は Hadoop のリソース管理およびジョブスケジューリングシステムです。これは、Hadoop クラスター上で実行されるさまざまなアプリケーションに CPU、メモリ、ストレージなどのリソースを割り当てる役割を担っています。効率的なリソース割り当ては、Hadoop クラスターのパフォーマンスと利用率を最適化するために重要です。

YARN はマスター - スレーブアーキテクチャを使用しており、ResourceManager (RM) がマスターで、NodeManagers (NM) がスレーブです。ResourceManager はクラスターリソースの管理とアプリケーションのスケジューリングを担当し、NodeManagers はコンテナの実行とそれぞれのノードでのリソース使用状況の監視を担当します。

YARN リソース割り当ての主要なコンポーネントは以下の通りです。

リソースコンテナ

YARN は各ノード上の利用可能なリソースをリソースコンテナに分割します。これらのコンテナはリソース割り当ての基本単位です。各コンテナには特定の量の CPU とメモリが割り当てられています。

アプリケーションマスター

アプリケーションが YARN に送信されると、ResourceManager はそのアプリケーション用のアプリケーションマスター (AM) を起動します。アプリケーションマスターは、ResourceManager からリソースを交渉し、アプリケーションのタスクの実行を管理する役割を担っています。

リソーススケジューリング

ResourceManager はスケジューリングアルゴリズムを使用して、クラスター上で実行されるさまざまなアプリケーションにリソースを割り当てます。YARN のデフォルトのスケジューラは Capacity Scheduler で、これはユーザーキューに基づいた階層的なリソース割り当てを可能にします。

リソース監視

YARN は幅広い監視およびレポート機能を提供し、管理者がリソース利用率、アプリケーションのパフォーマンス、クラスターの健全性を追跡できるようにします。

これらの主要な概念を理解することは、Hadoop クラスターにおける YARN リソース割り当てを最適化するために不可欠です。

YARN リソースパラメータの構成

YARN のリソース割り当てを最適化するには、YARN の設定ファイルでさまざまなパラメータを構成する必要があります。主な設定ファイルは yarn-site.xmlcapacity-scheduler.xml です。

yarn-site.xml の構成

yarn-site.xml ファイルには、YARN のコア設定パラメータが含まれています。考慮すべき重要なパラメータのいくつかは以下の通りです。

  1. yarn.nodemanager.resource.memory-mb: このパラメータは、各ノードで YARN コンテナに利用可能な物理メモリの総量を設定します。
  2. yarn.nodemanager.resource.cpu-vcores: このパラメータは、各ノードで YARN コンテナに利用可能な仮想 CPU コアの総数を設定します。
  3. yarn.scheduler.minimum-allocation-mb: このパラメータは、コンテナに割り当てることができる最小メモリ量を設定します。
  4. yarn.scheduler.maximum-allocation-mb: このパラメータは、コンテナに割り当てることができる最大メモリ量を設定します。
  5. yarn.scheduler.minimum-allocation-vcores: このパラメータは、コンテナに割り当てることができる最小仮想 CPU コア数を設定します。
  6. yarn.scheduler.maximum-allocation-vcores: このパラメータは、コンテナに割り当てることができる最大仮想 CPU コア数を設定します。

以下は yarn-site.xml の設定例です。

<configuration>
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>32768</value>
  </property>
  <property>
    <name>yarn.nodemanager.resource.cpu-vcores</name>
    <value>16</value>
  </property>
  <property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>1024</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>16384</value>
  </property>
  <property>
    <name>yarn.scheduler.minimum-allocation-vcores</name>
    <value>1</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-vcores</name>
    <value>8</value>
  </property>
</configuration>

Capacity Scheduler の構成

capacity-scheduler.xml ファイルは、YARN のデフォルトのスケジューラである Capacity Scheduler を構成するために使用されます。このファイルを使用すると、キューを定義し、それらのキューに対するリソース割り当てポリシーを設定することができます。

capacity-scheduler.xml ファイルで考慮すべき重要なパラメータのいくつかは以下の通りです。

  1. yarn.scheduler.capacity.root.queues: このパラメータは、トップレベルのキューを定義します。
  2. yarn.scheduler.capacity.root.default.capacity: このパラメータは、ルートキューのデフォルトの容量を設定します。
  3. yarn.scheduler.capacity.root.default.maximum-capacity: このパラメータは、ルートキューの最大容量を設定します。
  4. yarn.scheduler.capacity.root.<queue-name>.capacity: このパラメータは、特定のキューの容量を設定します。
  5. yarn.scheduler.capacity.root.<queue-name>.maximum-capacity: このパラメータは、特定のキューの最大容量を設定します。

これらのパラメータを構成することで、YARN リソースが Hadoop アプリケーションの要件を満たすように効率的かつ効果的に割り当てられることを保証することができます。

YARN リソース利用率の最適化

YARN のリソースパラメータを構成したら、Hadoop クラスターのリソース利用率を最適化するための追加の手順を実行できます。

動的リソース割り当て

YARN は動的リソース割り当てをサポートしており、これにより ResourceManager はアプリケーションの現在のニーズに基づいて割り当てられるリソースを自動的に調整できます。これにより、全体的なリソース利用率を向上させ、リソースの浪費を防ぐことができます。

動的リソース割り当てを有効にするには、yarn-site.xml で以下のパラメータを設定できます。

<property>
  <name>yarn.resourcemanager.dynamic-resource-allocation.enabled</name>
  <value>true</value>
</property>

プリエンプション

YARN のプリエンプション機能により、ResourceManager は低優先度のアプリケーションからリソースを回収し、高優先度のアプリケーションに割り当てることができます。これにより、重要なアプリケーションが必要なリソースを取得できるようにすることができます。

プリエンプションを有効にするには、capacity-scheduler.xml で以下のパラメータを設定できます。

<property>
  <name>yarn.scheduler.capacity.root.queues.default.priority</name>
  <value>10</value>
</property>
<property>
  <name>yarn.scheduler.capacity.root.queues.default.maximum-am-resource-percent</name>
  <value>0.5</value>
</property>

アプリケーション配置制約

YARN では、アプリケーション配置制約を定義できます。これにより、アプリケーションが最も適切なノードでスケジュールされるようにすることができます。これは、GPU や高メモリノードなどの特定のハードウェア要件を持つアプリケーションに特に有用です。

アプリケーションの提出スクリプトで yarn.application.placement.constraints パラメータを使用して、アプリケーション配置制約を定義できます。以下は例です。

--conf yarn.application.placement.constraints='{
  "nodeAntiAffinity": {
    "type": "PREFER_DIFFERENT_NODE",
    "targetTags": ["gpu"]
  }
}'

この制約により、アプリケーションのコンテナは "gpu" タグが付いていないノードに配置されます。

監視とレポート

YARN は幅広い監視およびレポート機能を提供しており、これを使用するとボトルネックを特定し、リソース利用率を最適化することができます。YARN ウェブ UI、YARN コマンドラインインターフェイス、YARN メトリクスなどのツールを使用して、クラスターのリソース使用状況を監視および分析できます。

これらの最適化手法を実装することで、Hadoop クラスターが YARN リソースを効率的かつ効果的に利用することを保証でき、アプリケーションのパフォーマンスと全体的なクラスター利用率が向上します。

まとめ

このチュートリアルの終わりまでに、Hadoop 環境において YARN のリソースパラメータを構成し、リソース利用率を最適化する方法について包括的な理解を得ることができます。この知識は、Hadoop クラスターの全体的なパフォーマンス、効率、および拡張性を向上させるのに役立ち、Hadoop をベースとしたアプリケーションやデータ処理タスクがスムーズかつ効果的に実行されることを保証します。