我有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个复制。)
非常感谢你。
1条答案
按热度按时间jchrr9hc1#
即使每个任务的输入文件大小相同,在洗牌和缩减阶段,某些任务可能会比其他任务处理更多的数据,数据倾斜可能会导致更多的cpu开销。
您可以重新划分中间的数据,这样可以提高性能。