是否可以配置cgroups或Hadoop,使TaskTracker产生的每个进程都分配给特定的cgroup?
我想使用cgroups强制实施内存限制。可以为TaskTracker分配一个cgroup,但是如果作业造成严重破坏,TaskTracker可能也会被oom-killer杀死,因为它们在同一个组中。
假设我在一台机器上有8 8GB内存。我想为DataNode和系统实用程序保留1.5 of,让Hadoop TaskTracker使用6.5 of的内存。现在,我在spawns、4个映射器和2个reducers (理论上每个都可以使用1 1GB )上使用流API启动一个作业,它们消耗的内存比允许的要多。现在将达到cgroup内存限制,oom杀手开始杀死一个作业。我宁愿为每个Map和Reduce任务使用一个cgroup,例如一个限制为1 1GB内存的cgroup。
这是一个真实的问题还是更多的理论问题?oom-killer会真的杀死Hadoop的TaskTracker吗?还是他会先杀死派生的进程?如果后者在大多数情况下是正确的,那么我的想法可能会行得通。如果不是这样-一个糟糕的作业仍然会杀死所有集群机器上的TaskTracker,并且需要手动重启。
在使用cgroups时,还有什么需要注意的吗?
发布于 2013-03-05 00:21:52
您是否看过hadoop参数,这些参数允许为任务跟踪器的子进程(任务)设置和最大堆分配,并且不要忘记考虑jvm重用的可能性。
有用的链接:
http://allthingshadoop.com/2010/04/28/map-reduce-tips-tricks-your-first-real-cluster/
http://developer.yahoo.com/hadoop/tutorial/module7.html
How to avoid OutOfMemoryException when running Hadoop?
http://www.quora.com/Why-does-Hadoop-use-one-JVM-per-task-block
发布于 2013-03-05 15:36:10
如果您有很多学生和员工访问Hadoop集群以提交作业,那么您可以查看Hadoop中的job Scheduling。
以下是您可能感兴趣的一些类型的要点-
公平调度器:公平份额调度器背后的核心思想是将资源分配给作业,这样平均而言,随着时间的推移,每个作业都会获得相等的可用资源份额。为了确保公平,每个用户都被分配到一个池中。这样,如果一个用户提交了多个作业,他或她可以获得与所有其他用户相同的集群资源份额(独立于他们提交的工作)。
容量调度器:在容量调度中,创建了几个队列,每个队列都有可配置数量的映射和缩减插槽。还为每个队列分配了一个保证容量(其中集群的总容量是每个队列的容量之和)。容量调度是为大型集群定义的,这些集群可能具有多个独立的使用者和目标应用程序。
由于时间不够,我不知羞耻地从这里复制了上面提到的内容,以下是链接。http://www.ibm.com/developerworks/library/os-hadoop-scheduling/index.html
要配置Hadoop,请使用以下链接:http://hadoop.apache.org/docs/r1.1.1/fair_scheduler.html#Installation
https://stackoverflow.com/questions/15103046
复制相似问题