【发布时间】:2013-09-11 22:47:50
【问题描述】:
我无法找出配置我的 Hadoop 集群 (CDH4) 并运行 MapReduce1 的最佳方式。我的情况是,我需要运行需要大量 Java 堆空间的两个映射器,以至于每个节点无法运行超过 1 个映射器 - 但同时我希望能够运行作业这可以从每个节点的许多映射器中受益。
我正在通过 Cloudera 管理 UI 配置集群,Max Map Tasks 和 mapred.map.child.java.opts 似乎是相当静态的设置。
我想要的是一个可用 X GB 的堆空间池之类的东西,它可以容纳两种类型的作业,而无需每次都重新配置 MapReduce 服务。如果我运行 1 个映射器,它应该分配 X GB 堆 - 如果我运行 8 个映射器,它应该分配 X/8 GB 堆。
我已经考虑了最大虚拟内存和 Cgroup 内存软/硬限制,但两者都无法得到我想要的。最大虚拟内存无效,因为它仍然是每个任务的设置。 Cgroup 设置是有问题的,因为它似乎实际上并没有将单个任务限制在较低数量的堆中,如果它们有更多,而是会允许任务使用过多的内存,然后在它使用时杀死进程。
可以配置我想要实现的行为吗?
【问题讨论】: