编辑::
Spark或当通过纱线管理资源的任何其他应用程序,它变成纱线的责任,以确保资源。现在
YARN如何确保容器不受节点上其他容器的影响?
查询here了解详细的纱线内存分配说明。
纱容器是JVM进程,所以同时发动NM指定容器JVM-选择采用限制VM存储器中,然后还有一个在节点管理器叫做ContainersMonitor组件,其监视该过程的总的内存使用和的使用如果进程试图消耗更多资源,则发送终止信号。
是NM的ContainerMonitor使用CGGroup监控CPU和内存吗?
按照官方文档:Using CGroups with YARN cgroup的是聚合/划分,将各组任务的机制,和他们所有的未来的孩子,与专业行为层级组。 CGroups是一个Linux内核特性,并被合并到内核版本2.6.24中。从YARN的角度来看,这允许容器的资源使用受到限制。一个很好的例子就是CPU使用率。没有CGroups,很难限制容器的CPU使用率。 目前,CGroups仅用于限制CPU使用率。
内存,它的到来在Hadoop 3.请参考JIRA here
它是如何制成确保内存只用于此应用程序?
对于分配给JVM进程的内存,JVM确保它为堆抛出内存异常,并且总的来说NM的容器监视器执行监视和查杀。
不能被其他应用程序使用?
管理员确保。哈哈哈,没有人被允许登录到工作人员节点除了少数管理员在我们的情况。
现在进入规划阶段,假设每个worker/datanode机器都有64 GB RAM,没有人允许登录运行任何自定义代码,因此只有所需的服务(linux和yarn服务)正在运行。其中最大10 GB,所以你决定给纱余下的48 GB。
现在启动容器Yarn将告诉NM每个容器分配最大4GB(其中一个百分比将被分配为实际JVM的堆,按照设置),这将确保最小容器数量。
然后,如果所有工作要求每个容器1 GB,YARN将能够填充48个容器。 (谢谢@Samson Scharfrichter)
呵呵......你暗示Linux进程可以访问分配给任何其他Linux进程的内存,并潜入别人的数据?! –
或者你是否暗示在过程结束时RAM没有被清理,另一个进程可以分配一些内存并检查这些位以猜测对象是如何在那里被序列化的? –
原因是由于2014年发布的DRAM泄露,[链接](https://users.ece.cmu.edu/~yoonguk/papers/kim-isca14.pdf)。这种泄漏的想法是,你可以在相邻的行中导致位翻转,从而可能损坏别人的数据。由于使用YARN确保它们独立运行,我很好奇它是如何实现的以及如何防止这种情况发生。在https://googleprojectzero.blogspot.de/2015/03/exploiting-dram-rowhammer-bug-to-gain.html上可以找到更容易阅读的信息。所以我想知道如果能够访问Spark或YARN的内存,何时使用它。 –