繁体   English   中英

Spark 独立模式:有没有办法以编程方式从 Spark 的 localhost:8080 获取每个工作人员的内核/内存信息

[英]Spark Standalone Mode: Is there a way to programmatically get cores/memory information for each worker from Spark's localhost:8080

我需要一种机制来自动知道我的代码中当前 Spark 集群的状态,以便决定我的代码应该请求多少资源。

我看到了这个: Spark:以编程方式获取集群核心数

但:

  1. 他们的回答是错误的, java.lang.Runtime.getRuntime.availableProcessors告诉您物理机上有多少个内核,但是您可以启动一个 Spark 工作程序,该工作程序的内核数 < # 机器上的实际内核数。 这甚至是 Kubernetes 中的常见做法。

  2. 没有办法提取 memory。 同样,您不能调用java.lang.Runtime因为它再次只显示有关主机的信息。 更常见的做法是使大小不匹配,因为当 memory 大于 30GB 时,您在 Java 中遇到的所有这些问题。

那么有没有一种方法可以实用地提取它们在 localhost:8080 中的确切信息?

在此处输入图像描述

在此期间我不能迁移到 YARN,我知道这会解决问题,但它太复杂了。

我知道我可以解析 URL 的结果,但这太复杂了。

一些无效的尝试:

  1. sparkContext.executorMemory()这只返回您请求的 memory。

  2. sparkContext.defaultParallelism()这会正确返回核心总数,而不是一个工作人员的核心数。

显然,如果您可以假设您的所有工作人员都是相同的 - 这是一个比上述所有工作人员更好的假设,但有时仍然可能是错误的 - 您可以使用sparkContext.defaultParallelism() / (sparkContext.statusTracker().getExecutorInfos().length - 1)获取核心数。

仍然没有找到一种方法来提取分配给每个工人的确切 memory。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM