[英]Spark Standalone Mode: Is there a way to programmatically get cores/memory information for each worker from Spark's localhost:8080
我需要一种机制来自动知道我的代码中当前 Spark 集群的状态,以便决定我的代码应该请求多少资源。
我看到了这个: Spark:以编程方式获取集群核心数
但:
他们的回答是错误的, java.lang.Runtime.getRuntime.availableProcessors
告诉您物理机上有多少个内核,但是您可以启动一个 Spark 工作程序,该工作程序的内核数 < # 机器上的实际内核数。 这甚至是 Kubernetes 中的常见做法。
没有办法提取 memory。 同样,您不能调用java.lang.Runtime
因为它再次只显示有关主机的信息。 更常见的做法是使大小不匹配,因为当 memory 大于 30GB 时,您在 Java 中遇到的所有这些问题。
那么有没有一种方法可以实用地提取它们在 localhost:8080 中的确切信息?
在此期间我不能迁移到 YARN,我知道这会解决问题,但它太复杂了。
我知道我可以解析 URL 的结果,但这太复杂了。
一些无效的尝试:
sparkContext.executorMemory()
这只返回您请求的 memory。
sparkContext.defaultParallelism()
这会正确返回核心总数,而不是一个工作人员的核心数。
显然,如果您可以假设您的所有工作人员都是相同的 - 这是一个比上述所有工作人员更好的假设,但有时仍然可能是错误的 - 您可以使用sparkContext.defaultParallelism() / (sparkContext.statusTracker().getExecutorInfos().length - 1)
获取核心数。
仍然没有找到一种方法来提取分配给每个工人的确切 memory。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.