gpt4 book ai didi

apache-spark - 将 cgroups 用于 Spark 时 Mesos 的行为

转载 作者:行者123 更新时间:2023-12-05 07:49:12 25 4
gpt4 key购买 nike

我想知道当启用 cgroup 时,在 Mesos 上细粒度模式下 Spark 的行为会是什么。

一个问题如下:当我在没有 cgroups 的情况下使用 Mesos+spark 时,它已经表明实际的 spark 执行程序进程使用的内存至少比它向 Mesos promise 的要多使用 10%。启用 cgroups 时,它会杀死 Spark 执行程序吗?

其次,文件缓存是如何处理的? Spark 严重依赖文件缓存。 file-cache 是否计入 Mesos 的内存量?可能不会,但我们可以影响它吗?因此,例如,理想情况下我希望 Spark 总共使用 8GB,其中 5GB 应该用于 java 进程——假设 spark 运行良好并且不会增长超过 5GB——3GB 应该用作文件缓存(最大).

我希望有人有这方面的经验,因为为了自己测试这些东西,我将不得不通过我们的集群系统管理员的大量支持请求,因为 cgroups 一度依赖于 root 凭据 - 我讨厌不问别人也是白费力气。

最佳答案

要回答您的第一个问题,您似乎混淆了 cgroups 的工作方式。执行者根本不会(而且它确实如此,正如我可以确认的那样)能够分配比 cgroups 允许的更多的内存。所以 Mesos 实际上不会充当进程 killer 或任何东西*。但是,某些类型的程序确实会因为无法分配更多内存而中断,这取决于程序是否退出,或者是否能够正常运行,但可能内存和/或性能较低。

对于您的第二个问题,似乎没有任何配置设置可以影响实际的 cgroup 内存量。执行程序内存设置与 Spark 从 Mesos 获取的内容之间似乎存在一对一的映射。但是,我确实认为有一个隐藏因素,因为我可以看到 Spark 要求大约 5.8GB,但实际上我将执行程序内存设置为 5GB。 (一旦我能在源代码中找到这个大约 15% 的隐藏因素,我将更新票证。)

更新,您需要的设置是 spark.mesos.executor.memoryOverhead。您可以给出一个以兆字节为单位的数字,该数字将添加到执行程序内存中作为将用作 Mesos 资源的总内存,从而作为 cgroup 内存限制。

*=Update2,实际上 cgroups 默认情况下会杀死超出控制组限制的进程。我可以确认 /cgroups/memory/x/ 中的 memory.oom_control 设置为“0”(这违反直觉已启用)。然而,就 Spark 而言,正是上述 10-15% 的开销提供了足够的回旋余地,不会遇到 OOM。

关于apache-spark - 将 cgroups 用于 Spark 时 Mesos 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37730715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com