2017-03-03 55 views
0

对于Spark YARN和Standalone资源分配,例如通过spark-submit来实现。这例如限制容器严格限于所请求的存储器。这是通过使用CGroups的一个linux内核特性完成的。但是如何为YARN和独立完成研究分离?在这里,我特别好奇当在与您可能不知道的用户共享的服务器上运行虚拟机时,如何保护内存计算,例如在云提供商的机器上运行时。关于在云中的VM上运行的资源隔离,Apache Spark YARN和Standalone

例如,当使用YARN时,YARN如何确保容器不受机器上其他容器的影响?那么它如何确保分配1 GB的内存时,该GB未被其他人在机器上使用?那么Spark如何确保没有内存泄漏,并且恶意用户正在运行另一个应用程序,或者甚至另一个虚拟机无法从内存中获取数据。

+0

呵呵......你暗示Linux进程可以访问分配给任何其他Linux进程的内存,并潜入别人的数据?! –

+0

或者你是否暗示在过程结束时RAM没有被清理,另一个进程可以分配一些内存并检查这些位以猜测对象是如何在那里被序列化的? –

+0

原因是由于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的内存,何时使用它。 –

回答

0

编辑::
Spark或当通过纱线管理资源的任何其他应用程序,它变成纱线的责任,以确保资源。现在

YARN如何确保容器不受节点上其他容器的影响?

查询here了解详细的纱线内存分配说明。 enter image description 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)

+0

感谢@RBanerjee的回答,这清除了很多东西。我仍然有一个问题,那就是当与其他用户共享工作者或主机时。想象一下,在使用亚马逊时,一台机器上可能有多个用户。那么Linux服务或YARN确保内存不能被其他用户访问? –

+0

_“Yarn使用Java的-Xmx -Xms参数来分配内存”_--并非如此。 *(a)* -Xmx在Mappers和Reducers的某些'java-opts'属性中定义,并且作业可以**覆盖**这些; *(b)*如果作业分配**堆外存储器**,则-Xmx非常无用; *(c)* YARN检查累积的内存使用量(堆栈,堆,堆外)没有超过配额,但它不是一个先验限制 - 定期检查Linux'cgroup'专用于每个容器,并且如果容器超过配额,它会被残忍地杀死......但是后果。 –

+2

_“每个容器最大4GB”_表示_“** min ** 12快乐容器”_。如果所有工作要求每个容器1 GB,YARN将能够装入48个容器。 –

相关问题