java - Spark 如何实现任务间的内存公平?

标签 java multithreading apache-spark memory-management

我正在看这个presentation那是关于 Spark 内存管理。
他谈到了他们如何在一个执行器中实现不同任务之间的公平性(12:00)。他提出了任务之间动态分配的想法,并宣称如果更多任务开始执行,Spark 会将其他任务的页面溢出到磁盘。
我之前读过 Spark 中的任务本质上是线程,而在 Java 中,我们没有这种能力来管理线程的内存并在它们之间建立内存公平性。我想知道 Spark 是如何实现这一目标的?

最佳答案

我不确定公平是否有效。

  • 这是对每个 Executor https://www.davidmcginnis.net/post/spark-job-optimization-myth-5-increasing-executor-cores-is-always-a-good-idea 超过 1 个内核的 executor 内存的出色读取,这与溢出到磁盘无关。
  • 如果可用内存太大,则溢出到磁盘。分区也可以被完全驱逐,导致重新计算(从最后一个检查点)。

  • 我所在的范式与本文类似,因为我们使用单个 Core 运行了更多的 Executor。 Spark 的默认值也确实是 1,我认为这是供应商经过深思熟虑的默认值。

    关于java - Spark 如何实现任务间的内存公平?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68053227/

    相关文章:

    multithreading - RabbitMQ: channel 与交易所的关系

    c++ - 条件变量

    c - 如何通过线程将数组作为返回值传递?

    java - RDD 的垃圾收集

    scala - 如何将 Scala RDD 转换为 Map

    java - Servlet在tomcat上同时处理多个请求

    java - 等待java异步调用完成

    java - 试图理解一些 Java 概念

    apache-spark - spark-通过文件提交配置

    java - 如何设置日期时间小部件的值