spark独立模式:有没有一种方法可以通过编程方式从spark的服务器上获取每个worker的内核/内存信息localhost:8080

5kgi1eie  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(298)

我需要一个机制,能够自动知道当前Spark集群的状态在我的代码,以决定有多少资源,我的代码应该要求。
我看到这个:spark:get number of cluster cores programmably
但是:
他们的答案是错的, java.lang.Runtime.getRuntime.availableProcessors 告诉你物理机器上有多少个内核,但是你可以启动一个spark worker,它有#cores of worker<#机器上的实际内核数。这在Kubernetes甚至是一种常见的做法。
没有办法提取记忆。再说一次,你不能打电话 java.lang.Runtime 因为它同样只显示有关主机的信息。而且更常见的做法是使大小不匹配,因为当内存超过30gb时,所有这些问题都会出现在java中。
那么,有没有一种方法,我可以务实地提取准确的信息,就像他们在localhost:8080?

我不能同时移动到Yarn,我知道这会解决问题,但它太复杂了。
我知道我可以从url解析结果,但那太复杂了。
一些尝试无效: sparkContext.executorMemory() 这只返回您请求的内存。 sparkContext.defaultParallelism() 这将正确返回内核总数,但不会返回一个辅助进程上的内核数。

lxkprmvk

lxkprmvk1#

显然,如果你能假设你所有的员工都是相同的——这是一个比上述所有假设好得多的假设,但有时仍然可能是错误的——你可以使用 sparkContext.defaultParallelism() / (sparkContext.statusTracker().getExecutorInfos().length - 1) 获取核心数。
仍然没有找到一种方法来提取分配给每个工作者的确切内存。

相关问题