我最近发现,在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
答案 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核心。