我已经创建了一个 Elastic MapReduce 作业,我正在尝试优化它的性能。
此时我正在尝试增加每个实例的映射器数量。我通过 mapred.tasktracker.map.tasks.maximum=X
elastic-mapreduce --create --alive --num-instance 3 \
--bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hadoop \
--args -s,mapred.tasktracker.map.tasks.maximum=5
每次我尝试将每个小实例的 X 设置为 2 以上时,初始化都会失败,由此我得出结论,hadoop 为每个映射任务分配了 800m 的内存。对我来说,这似乎太过分了。我希望它是 400 米的顶部。
我如何告诉 hadoop 为每个 map 任务使用更少的内存?
最佳答案
检查 mapred.child.java.opts属性(property)。它默认为 -Xmx200m,这意味着每个 map/reduce 任务有 200MB 的堆。
看起来像EC2 small有 1.7 GB 内存。这是 TaskTracker 节点上 Hadoop 进程默认设置的内存。感谢"Hadoop : The Definitive Guide"
数据节点 1,000 MB
任务跟踪器 1,000 MB
Tasktracker 子图任务 400 MB (2 * 200 MB)
Tasktracker 子图任务 400 MB (2 * 200 MB)
总计 2,800MB。
除此之外,还有操作系统内存。选择更好的配置或更改默认设置。仅供引用,这里是 recommendation关于不同节点的硬件配置。
关于java - 如何告诉 hadoop 有多少内存分配给单个映射器作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558030/