Apache Spark中的CPU使用率是否有限?

时间:2017-03-06 07:30:25

标签: scala apache-spark parallel-processing

我最近发现,在UDF中添加并行计算(例如使用并行集合),即使在<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/rangeslider.js/2.3.0/rangeslider.js"></script> <link href="https://cdnjs.cloudflare.com/ajax/libs/rangeslider.js/2.3.0/rangeslider.css" rel="stylesheet"/> <div id="main"> <input type="range" name="count" id="slider1" value="4" min="1" max="10"><br> <br> <span id="showValue">4</span><br> <br> <button id="setColor">Click me to change the handle border color</button> </div>模式下运行spark或使用带有1个执行器和1个核心的Yarn,也会提高性能。

E.g。在local[1]模式下,Spark-Jobs消耗尽可能多的CPU(例如,如果我有8个内核,使用local[1]测量,则为800%)。

这看起来很奇怪,因为我认为Spark(或纱线)会限制每个Spark应用程序的CPU使用率?

所以我想知道为什么会这样,是否建议在spark中使用并行处理/多线程或者我应该坚持使用并行化模式的火花?

这里有一个例子(在纱线客户端模式下用1个实例和1个核心测量的时间)

top

2 个答案:

答案 0 :(得分:1)

Spark不直接限制CPU,而是定义spark创建的并发线程数。因此对于local [1],它基本上可以并行运行一个任务。当您执行in.par.map {expensive}时,您正在创建spark无法管理的线程,因此不受此限制的处理。即你告诉spark将自己限制在一个线程中,然后创建其他线程而不知道它。

通常,在spark操作中执行并行线程并不是一个好主意。相反,最好告诉spark它可以使用多少个线程,并确保你有足够的并行分区。

答案 1 :(得分:0)

Spark是CPU使用率的配置 考官

val conf = new SparkConf()
             .setMaster("local[2]")
             .setAppName("CountingSheep")
val sc = new SparkContext(conf)

更改本地[*]它将利用所有CPU核心。