hadoop:将cgroup用于tasktracker任务

lpwwtiir  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(445)

是否可以配置 cgroups 或者hadoop,将tasktracker生成的每个进程分配给特定的cgroup?
我想使用 cgroups . 可以将cgroup分配给tasktracker,但如果作业造成严重破坏,tasktracker也可能会被 oom-killer 因为他们在同一组。
假设我在一台机器上有8gb的内存。我想为datanode和系统实用程序保留1,5gb,并让hadoop tasktracker使用6,5gb的内存。现在我在spawns开始了一个使用流式api的工作,它有4个Map器和2个还原器(理论上每个还原器都可以使用1gb的ram),占用的内存比允许的要多。现在 cgroup 内存限制将被命中,oom杀手开始杀死一个作业。我宁愿为每个Map使用一个cgroup并减少任务,例如 cgroup 仅限于1gb内存。
这是一个真实的问题还是更理论的问题?会不会 oom-killer 真的要杀掉hadoop tasktracker还是他会先杀掉分叉的进程?如果后者在大多数情况下是正确的,我的想法可能会奏效。如果不是-一个坏的工作仍然会杀死所有集群计算机上的tasktracker,并需要手动重新启动。
使用cgroups时还有什么需要查找的吗?

w3nuxt5m

w3nuxt5m1#

如果您有很多学生和员工访问hadoop集群来提交作业,那么您可以查看hadoop中的作业调度。
以下是您可能感兴趣的一些类型的要点-
公平调度器:公平共享调度器背后的核心思想是将资源分配给作业,这样平均来说,随着时间的推移,每个作业都能获得相等的可用资源份额。为了确保公平性,每个用户都被分配到一个池中。这样,如果一个用户提交了多个作业,那么他或她可以获得与所有其他用户相同的集群资源份额(与他们提交的工作无关)。
capacity scheduler:在capacity scheduling中,不创建池,而是创建多个队列,每个队列具有可配置的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

vlju58qv

vlju58qv2#

您已经看过hadoop参数了吗?这些参数允许为tasktracker的子进程(tasks)设置并最大化堆分配,并且不要忘记考虑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

相关问题