Yarnは仮想コアの概念を使用してCPUリソースを管理しています。私は仮想コアを使用する利点は何かを尋ねるだろう、ここでYARNはvcoreを使用するいくつかの理由はありますか?YARN vcoreのバーチャルコアはどういう意味ですか?
答えて
「バーチャルコア」は、実際のコアの抽象化に過ぎません。この抽象化または「うそ」は、YARN(および他の人)が可用性に基づいてスレッドを動的に回転させる(並列プロセス)ことを可能にします。たとえば、あなたの財布だけに制限された処理制限を持つ「弾力のある」クラスター上でmap reduceを実行してみてください...クラウドベイビー...。雲。
あなたはここでhere
詳細を読むことができ、ドキュメントの状態(強調鉱山)
は、ノードの容量が物理コアのその 数に等しい仮想コアで構成されなければならないものです。コンテナは、飽和することができるコアの数が であること、すなわち、 が同時に実行できるスレッドの平均数を要求する必要があります。
CPUコアは、ハイパーの場合にスレッドOSが実際には1つの物理コアの2つのコアを見て、二つのスレッドを実行することができます(一度に一つのスレッドを実行することができ、ハイパースレッドされていない限り - もちろんそれは少しです実際の物理的なコアを持つほど効率的ではない)基本的にエンドユーザーにとって、コアが単一のスレッドを実行できるということは、理論的にはJavaスレッドを使用して並列化したい場合、合理的に良い近似はコア数に等しいスレッド数です。したがって、コンテナプロセス(JVM) に2つのスレッドが必要な場合は、それを2つのvcoreにマップする方がいいです。つまり、最後の行が意味するものです。そして、ノードの総容量として、vcoreは物理的なコアの数と等しくなければならない。
覚えておくべき最も重要なことは、それが実際にそれを除いて、それに制御を持っていん自体で他のアプリケーションと YARNに起こるように異なるコアで実行されるスレッドをスケジュールしますOSだということはまだです各コンテナに割り当てられるスレッド数の最適な近似は何か。そのため、すべてのコアがYARNアプリケーションで常に利用できなくなるため、OS上で動作する他のアプリケーション、カーネルで使用されるCPUサイクルなどを考慮する必要があります。
EDIT:さらに研究
糸は、CPU上でハードリミットに影響を与えることはないが、コードを通って行く私はそれがCPUスケジューリングやCPUの速度に影響を与えるためにしようとどのように見ることができます。技術糸は、Java、Python、カスタムシェルコマンドなど、さまざまなコンテナプロセスを起動できます.Yarnのコンテナを起動する役割は、ノードマネージャのContainerExecutorコンポーネントに属しており、コンテナの起動などのコードと、いくつかのヒントプラットフォーム上)。たとえば、DefaultContainerExecutor(ContainerExecutorを拡張)の場合 - ウィンドウではCPUの制限に "-c"パラメータを使用し、Linuxではプロセスのnicenessを使用してそれに影響を与えます。 LinuxContainerExecutor(またはより良いまだCgroupsLCEResourcesHandlerはcgroupの使用を強制しません)では、Linux cgroupsを使用してそのノードのYarn CPUリソースを制限しようとします。詳細はhereです。
ContainerExecutor {
.......
.......
protected String[] getRunCommand(String command, String groupId,
String userName, Path pidFile, Configuration conf, Resource resource) {
boolean containerSchedPriorityIsSet = false;
int containerSchedPriorityAdjustment =
YarnConfiguration.DEFAULT_NM_CONTAINER_EXECUTOR_SCHED_PRIORITY;
if (conf.get(YarnConfiguration.NM_CONTAINER_EXECUTOR_SCHED_PRIORITY) !=
null) {
containerSchedPriorityIsSet = true;
containerSchedPriorityAdjustment = conf
.getInt(YarnConfiguration.NM_CONTAINER_EXECUTOR_SCHED_PRIORITY,
YarnConfiguration.DEFAULT_NM_CONTAINER_EXECUTOR_SCHED_PRIORITY);
}
if (Shell.WINDOWS) {
int cpuRate = -1;
int memory = -1;
if (resource != null) {
if (conf
.getBoolean(
YarnConfiguration.NM_WINDOWS_CONTAINER_MEMORY_LIMIT_ENABLED,
YarnConfiguration.DEFAULT_NM_WINDOWS_CONTAINER_MEMORY_LIMIT_ENABLED)) {
memory = resource.getMemory();
}
if (conf.getBoolean(
YarnConfiguration.NM_WINDOWS_CONTAINER_CPU_LIMIT_ENABLED,
YarnConfiguration.DEFAULT_NM_WINDOWS_CONTAINER_CPU_LIMIT_ENABLED)) {
int containerVCores = resource.getVirtualCores();
int nodeVCores = conf.getInt(YarnConfiguration.NM_VCORES,
YarnConfiguration.DEFAULT_NM_VCORES);
// cap overall usage to the number of cores allocated to YARN
int nodeCpuPercentage = Math
.min(
conf.getInt(
YarnConfiguration.NM_RESOURCE_PERCENTAGE_PHYSICAL_CPU_LIMIT,
YarnConfiguration.DEFAULT_NM_RESOURCE_PERCENTAGE_PHYSICAL_CPU_LIMIT),
100);
nodeCpuPercentage = Math.max(0, nodeCpuPercentage);
if (nodeCpuPercentage == 0) {
String message = "Illegal value for "
+ YarnConfiguration.NM_RESOURCE_PERCENTAGE_PHYSICAL_CPU_LIMIT
+ ". Value cannot be less than or equal to 0.";
throw new IllegalArgumentException(message);
}
float yarnVCores = (nodeCpuPercentage * nodeVCores)/100.0f;
// CPU should be set to a percentage * 100, e.g. 20% cpu rate limit
// should be set as 20 * 100. The following setting is equal to:
// 100 * (100 * (vcores/Total # of cores allocated to YARN))
cpuRate = Math.min(10000,
(int) ((containerVCores * 10000)/yarnVCores));
}
}
return new String[] { Shell.WINUTILS, "task", "create", "-m",
String.valueOf(memory), "-c", String.valueOf(cpuRate), groupId,
"cmd /c " + command };
} else {
List<String> retCommand = new ArrayList<String>();
if (containerSchedPriorityIsSet) {
retCommand.addAll(Arrays.asList("nice", "-n",
Integer.toString(containerSchedPriorityAdjustment)));
}
retCommand.addAll(Arrays.asList("bash", command));
return retCommand.toArray(new String[retCommand.size()]);
}
}
}
(winutilsを使用します。exe)、CPU速度を使用します Linuxでは、CPU優先度を制御するパラメータとしてnicenessを使用します。
- 1. linuxの意味はどういう意味ですか?
- 2. %%はどういう意味ですか?
- 3. どういう意味ですか? OR?
- 4. "javascript://"とはどういう意味ですか?そのコードには意味:
- 5. どういう意味ですか?:意味ですか? Apacheの設定ファイルで
- 6. ディレクトリ名とは何ですか? 'と '..'という意味で、faDirectoryはどういう意味ですか?
- 7. データクラスという用語はどういう意味ですか?
- 8. パンジャブを使うのはどういう意味ですか
- 9. このインポートはScalaではどういう意味ですか?
- 10. gitkではエッジの色はどういう意味ですか?
- 11. この行はPythonではどういう意味ですか?
- 12. このコードはタイプスクリプトではどういう意味ですか?
- 13. ジュリアで「ファイナライズ」するのはどういう意味ですか?
- 14. 引数のないpaper.path()はどういう意味ですか?
- 15. VSコードの赤い点はどういう意味ですか
- 16. BackboneJs:elとtagNameの違いはどういう意味ですか?
- 17. 終了コンテキストがWaitHandle.WaitOneの意味をどういう意味ですか?
- 18. それはどういう意味ですか - SSLでのログイン
- 19. '""'はC#の '"" + ex "でどういう意味ですか?
- 20. このラインはVerilogでどういう意味ですか?
- 21. xcodeデバッガウィンドウでこのエラーはどういう意味ですか?
- 22. C++ではテンプレート<>はどういう意味ですか?
- 23. フラグはテンソルフローではどういう意味ですか?
- 24. defmethodでは ":before:after:around"とはどういう意味ですか?
- 25. バイトコードでは、getstaticはどういう意味ですか?
- 26. Rubyでは、tLABELはどういう意味ですか?
- 27. シェルスクリプトでは、[!。] *はどういう意味ですか?
- 28. ここではスラグはどういう意味ですか?
- 29. ハスケルでは(== "")はどういう意味ですか?
- 30. Coqでは `true = false`はどういう意味ですか?
ありがとう@ archae0pteryx。 – Tom