cgroups
是否可以通过将 TaskTracker 生成的每个进程分配给特定 cgroup 的方式来配置Hadoop?
我想使用cgroups
. 可以将 cgroup 分配给 TaskTracker,但如果作业造成严重破坏,TaskTracker 也可能会被 杀死,oom-killer
因为它们在同一个组中。
假设我的机器上有 8GB 内存。我想为 DataNode 和系统实用程序保留 1.5GB,并让 Hadoop TaskTracker 使用 6.5GB 内存。现在我使用流式 API 开始一个作业,生成 4 个映射器和 2 个减速器(理论上每个都可以使用 1GB RAM),它们占用的内存超出了允许的范围。现在cgroup
将达到内存限制,并且 oom-killer 开始终止作业。我宁愿为每个 Map 和 Reduce 任务使用一个 cgroup,例如一个cgroup
限制为 1GB 内存的 cgroup。
这是一个真实的或更理论上的问题吗?真的会oom-killer
杀死 Hadoop TaskTracker 还是会先杀死分叉的进程?如果后者在大多数情况下是正确的,我的想法可能会奏效。如果不是 - 一个糟糕的工作仍然会杀死所有集群机器上的 TaskTracker 并需要手动重新启动。
使用 cgroups 时还有什么需要注意的吗?