Apache spark 使用cgroup进行Spark时介观的行为
我想知道当启用cgroup时,Mesos上细粒度模式下Spark的行为会是什么 一个问题是:当我在没有cgroups的情况下使用Mesos+spark时,它已经表明实际的spark executor进程使用的内存至少比它向Mesos承诺使用的内存多10%。启用cgroup时,它会杀死Spark执行器吗 第二,如何处理文件缓存?Spark严重依赖于文件缓存。文件缓存是否占Mesos中的内存量?可能不会,但我们能影响这一点吗?例如,理想情况下,我希望Spark总共使用8GB,其中5GB应用于java进程——假设Spark运行良好且不会超过5GB——3GB应用于文件缓存(最大)Apache spark 使用cgroup进行Spark时介观的行为,apache-spark,mesos,cgroups,Apache Spark,Mesos,Cgroups,我想知道当启用cgroup时,Mesos上细粒度模式下Spark的行为会是什么 一个问题是:当我在没有cgroups的情况下使用Mesos+spark时,它已经表明实际的spark executor进程使用的内存至少比它向Mesos承诺使用的内存多10%。启用cgroup时,它会杀死Spark执行器吗 第二,如何处理文件缓存?Spark严重依赖于文件缓存。文件缓存是否占Mesos中的内存量?可能不会,但我们能影响这一点吗?例如,理想情况下,我希望Spark总共使用8GB,其中5GB应用于java
我希望有人有这方面的经验,因为为了亲自测试这些东西,我必须经历来自集群系统管理员的大量支持请求,因为cgroups在某一点上依赖于根凭据-我不希望没有询问其他人就白做。要回答您的第一个问题,似乎你对cgroup的工作方式有些混淆。执行器根本无法(正如我可以确认的那样,它确实能够)分配比cgroup允许的内存更多的内存。因此,Mesos实际上不会充当进程杀手或任何东西*。但是,某些类型的程序确实会因无法分配更多内存而中断,这取决于该程序是否退出,或者是否能够正常运行,但可能内存和/或性能较低 对于第二个问题,似乎没有任何配置设置影响实际的cgroup内存量。在executor内存设置和Spark从Mesos获得的内容之间似乎存在1对1的映射。然而,我确实认为存在一个隐藏因素,因为我可以看到Spark要求大约5.8GB,但实际上我将executor内存设置为5GB。(一旦我能在源代码中找到这个可能为15%的隐藏因素,我将更新票据。) 更新时,您需要的设置是
spark.mesos.executor.memoryOverhead
。您可以给出一个以兆字节为单位的数字,作为将用作Mesos资源的总内存添加到执行器内存中,从而作为cgroup内存限制
*=Update2,实际上,默认情况下,cgroup会终止超出控制组限制的进程。我可以确认/cgroups/memory/x/
中的memory.oom\u控件
设置为“0”(直觉上已启用)。然而,在Spark的情况下,上述10-15%的开销为不遇到OOM提供了足够的余地