Spark 作业在 CPU 固定为 100% 的工作人员上挂起

Posted

技术标签:

【中文标题】Spark 作业在 CPU 固定为 100% 的工作人员上挂起【英文标题】:Spark job hangs on worker with CPU pegged at 100% 【发布时间】:2017-11-30 10:00:29 【问题描述】:

有时我的 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 操作上,该操作通常需要几秒钟才能完成。每当这种情况发生在一个工人身上时,我注意到 Locality Level 是 ANY。我通常只是重新启动 EC2 实例(在 AWS 上工作),然后将作业分配给另一个工作人员,作业最终成功。我想知道我有哪些更可持续的解决方案。是否会改用 YARN 来识别和杀死这些工人?到目前为止,我一直避免使用 YARN,因为需要安装 HDFS,因为我的管道直接持续到 S3。

【问题讨论】:

【参考方案1】:

您不能让您的任何工作人员获得 100% 的 CPU。

如果您使用 Yarn,您可能会限制您允许作业使用的核心数量。

另一种选择是在工作线程上使用 cgroups 来限制 CPU 使用率。

【讨论】:

但是 YARN 是否可以帮助我识别这些 CPU 似乎已长时间固定的工人并杀死他们,以便重新分配任务以使工作继续进行? 如果您使用 Yarn 和/或 cgroups,您将不会遇到让工作人员首先达到 100% CPU 的不幸情况。请注意,如果您在 worker 上运行其他进程,Yarn 本身不会帮助您,您还需要 cgroups。

以上是关于Spark 作业在 CPU 固定为 100% 的工作人员上挂起的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL 作业的 Spark 修复任务号

mysql cpu100% 排查

Python Spark 作业优化

使用 vsync (OpenGL) 时 CPU 利用率为 100%

DIV+CSS布局问题 100%的页面上边固定高度下面div:height100%填充为左右结构左边固定宽度右边width:100%

Spark IMF传奇行动第21课:从Spark架构中透视Job