为什么在运行spark应用程序时,一些工作节点会为系统花费更多的cpu?

nimxete2  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(270)

我有1个主节点和4个工作节点。我使用ambari设置集群,所有监控指标都是从它的 Jmeter 板收集的。在hadoop的上面有spark,所以我有了yarn和hdfs。我运行了一个非常简单的字数计算脚本,发现其中一个worker节点做的工作最多。字数统计工作分为149个任务。98个任务由一个节点完成。
这是我数词的密码

val file = sc.textFile("/data/2gdata.txt") //read file from HDFS
 val counts = file.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
 counts.collect*

此图说明了每个worder节点的事件时间线和cpu使用情况

此处显示了按执行者列出的聚合度量

每个任务的输入文件大小相同。我假设他们会花费类似的时间,比如大约30秒来计算输入文件中的单词。有些任务花费超过10分钟。
我意识到那些做更少工作的节点为系统操作花费了更多的cpu,如第一个图中的蓝色区域所示。工人为用户(应用程序)完成了更多的任务并花费了更多的cpu。
我想知道spark应用程序需要什么样的系统操作。为什么三个工作节点为系统花费更多的cpu?我还启用了spark.examination,但是那些掉队的人10分钟后就会被杀,而且表现也没有好转。此外,这些散乱的节点是本地的,所以我假设这个问题与hdfs复制无关(机架下有3个复制。)
非常感谢你。

jchrr9hc

jchrr9hc1#

即使每个任务的输入文件大小相同,在洗牌和缩减阶段,某些任务可能会比其他任务处理更多的数据,数据倾斜可能会导致更多的cpu开销。
您可以重新划分中间的数据,这样可以提高性能。

相关问题