YarnはCgroupを使用してタスクリソースの制限を実現する.

4782 ワード

Linux CGroupは、Linux Control Groupと呼ばれ、Linuxカーネルが提供するプロセスリソースの使用を制限する機能であり、CPU、メモリ、ディスクIOなどの資源の使用制限をサポートしています.ユーザは、CGroupを使用して、単一のプロセスまたはプロセスのセットを精密化するリソース制限を行うことができ、具体的な使用方法は参照文書を見ることができる.
現在、Yarn NodeManagerはCGroupを使用してすべてのcontainersの資源使用を制限できます.主にCPU資源です.CGroupを使わないと、NM側でcontainerのCPU使用を制限することは難しいです.デフォルトの状態では、containerのCPU使用に制限はありません.containerは1 v coreを申請していますが、実際にはすべてのCPUリソースを使用することができます.したがって、NMにvcoreアプリケーションが割り当てられている場合は、実際にCPUが非常に高いタスクを使用することが少なく、ノードで実行されるすべてのタスクが遅延することがしばしばある.
NM運転時は、Conttainers MonitorスレッドモニタcontainerメモリとCPUで使用できます.containerメモリの使用については、アプリケーションメモリのサイズを超えていると発見されると、すぐにKill containerコマンドを開始し、containerのリソースを回収します.Continers MonitorはCPUのモニタの使用もサポートしていますが、CPUリソースはメモリ資源とは異なり、使用量のピークはほぼ確定できます.すべてのマシンやシステムでほぼ一致します.CPUは、CPUのハードウェア性能に制限されており、同一のジョブが異なるマシンでのCPUの使用率が大きく異なる可能性があるため、container CPUは、出願サイズを超えてkill containerを使用することができない.また、containerはすべてサブプロセスによって起動されるので、NMは直接containerの運転と一時停止を制御することによって、CPUの使用率を調整することも難しい.したがって、CGroup機能がない場合、NMはcontainerのCPU使用を直接制限することが難しい.
そこで、次に、YarnがどのようにCGroupを有効にするかを紹介し、containers CPUリソースの占有を制限します.
有効にする
NM CGroup機能を有効にするには主にyarn-site.xmlに以下の構成を設定する必要があります.
1.LCEを有効にする:
Nodemanagerでは、CGroup機能はLinuxContinerExectorに集積されていますので、CGroup機能を使用するには、container-exectorをLinuxContacter Exectorとして設定しなければなりません.NMを配置するUnix Groupが必要です.これは実行可能なバイナリファイルcontainer-exectorです.詳細な構成は、Yarn ContinerExectorの構成と使用を参照することができます.

  yarn.nodemanager.container-executor.class
  org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor


  yarn.nodemanager.linux-container-executor.group
  hadoop

2.CGroupを有効にする:
LinuxContactainer ExectorはCGroup機能を強制的にオープンさせません.CGroup機能を開くには、reource-handar-classをCGroupsource Handlerに設定しなければなりません.

  yarn.nodemanager.linux-container-executor.resources-handler.class
  org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler

3.Yarn CGroupディレクトリを設定する:
NMはyarn.nodemanager.linux-container-exector.cgroups.hierarchyを通じてすべてのYarn Continersプロセスに配置されたCGroupディレクトリを構成する.
システムのCGroupがマウントされていない場合、システム上で手動でCGroup機能をマウントし、設定することができます.yarn.nodemanager.linux-container-extour.cgroups.mountはtrueであり、CGroupマウント経路yarn.nodemanager.linux-containerextrout.ccentを設定することによって自動的に実行されます.(このように使うことを勧めないので、問題が多いです)
システムのCGroupがマウントされ、構成が完了した場合、YarnユーザはCGroup cpuサブディレクトリの書き込み権限を持っています.NMはcpuディレクトリの下でhadoop-yarnディレクトリを作成します.このディレクトリが既に存在するなら、yarnユーザに書き込み権限があることを保証すればいいです.

  yarn.nodemanager.linux-container-executor.cgroups.hierarchy
  /hadoop-yarn


  yarn.nodemanager.linux-container-executor.cgroups.mount
  false


  yarn.nodemanager.linux-container-executor.cgroups.mount-path
  /sys/fs/cgroup

4.CPUリソース制限:
NMは主に2つのパラメータを用いてcontainers CPUリソースの使用を制限した.
まず、yarn.nodemanager.resource.percentage-physical-cpu-limitを使用して、すべてのcontainersの総CPU使用率を設定して、CPUリソースの全体の割合を占有します.
その後、yarn.nodemanager.linux-container-exector.cgroups.strict-resource-usageを使ってcontainerのCPU使用を厳しく制限するかどうか設定します.trueに設定すれば、NMのCPUリソースが空いていても、containers CPU使用率は制限を超えられません.割り当てられたCPUリソースです.ただし、falseに設定すると、containerはNMがアイドルCPUリソースを持っている場合に、CPUを過剰に使用することができます.このようなモードでは、NM全体のCPU使用率が高く、クラスタの計算性能とスループットが向上することが保証されますので、非厳格な制限方式(実際にCGroupのcpu share機能によって実現される)を使用することが推奨されます.この値をいくら設定しても、すべてのcontainersのCPU使用率はcpu-limit設定の値を超えません.
NMは、マシン全体のCPU num*limit-percentに従って、NM全体の利用可能な実際のCPUリソースを計算し、NM構成のVcore数に基づいて、Vcoreごとに対応する実際のCPUリソースを計算し、container申請のVcore数に乗じてcontainerの実際に利用可能なCPUリソースを計算します.ここでは、全体的に利用可能なCPUコアを計算する際に、NMが必要です.デフォルトで使用される実際の物理コアの数は、通常、複数の論理コアに対応しており、デフォルトのCPUコアの数は論理コアであるため、Yarn.nodemarger.resource.com.unt.locessors-as-coresはtrueを指定して論理コアを使用してCPUリソースを計算する必要があります.

  yarn.nodemanager.resource.percentage-physical-cpu-limit
  80


  yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage
  false
    

  yarn.nodemanager.resource.count-logical-processors-as-cores
  true

注意事項
Linuxカーネルバージョン3.10.0-272.el7.x 86_64上でYarnがCGroup機能を有効にすると、カーネルBUGがトリガされ、カーネルカードが死亡し、再起動され、NMがマウントされ、すべての動作のタスクが失敗しました.したがって、CGroup機能を有効にする必要があるなら、絶対に3.10.0-272.el7.x 86_バージョンのカーネルを使用してはいけません.
本論文の転送先:https://smarthanwang.github.io/2019/10/20/yarn-cgroup-usage/作者:smarthan