对于Spark YARN和Standalone资源分配,例如通过spark-submit实现。这限制了例如容器严格限于所请求的存储器。这是通过使用CGroups Linux内核功能完成的。但是,对于YARN和独立的研究隔离是如何进行的?在这里,我特别好奇当在与您可能不知道的用户共享的服务器上运行VM时,如何保护内存计算,例如在云提供商的计算机上运行时。
例如,当使用YARN时,YARN如何确保容器不受机器上其他容器的影响?那么如何确保在分配1 GB内存时,机器上的其他人不使用此GB?那么Spark如何确保没有内存泄漏和恶意用户运行另一个应用程序,甚至另一个VM无法从内存中获取数据。
答案 0 :(得分:0)
<强>编辑:: 强>
通过Yarn管理资源时,Spark或任何其他应用程序,确保资源成为Yarn的责任。现在
YARN如何确保容器不受节点上其他容器的影响。?
检查here以获取详细的纱线内存分配说明。
Yarn容器是JVM进程,因此在启动容器NM时指定jvm-opts来限制VM内存,然后在NodeManager中有一个名为ContainersMonitor的组件,它监视进程的总内存使用量的使用情况如果进程试图消耗更多资源,则发送一个kill信号。
是NM的ContainerMonitor使用CGGroup来监控CPU和内存吗?
根据官方文件:Using CGroups with YARN CGroups是一种机制,用于将任务集及其所有未来子集聚合/分区为具有特殊行为的层次组。 CGroups是Linux内核功能,并且已合并到内核版本2.6.24中。从YARN的角度来看,这允许容器的资源使用受到限制。一个很好的例子是CPU使用率。没有CGroup,就很难限制容器CPU的使用。 目前,CGroup仅用于限制CPU使用率。
对于Memory,它来自Hadoop 3.请参阅JIRA here
如何确保内存仅用于此应用程序?
对于为JVM进程分配的内存,JVM确保它为堆抛出内存异常,并且NM的容器监视器总共进行监视和查杀。
不能被其他应用程序使用?
管理员确保。哈哈哈, NO ONE 允许登录到工作节点,除了我们案例中的少数管理员。
现在进行规划,假设每个worker / datanode机器中有64 GB RAM,不允许任何人登录以运行任何自定义代码,因此只运行所需的服务(linux和yarn服务)。哪个最大需要10 GB,所以你决定给掉48 GB的Yarn。
现在,在启动容器时,Yarn将告诉NM为每个容器分配最大4GB(根据设置将一个百分比分配为实际的JVM堆),这将确保最小12 快乐容器。
然后,如果所有作业每个容器请求1 GB,YARN将能够容纳48个容器。 (谢谢@Samson Scharfrichter)