Apache spark Spark作业挂在CPU固定在100%的工人身上

Apache spark Spark作业挂在CPU固定在100%的工人身上,apache-spark,pyspark,yarn,Apache Spark,Pyspark,Yarn,偶尔,我的Spark工作似乎无限期地挂在一个CPU似乎为100%的工人身上——我在反复运行top时注意到了这一点 Tasks: 288 total, 1 running, 287 sleeping, 0 stopped, 0 zombie %Cpu(s): 3.1 us, 0.0 sy, 0.0 ni, 96.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 25157609+total, 11158460+free, 550

偶尔,我的Spark工作似乎无限期地挂在一个CPU似乎为100%的工人身上——我在反复运行top时注意到了这一点

Tasks: 288 total,   1 running, 287 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.1 us,  0.0 sy,  0.0 ni, 96.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 25157609+total, 11158460+free, 55086460 used, 84905024 
buff/cache
KiB Swap:        0 total,        0 free,        0 used. 19393204+avail Mem

PID   USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ 
COMMAND
71167 XXXX      20   0  0.213t 0.049t  28576 S 100.0 20.8 231:58.71 
java

我在Spark独立集群上运行PySpark,它挂起在reduceByKey操作上,通常需要几秒钟才能完成。每当这种情况发生在一个工人身上,我注意到地方级别是任意的。我通常只是重新启动在AWS上工作的EC2实例,然后将作业分配给另一个工人,作业最终成功。我想知道我有什么选择来进行更可持续的修复。用纱线来识别和杀死这些工人会是一种转变吗?到目前为止,由于我的管道直接连接到S3,因此需要安装HDFS,所以我一直避免使用纱线。

您不能让任何工作人员使用100%的CPU

如果您使用纱线,您可以限制允许作业使用的芯数


另一种选择是对工人使用cGroup来限制CPU的使用。

但是Thread是否能帮助我识别CPU似乎被固定了很长时间的工人,并杀死他们,以便重新分配任务以便继续工作?如果你使用Thread和/或cGroup,你将不会遇到工人达到100%的不幸情况首先是CPU。请注意,如果在辅助进程上运行其他进程,则纱线本身对您没有帮助,您还需要cgroup。