Apache Spark - 一个Spark核心分为几个CPU核心

时间:2016-02-24 08:47:18

标签: apache-spark core worker

我对Apache Spark有疑问。我在Ubuntu桌面上设置了Apache Spark独立群集。然后我在spark_env.sh文件中写了两行:SPARK_WORKER_INSTANCES=4SPARK_WORKER_CORES=1。 (如果我在编辑export文件后启动群集,我发现在spark_env.sh文件中不需要spark_env.sh。)

我希望在我的单个桌面上有4个工作器实例,让它们分别占用1个CPU核心。结果是这样的:

top - 14:37:54 up  2:35,  3 users,  load average: 1.30, 3.60, 4.84
Tasks: 255 total,   1 running, 254 sleeping,   0 stopped,   0 zombie
%Cpu0  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  1.7 us,  0.3 sy,  0.0 ni, 98.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  : 41.6 us,  0.0 sy,  0.0 ni, 58.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  : 59.0 us,  0.0 sy,  0.0 ni, 41.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  16369608 total, 11026436 used,  5343172 free,    62356 buffers
KiB Swap: 16713724 total,      360 used, 16713364 free.  2228576 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND               
10829 aaaaaa    20   0 42.624g 1.010g 142408 S 101.2  6.5   0:22.78 java                  
10861 aaaaaa    20   0 42.563g 1.044g 142340 S 101.2  6.7   0:22.75 java                  
10831 aaaaaa    20   0 42.704g 1.262g 142344 S 100.8  8.1   0:24.86 java                  
10857 aaaaaa    20   0 42.833g 1.315g 142456 S 100.5  8.4   0:26.48 java                  
 1978 aaaaaa    20   0 1462096 186480 102652 S   1.0  1.1   0:34.82 compiz                
10720 aaaaaa    20   0 7159748 1.579g  32008 S   1.0 10.1   0:16.62 java                  
 1246 root      20   0  326624 101148  65244 S   0.7  0.6   0:50.37 Xorg                  
 1720 aaaaaa    20   0  497916  28968  20624 S   0.3  0.2   0:02.83 unity-panel-ser       
 2238 aaaaaa    20   0  654868  30920  23052 S   0.3  0.2   0:06.31 gnome-terminal        

我认为前4行中的java是Spark工作者。如果它是正确的,那么有四个Spark工作人员很好,每个人都使用1个物理核心(例如,101.2%)。

但是我看到使用了5个物理核心。其中,CPU0, CPU3, CPU7被充分利用。我认为一个Spark工作者正在使用其中一个物理内核。没关系。

但是,CPU2CPU6的使用级别分别为41.6%59.0%。它们总计100.6%,我认为一个工作者的工作分配给这两个物理核心。

使用SPARK_WORKER_INSTANCES=4SPARK_WORKER_CORES=1,这是正常情况吗?或者这是一些错误或问题的迹象?

1 个答案:

答案 0 :(得分:1)

这是完全正常的行为。每当Spark使用术语核心时,它实际上意味着进程或线程,并且没有一个绑定到单个核心或处理器。

在任何多任务处理环境中,都不会连续执行进程。相反,操作系统不断在不同的进程之间切换,每个进程只获得可用处理器时间的一小部分。