2017-07-09 1 views
1

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に増やしても使用率は増加しませんでした。

+0

をアセスC++コードは、最も可能性の高い複数のコアを使用するように作られていません。並列計算は複雑なので、必要がない場合は並列コードを記述しないでください。したがって、複数のC++コマンドを複数のファイルで実行するには、C++コードを並列化するか、Sparkコードを書き直す必要があります。 –

+0

これは確かにマルチスレッドアプリケーションです。 – monus

答えて

0

スパークファイルを並列に読み込むことができます。また、スパークにパーティションマシニズムがあり、より多くのパーティションは並列になります。あなたのCPUの使用率を増やすたい場合は

sc = new SparkConf().setMaster("local[*]") 

詳細にごSparkContextを設定することができ詳細はhttps://spark.apache.org/docs/latest/configuration.html

+0

コードでは、並列性を変更することさえありません。それでも、これはこれとは関係ありません。 – monus

+0

これを並列起動して起動すると、イベントを使用しない並列処理 – SharpLu

関連する問題