C++のレガシーコードは、入力としてHDFSのファイルパスを取得し、その出力をローカルHDDに書き込みます。 val trainingRDD = pathsRdd.pipe(command = commandSeq, env = Map(), printPipeContext = _ =>(), printRDDElement = (kV, printFn) => { val hdfsPath = kV._2 printFn(hdfsPath) }, separateWorkingDir = false)
Spark Pipe関数はCPUのみを使用します。
私は神経節の50%の周りのCPU使用率を参照してください。後
は、私はそれを呼び出す方法です。 spark.task.cpus
の設定は1です。したがって、各タスクは1コアを取得します。しかし、私の質問は、パイプでバイナリを呼び出すと、そのバイナリは他の実行可能ファイルと同じようにホスト上で利用できるすべてのコアを取得するのか、それともパイプのタスクが持つコア数に制限されているのでしょうか?これまでのところ、spark.task.cpus
を2に増やしても使用率は増加しませんでした。
をアセスC++コードは、最も可能性の高い複数のコアを使用するように作られていません。並列計算は複雑なので、必要がない場合は並列コードを記述しないでください。したがって、複数のC++コマンドを複数のファイルで実行するには、C++コードを並列化するか、Sparkコードを書き直す必要があります。 –
これは確かにマルチスレッドアプリケーションです。 – monus