相当于 EMR 集群上的“top”命令?

相当于 EMR 集群上的“top”命令?

我在 AWS 上运行了一个包含 3 个实例的 EMR 集群,它正在响应非常目前正在缓慢地。

当我使用浏览器检查端口 8088 上的 Hadoop 仪表板时,我看到“已使用内存:203.5GB”和“可用内存:214GB”。我猜问题出在这里:所有 RAM 当前都被占用了。

我如何才能找出哪个应用程序正在运行并占用所有 RAM?是否有类似top集群的命令?当我通过 SSH 连接到主节点并检查时topfree -g输出表明仍有 50% 以上的 RAM 可用,这与端口 8088 网络报告的输出相矛盾。

答案1

亚马逊已经提供了一个包含 EMR 集群统计信息的 Web 界面,只需访问:

https://console.aws.amazon.com//elasticmapreduce/home

选择名称下的集群链接以打开该集群的集群详细信息页面。使用每个选项卡查看相关信息。

例如,您可以通过转到Application history然后选择Application id并展开行来查找 Spark 应用程序的作业详细信息。更多详细信息:https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-cluster-application-history.html

答案2

首先,有关指标的一些细节:

您提到的 YARN UI 中的“已用内存”和“可用内存”指标表示 YARN 进程内的内存使用情况,而不是 YARN 的 ResourceManagers 使用的主机的内存使用情况。

例如,集群中有 3 个节点,每个节点的内存超过 64 GB(因为 64 * 3 < 214),即 128GB,但 YARN 配置为使用 ~71 GB(214 / 3)。(我认为这些数字不正确,但这只是一个例子)。对于每个节点,其上的所有进程使用大约 50% 的 RAM,但您的应用程序使用了集群上 YARN 可用的几乎所有 RAM。

第二:尽可能多地使用集群内存是完全可以的,除非你的集群满足你的需求,并且你不打算在不重新配置集群的情况下进行更多负载。只需要监控底层的实际主机指标,因为运行 JVM 还需要空闲的主机 RAM 用于开销、堆外存储等。

三、针对你的情况的建议:

似乎您的节点使用效率不高(负载不高)。通常,您希望基础设施(RAM、CPU 等)的使用率达到 80%。因此,您可以考虑迁移到较少的节点,但节点数量要多一些。较小的节点最终会减少数据量,提高并行性,并且可能以更少的成本加快处理速度。

相关内容