Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 资源隔离、ApacheSpark和单机版,关于在云上的VM上运行_Apache Spark_Cloud - Fatal编程技术网

Apache spark 资源隔离、ApacheSpark和单机版,关于在云上的VM上运行

Apache spark 资源隔离、ApacheSpark和单机版,关于在云上的VM上运行,apache-spark,cloud,Apache Spark,Cloud,对于Spark纱线和独立资源分配,例如通过Spark submit实现。例如,这限制了容器被严格限制为请求的内存。这是通过使用CGroups来完成的,CGroups是linux内核的一个特性。但是,如何对纱线和单纱进行研究隔离呢?在这里,我特别好奇的是,在与您可能不知道的用户共享的服务器上运行VM时,内存中的计算是如何安全的,例如在云提供商的机器上运行VM时 例如,当使用纱线时,纱线如何确保容器不受机器上其他容器的影响?那么,当分配1 GB内存时,如何确保机器上的其他人不使用该GB内存呢?那么S

对于Spark纱线和独立资源分配,例如通过Spark submit实现。例如,这限制了容器被严格限制为请求的内存。这是通过使用CGroups来完成的,CGroups是linux内核的一个特性。但是,如何对纱线和单纱进行研究隔离呢?在这里,我特别好奇的是,在与您可能不知道的用户共享的服务器上运行VM时,内存中的计算是如何安全的,例如在云提供商的机器上运行VM时


例如,当使用纱线时,纱线如何确保容器不受机器上其他容器的影响?那么,当分配1 GB内存时,如何确保机器上的其他人不使用该GB内存呢?那么Spark如何确保没有内存泄漏,以及运行另一个应用程序的恶意用户,甚至另一个VM无法从内存获取数据呢

编辑::
Spark或任何其他应用程序通过纱线管理资源时,纱线有责任确保该资源。现在

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

检查纱线内存分配的详细说明。

纱线容器是JVM进程,因此在启动容器时,NM指定JVM选择限制VM内存,然后有一个名为NodeManager的组件,它监视进程的总内存使用情况,并在进程试图消耗更多资源时发送kill信号

NM的ContainerMonitor是否使用CGGroup监控CPU和内存?

根据官方文件: CGroups是一种机制,用于将任务集及其所有未来子任务聚合/划分为具有特定行为的分层组。CGroups是Linux内核的一个特性,并被合并到内核版本2.6.24中。从纱线的角度来看,这使得容器的资源使用受到限制。CPU使用率就是一个很好的例子。没有cgroup,就很难限制容器CPU的使用目前,cGroup仅用于限制CPU使用。

对于内存,它将出现在Hadoop 3上。参考JIRA

如何确保内存仅用于此应用程序

对于分配给JVM进程的内存,JVM确保它抛出堆的内存异常,总的来说,NM的容器监视器进行监视和终止

不能被其他应用程序使用

管理员确保。哈哈哈,在本例中,除了少数管理员之外,任何人都不允许登录到工作节点

现在进入规划阶段,假设您在每个worker/datanode机器中有64 GB RAM,不允许任何人登录以运行任何自定义代码,因此只运行所需的服务(linux和Thread服务)。这是采取最大10 GB,所以你们决定给纱线其余的48 GB

现在,在启动containers时,Thread将告诉NM为每个容器分配最大4GB(其中一个百分比将根据设置分配为实际JVM的堆),这将确保最少12个Happy容器


然后,如果所有作业要求每个容器1 GB,纱线将能够填充48个容器。(谢谢@Samson Scharfrichter)

。。。你的意思是Linux进程可以访问分配给任何其他Linux进程的内存,并潜入其他人的数据?!?或者您是否暗示在进程结束时RAM没有被清理,而另一个进程可以分配一些内存并检查位以猜测对象是如何在那里序列化的?原因是2014年公布的DRAM泄漏。这种泄漏的想法是,您可以导致相邻行中的位翻转,从而可能损坏其他人的数据。由于使用纱线可以确保它们独立运行,我很好奇这是如何实现的,以及如何防止类似的事情发生。有关更易于阅读的信息,请访问。因此,我想知道,当你利用这个漏洞时,你是否可以访问Spark或Thread的内存。你指的是一个硬件漏洞——操作系统无法保护你不受此影响,因为它必须知道其RAM芯片的确切3D拓扑结构,并在实际分配给进程的页面之间过度分配一些空白页面。这是疯狂的,因为内存在实践中变得非常零碎,所以未使用的页面会迅速消耗掉内存的50%或更多;而且每个芯片都有不同的特点。Java不控制其内存页移动的方式/时间、与磁盘的交换等,而Thread也不控制。所以我觉得你的问题没有道理。如果您担心某些RAM芯片具有特定的漏洞,可能会影响未知云中的未知服务器,并产生非决定性的影响,那么我为您提供了一个解决方案:加入阿米什人,远离所有计算机。感谢@RBanerjee的回答,这会让事情变得更清楚。我还有一个问题,那就是当与其他用户共享工作者或主计算机时。想象一下,当使用例如Amazon时,一台机器上可能有多个用户。然后,Linux服务或Thread是否确保其他用户无法访问内存?“Thread使用Java的-Xmx-Xms参数进行内存分配”——实际上不是这样。(a) -Xmx是在映射器和还原器的一些
java选项
属性中定义的,作业可以覆盖这些属性;(b) 如果作业分配堆外内存,-Xmx是非常无用的;(c) Thread检查累计内存使用量(堆栈、堆、堆外)是否超过配额,但这并不是一个先验限制——对每个容器专用的Linux
cgroup
进行定期检查,如果容器超过配额,它将被残忍地杀死。。。但事后来看,“每个容器最大4GB”意味着“至少12个快乐容器”。如果所有作业都要求