私はspark.task.cpus
パラメータをよく理解していません。実行者の中では、「タスク」は「スレッド」または「プロセス」に対応しています。 "spark.task.cpus"を2に設定したとします。SparkのタスクごとのCPU数
スレッドは2つのCPUを同時にどのように利用できますか?ロックを必要とせず、同期の問題を引き起こすことはできませんでしたか?
私は
launchTask()
のdeploy/executor/Executor.scalaの機能を見ていますが、ここでは「タスクごとのCPUの数」という概念はありません。 Sparkは最終的にスタンドアロンモードのタスクに複数のCPUを割り当てますか?あなたには、いくつかの特定のタスクが独自の内部(カスタム)並列性を有することが知られている場合には、クラスタ内の私の知識spark.task.cpus
の最高に
実行時には実際には実行されませんが(ハード制限より多くのリソース利用のヒント) – zero323
タスクを内部的に並列化できる方法を示す例はありますか? @ zero323、CPUS_PER_TASKは非常に高いレベルのスケジューリング用のもので使用され、実行プログラムに渡されることはありません。だから、私の質問は、 "タスクがspark.task.cpusコアを取得したことを確認するにはどうすればよいのですか?" – smz
最も簡単な方法です(それほど有用ではありません): 'rdd.mapPartitions(_。toVector.par.map(foo))'。あなたの2番目の質問に答えるために、私たちは単純に答えません。これは、4つのexecutorコアを宣言し、 'spark.task.cpus'が2の場合、2つのタスクしか開始できないということだけです。しかし、物理的なコア割り当てや同様のものがあります。 Sparkの 'core'は単なるスレッドです。 – zero323