Samza YARN执行隔离
在共享的分布式环境中运行 Samza 作业时,流处理器可能会对对方的性能产生影响。使用100% 计算机 CPU 的流处理器将减慢计算机上的所有其他流处理器的速度。
YARN 的一个职责是管理资源,使这种情况不会发生。每个 YARN 的节点管理器(NM)都有一大堆“资源”专用于它。如果 YARN 资源管理器(RM)有足够的资源来满足容器的需求,则只允许在 NM 上分配容器。
YARN 目前支持内存和 CPU 的资源管理。
内存
YARN 将自动对其执行的所有容器执行内存限制。所有容器必须在创建时定义最大内存大小。如果与单个 YARN 容器相关联的进程的所有内存使用量的总和超过此最大值,则 YARN 将终止该容器。
Samza 使用 yarn.container.memory.mb 和 yarn.am.container.memory.mb 配置参数支持内存限制。请记住,这只是 YARN 将允许 SamzaContainer 或 ApplicationMaster 拥有的内存量。当使用 Java(默认为 -Xmx160M)时,仍然需要使用 task.opts 来适当地配置堆设置。有关详细信息,请参阅配置和打包页面。
CPU
YARN 具有虚拟核心的概念。每个 NM 被分配了总数量的虚拟内核(默认为32)。当发出容器请求时,它必须指定需要多少虚拟内核。YARN RM 将仅将容器分配给具有足够虚拟内核以满足请求的 NM。
CGroups
与内存不同,YARN 可以强制执行(通过查看 / proc文件夹),YARN 无法强制执行 CPU 隔离,因为这必须在 Linux 内核级完成。YARN 的一个有趣的新功能是支持 Linux CGroups。CGroups 是一种控制 Linux 内核级进程利用率的方法。
如果 YARN 设置为使用 CGroups,则 YARN 将保证容器至少获得所需的 CPU 数量。目前,YARN 将为您提供更多的 CPU,如果可用。有关执行“最多”CPU使用情况的详细信息,请参阅 YARN-810。
有关使用 CGroup 设置 YARN 的详细信息,请参阅此博文。
更多建议: