2

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 时还有什么需要注意的吗?

4

2 回答 2

0

您是否查看过允许为 tasktracker 的子进程(任务)设置和最大化堆分配的 hadoop 参数,并且不要忘记查看 jvm 的重用可能性。

有用的链接:

http://allthingshadoop.com/2010/04/28/map-reduce-tips-tricks-your-first-real-cluster/

http://developer.yahoo.com/hadoop/tutorial/module7.html

运行 Hadoop 时如何避免 OutOfMemoryException?

http://www.quora.com/Why-does-Hadoop-use-one-JVM-per-task-block

于 2013-03-04T16:21:51.570 回答
0

如果您有很多学生和教职员工访问 Hadoop 集群以提交作业,您可能可以查看 Hadoop 中的作业调度。

以下是您可能感兴趣的一些类型的要点 -

公平调度器: 公平共享调度器背后的核心思想是将资源分配给作业,这样随着时间的推移,每个作业平均获得可用资源的平等份额。为了确保公平,每个用户都被分配到一个池中。通过这种方式,如果一个用户提交了许多作业,他或她可以获得与所有其他用户相同的集群资源份额(与他们提交的工作无关)。

容量调度器: 在容量调度中,创建了几个队列而不是池,每个队列都有可配置数量的 map 和 reduce 槽。每个队列还分配有保证容量(其中集群的总容量是每个队列容量的总和)。容量调度是为大型集群定义的,这些集群可能有多个独立的消费者和目标应用程序。

由于时间不够,这是我无耻复制上述内容的链接。 http://www.ibm.com/developerworks/library/os-hadoop-scheduling/index.html

要配置 Hadoop,请使用此链接:http ://hadoop.apache.org/docs/r1.1.1/fair_scheduler.html#Installation

于 2013-03-05T07:36:10.097 回答